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

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

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

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

  • Доступ к компоненту в приложении C# (MatrixMathApp.cs) или Visual Basic® приложение (MatrixMathApp.vb) путем инстанцирования Factor и использование MWArray библиотека классов, чтобы обработать преобразование данных.

  • Создайте и запустите MatrixMathApp приложение с помощью Visual Studio® Среда разработки.NET.

Приложение 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\dotnetbuilder\Examples\VSVersion\NET\MatrixMathExample\MatrixMathComp\
Участок кода C#matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\MatrixMathExample\MatrixMathCSApp\MatrixMathApp.cs
Участок кода Visual Basicmatlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\MatrixMathExample\MatrixMathVBApp\MatrixMathApp.vb

Процедура

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

    matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\MatrixMathExample
    

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

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

  3. Создайте компонент.NET с приложением Library Compiler или compiler.build.dotNETAssembly использование следующей информации:

    Поле Значение
    Имя библиотекиMatrixMathComp
    ClassName Factor
    Файлы, чтобы скомпилироватьcholesky    ludecomp    qrdecomp

    Например, если вы используете compiler.build.dotNETAssemblyВвод:

    buildResults = compiler.build.dotNETAssembly(["cholesky.m","ludecomp.m","qrdecomp.m"], ...
    'AssemblyName','MatrixMathComp', ...
    'ClassName','Factor');

    Для получения дополнительной информации смотрите, что инструкции в Генерируют блок.NET и Создают Приложение.NET.

  4. Решите, используете ли вы C# или Visual Basic, чтобы получить доступ к компоненту.

    • C

      Если вы используете C#, запишите исходный код для приложения C#, это получает доступ к компоненту.

      Пример приложения для этого примера находится в MatrixMathExample\MatrixMathCSApp\MatrixMathApp.cs.

       MatrixMathApp.cs

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

       Factor factor= new Factor();

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

      argOut= factor.cholesky((MWArray)matrix);
      ...
      argsOut= factor.ludecomp(2, matrix);
      ...
      argsOut= factor.qrdecomp(2, matrix);
      ...
    • Visual Basic

      Если вы используете Visual Basic, запишите исходный код для приложения Visual Basic, это получает доступ к компоненту.

      Пример приложения для этого примера находится в MatrixMathExample\MatrixMathVBApp\MatrixMathApp.vb.

       MatrixMathApp.vb

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

      Dim factor As Factor = New Factor

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

      argOut = factor.cholesky(matrix)
      
      argsOut = factor.ludecomp(2, matrix)
      
      argsOut = factor.qrdecomp(2, matrix)
  5. Откройте файл проекта.NET, который соответствует вашему языку приложения с помощью Visual Studio.

    • C

      Если вы используете C#, MatrixMathCSApp папка содержит файл проекта Visual Studio.NET для этого примера. Откройте проект в Visual Studio.NET путем двойного клика по MatrixMathCSApp.csproj в Windows® Проводник. Можно также открыть его с рабочего стола путем щелчка правой кнопкой по MatrixMathCSApp.csproj и выбора Open Outside MATLAB.

    • Visual Basic

      Если вы используете Visual Basic, MatrixMathVBApp папка содержит файл проекта Visual Studio.NET для этого примера. Откройте проект в Visual Studio.NET путем двойного клика по MatrixMathVBApp.vbproj в Windows Explorer. Можно также открыть его с рабочего стола путем щелчка правой кнопкой по MatrixMathVBApp.vbproj и выбора Open Outside MATLAB.

  6. Добавьте ссылку на свой файл блока MatrixMathComp.dll расположенный в папке, где вы сгенерировали блок.

  7. Добавьте ссылку на MWArray API.

    Если MATLAB установлен в вашей системеmatlabroot\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll
    Если MATLAB Runtime установлен в вашей системе<MATLAB_RUNTIME_INSTALL_DIR>\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll

  8. Создайте и запустите MatrixMathApp приложение в Visual Studio.

    Программа отображает следующий вывод:

    Test Matrix:
       (1,1)        2
       (2,1)       -1
       (1,2)       -1
       (2,2)        2
       (3,2)       -1
       (2,3)       -1
       (3,3)        2
       (4,3)       -1
       (3,4)       -1
       (4,4)        2
    
    Cholesky Factorization:
       (1,1)       1.4142
       (1,2)      -0.7071
       (2,2)       1.2247
       (2,3)      -0.8165
       (3,3)       1.1547
       (3,4)      -0.8660
       (4,4)       1.1180
    
    LU Factorization:
    L Matrix:
       (1,1)       1.0000
       (2,1)      -0.5000
       (2,2)       1.0000
       (3,2)      -0.6667
       (3,3)       1.0000
       (4,3)      -0.7500
       (4,4)       1.0000
    U Matrix:
       (1,1)       2.0000
       (1,2)      -1.0000
       (2,2)       1.5000
       (2,3)      -1.0000
       (3,3)       1.3333
       (3,4)      -1.0000
       (4,4)       1.2500
    
    QR Factorization:
    Q Matrix:
       (1,1)      -0.8944
       (2,1)       0.4472
       (1,2)      -0.3586
       (2,2)      -0.7171
       (3,2)       0.5976
       (1,3)      -0.1952
       (2,3)      -0.3904
       (3,3)      -0.5855
       (4,3)       0.6831
       (1,4)       0.1826
       (2,4)       0.3651
       (3,4)       0.5477
       (4,4)       0.7303
    R Matrix:
       (1,1)      -2.2361
       (1,2)       1.7889
       (2,2)      -1.6733
       (1,3)      -0.4472
       (2,3)       1.9124
       (3,3)      -1.4639
       (2,4)      -0.5976
       (3,4)       1.9518
       (4,4)       0.9129

Понимание программы MatrixMath

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

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

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

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

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

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

| |

Связанные примеры

Больше о