Этот пример показывает вам, как создать Java® матричная математическая программа с помощью нескольких MATLAB® функции.
В этом примере вы выполняете следующие шаги:
Присвойте больше чем одну функцию MATLAB сгенерированному классу.
Вручную обработайте нативное управление памятью.
Доступ к функциям MATLAB в приложении Java (getfactor.java
) путем инстанцирования Factor
и использование MWArray
библиотека классов, чтобы обработать преобразование данных.
Создайте и запустите MatrixMathDemoApp
приложение.
MatrixMathApp
приложение выполняет Холесский, 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 ]
Вы предоставляете размер матрицы на командной строке, и программа создает матрицу и выполняет эти три факторизации. Исходная матрица и результаты распечатаны к стандартному выводу. Можно опционально выполнить вычисления с помощью разреженной матрицы путем определения строки, "разреженной" как второй параметр на командной строке.
Функции MATLAB | cholesky.m
ludecomp.m qrdecomp.m |
Местоположение функции MATLAB |
|
Участок кода Java |
|
Скопируйте MatrixMathExample
папка, которая поставляется с MATLAB к вашей папке работы:
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 с приложением Library Compiler или compiler.build.javaPackage
использование следующей информации:
Поле | Значение |
---|---|
Имя библиотеки | factormatrix |
ClassName | factor |
Файлы, чтобы скомпилировать | cholesky ludecomp qrdecomp |
Например, если вы используете 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'))
Если вы использовали Library Compiler, введите:
copyfile(fullfile('..','MatrixMathDemoComp','factormatrix','for_testing','factormatrix.jar'))
В окне командной строки, cd
к theMatrixMathDemoJavaApp
папка.
Скомпилируйте 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/R2021b
.
Запустите 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-битная платформа, необходимо добавить -d64
отметьте в команде Java.
Выведите для неразреженной матрицы
Чтобы запустить ту же программу для разреженной матрицы, используйте ту же команду и добавьте строку sparse
в конце. Например, на Windows, введите:
java -classpath .;"matlabroot
\toolbox\javabuilder\jar\javabuilder.jar";.\factormatrix.jar getfactor 4 sparse
getfactor
программа берет один или два аргумента из стандартного входа. Первый аргумент преобразован в целочисленный порядок тестовой матрицы. Если строка sparse
передается в качестве второго аргумента, разреженная матрица создается, чтобы содержать тестовый массив. Холесский, LU и QR-факторизации затем вычисляются, и результаты отображены к стандартному выводу.
Основной метод имеет три части:
Первая часть настраивает входную матрицу, создает новый факторный объект и вызывает cholesky
, ludecomp
, и qrdecomp
методы. Эта часть выполняется в try
блокируйтесь, так, чтобы, если исключение происходит во время выполнения, соответствующего catch
блок будет выполняться.
Второй частью является catch
блок. Код распечатывает сообщение к стандартному выводу, чтобы сообщить пользователю об ошибке, которая произошла.
Третьей частью является finally
блокируйтесь, чтобы вручную очистить нативные ресурсы перед выходом.
libraryCompiler
| compiler.build.javaPackage