将多个 MATLAB 函数分配给 Java 类
此示例向您说明如何使用多个 Java® 函数创建 MATLAB® 矩阵数学程序。
在此示例中,您执行以下步骤:
将多个 MATLAB 函数分配给生成的类。
手动处理本机内存管理。
通过实例化
getfactor.java并使用Factor类库处理数据转换,在 MATLAB 应用程序 (MWArray) 中访问 Java 函数。构建并运行
MatrixMathDemoApp应用程序。
MatrixMathApp 应用程序
MatrixMathApp 应用程序对具有以下形式的简单三对角矩阵(有限差分矩阵)执行 Cholesky、LU 和 QR 因式分解:
A = [ 2 -1 0 0 0
-1 2 -1 0 0
0 -1 2 -1 0
0 0 -1 2 -1
0 0 0 -1 2 ]
您在命令行中提供矩阵的大小,程序会构建矩阵并执行三个因式分解。原始矩阵和结果被打印到标准输出。您可以选择使用稀疏矩阵执行计算,通过在命令行中指定字符串“sparse”作为第二个参数。
文件
| MATLAB 函数 | cholesky.m ludecomp.mqrdecomp.m |
| MATLAB 函数位置 | |
| Java 代码位置 | |
过程
将 MATLAB 附带的
MatrixMathExample文件夹复制到您的工作文件夹:copyfile(fullfile(matlabroot,'toolbox','javabuilder','Examples','MatrixMathExample'),'MatrixMathExample')
在 MATLAB 命令提示符下,导航到工作文件夹中的新
MatrixMathExample\MatrixMathDemoComp子文件夹。如果您还没有这样做,请设置您的 Java 开发环境。有关详细信息,请参阅配置用于生成 Java 包的环境。
检查 MATLAB 函数
cholesky.m、ludecomp.m和qrdecomp.m。function [L] = Cholesky(A) L = chol(A);function [L,U] = LUDecomp(A) [L,U] = lu(A);function [Q,R] = QRDecomp(A) [Q,R] = qr(A);使用以下信息构建 Java 包,可通过 Java 包编译器应用或
compiler.build.javaPackage进行操作:字段 值 Java 包名称 factormatrix类名 factor要编译的文件 choleskyludecompqrdecomp例如,如果您使用的是
compiler.build.javaPackage,请输入:buildResults = compiler.build.javaPackage(["cholesky.m","ludecomp.m","qrdecomp.m"], ... 'PackageName','factormatrix', ... 'ClassName','factor');
有关详细信息,请参阅生成 Java 包并编译 Java 应用程序中的说明。
为访问 MATLAB 函数的应用程序编写源代码。
此示例的示例应用程序位于
MatrixMathExample\MatrixMathDemoJavaApp\getfactor.java中。此语句创建
factor类的一个实例:theFactor = new factor();
以下语句调用封装 MATLAB 函数的方法:
result = theFactor.cholesky(1, a); ... result = theFactor.ludecomp(2, a); ... result = theFactor.qrdecomp(2, a); ...
在 MATLAB 中,导航到
MatrixMathDemoJavaApp文件夹。将生成的
factormatrix.jar包复制到此文件夹中。例如,如果您使用了
compiler.build.javaPackage,请输入:copyfile(fullfile('..','MatrixMathDemoComp','factormatrixjavaPackage','factormatrix.jar'))
在命令提示符窗口中,
cd到MatrixMathDemoJavaApp文件夹。使用
getfactor编译javac应用程序。在 Windows® 上,键入:
javac -classpath "matlabroot\toolbox\javabuilder\jar\javabuilder.jar";.\factormatrix.jar getfactor.java在 UNIX® 上,键入:
javac -classpath "matlabroot/toolbox/javabuilder/jar/javabuilder.jar":./factormatrix.jar getfactor.java
将
替换为 MATLAB 或 MATLAB Runtime 安装文件夹的路径。例如,在 Linux® 上,路径可能为matlabroot/usr/local/MATLAB/R2025a。使用非稀疏矩阵运行
getfactor应用程序。在 Windows 上,键入:
java -classpath .;"matlabroot\toolbox\javabuilder\jar\javabuilder.jar";.\factormatrix.jar getfactor 4在 UNIX 上,键入:
java -classpath .:"matlabroot/toolbox/javabuilder/jar/javabuilder.jar":./factormatrix.jar getfactor 4
注意
如果您在 Mac 64 位平台上运行该应用程序,则必须在 Java 命令中添加
-d64标志。
要对稀疏矩阵运行相同的程序,请使用相同的命令并在末尾添加字符串 sparse。例如,在 Windows 上输入:
java -classpath .;"matlabroot\toolbox\javabuilder\jar\javabuilder.jar";.\factormatrix.jar getfactor 4 sparse理解 getfactor 程序
getfactor 程序从标准输入中获取一个或两个参量。第一个参量转换为测试矩阵的整数阶。如果将字符串 sparse 作为第二个参量传递,则会创建一个稀疏矩阵来包含测试数组。然后计算 Cholesky、LU 和 QR 因式分解并将结果显示到标准输出。
主要方法有三个部分:
第一部分设置输入矩阵,创建一个新的因子对象,并调用
cholesky、ludecomp和qrdecomp方法。这部分是在try模块内部执行的,这样如果执行期间发生异常,则会执行相应的catch模块。第二部分是
catch模块。代码将消息打印到标准输出,让用户知道发生的错误。第三部分是
finally模块,用于在退出之前手动清理本机资源。
另请参阅
compiler.build.javaPackage | Java 包编译器
