Присвойте несколько функций MATLAB классу Java

Этот пример показывает вам, как создать Java® матричная математическая программа с помощью нескольких MATLAB® функции.

В этом примере вы выполняете следующие шаги:

  1. Присвойте больше чем одну функцию MATLAB сгенерированному классу.

  2. Вручную обработайте нативное управление памятью.

  3. Доступ к функциям MATLAB в приложении Java (getfactor.java) путем инстанцирования Factor и использование MWArray библиотека классов, чтобы обработать преобразование данных.

  4. Создайте и запустите MatrixMathDemoApp приложение.

Приложение MatrixMathApp

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 ]

Вы предоставляете размер матрицы на командной строке, и программа создает матрицу и выполняет эти три факторизации. Исходная матрица и результаты распечатаны к стандартному выводу. Можно опционально выполнить вычисления с помощью разреженной матрицы путем определения строки, "разреженной" как второй параметр на командной строке.

Файлы

Функции MATLABcholesky.m
ludecomp.m
qrdecomp.m
Местоположение функции MATLABmatlabroot\toolbox\javabuilder\Examples\MatrixMathExample\MatrixMathDemoComp\
Участок кода Javamatlabroot\toolbox\javabuilder\Examples\MatrixMathExample\MatrixMathDemoJavaApp\getfactor.java

Процедура

  1. Скопируйте MatrixMathExample папка, которая поставляется с MATLAB к вашей папке работы:

    copyfile(fullfile(matlabroot,'toolbox','javabuilder','Examples','MatrixMathExample'),'MatrixMathExample')

    В командной строке MATLAB перейдите к новому MatrixMathExample\MatrixMathDemoComp подпапка в вашей папке работы.

  2. Если вы уже не сделали так, настраивал вашу среду разработки Java. Для получения дополнительной информации смотрите, Конфигурируют Вашу Среду Java для Генерации Пакетов.

  3. Исследуйте функции 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);

  4. Создайте пакет 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.

  5. Запишите исходный код для приложения, это получает доступ к функциям MATLAB.

    Пример приложения для этого примера находится в MatrixMathExample\MatrixMathDemoJavaApp\getfactor.java.

     getfactor.java

    Этот оператор создает экземпляр класса factor:

    theFactor = new factor();
    

    Следующие операторы вызывают методы, которые инкапсулируют функции MATLAB:

    result = theFactor.cholesky(1, a);
    ...
    result = theFactor.ludecomp(2, a);
    ...
    result = theFactor.qrdecomp(2, a);
    ...
  6. В MATLAB перейдите к MatrixMathDemoJavaApp папка.

  7. Скопируйте сгенерированный factormatrix.jar пакет в эту папку.

    • Если вы использовали compiler.build.javaPackageВвод:

      copyfile(fullfile('..','MatrixMathDemoComp','factormatrixjavaPackage','factormatrix.jar'))
    • Если вы использовали Library Compiler, введите:

      copyfile(fullfile('..','MatrixMathDemoComp','factormatrix','for_testing','factormatrix.jar'))
  8. В окне командной строки, cd к theMatrixMathDemoJavaApp папка.

  9. Скомпилируйте 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

    Замените matlabroot с путем к вашему MATLAB или папке установки MATLAB Runtime. Например, на Linux®, путем может быть /usr/local/MATLAB/R2021b.

  10. Запустите 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 Программы

getfactor программа берет один или два аргумента из стандартного входа. Первый аргумент преобразован в целочисленный порядок тестовой матрицы. Если строка sparse передается в качестве второго аргумента, разреженная матрица создается, чтобы содержать тестовый массив. Холесский, LU и QR-факторизации затем вычисляются, и результаты отображены к стандартному выводу.

Основной метод имеет три части:

  • Первая часть настраивает входную матрицу, создает новый факторный объект и вызывает cholesky, ludecomp, и qrdecomp методы. Эта часть выполняется в try блокируйтесь, так, чтобы, если исключение происходит во время выполнения, соответствующего catch блок будет выполняться.

  • Второй частью является catch блок. Код распечатывает сообщение к стандартному выводу, чтобы сообщить пользователю об ошибке, которая произошла.

  • Третьей частью является finally блокируйтесь, чтобы вручную очистить нативные ресурсы перед выходом.

Смотрите также

|

Похожие темы