Этот пример показывает вам, как создать матричную математическую программу.NET с помощью нескольких MATLAB® функции.
В этом примере вы выполняете следующие шаги:
Присвойте больше чем одну функцию MATLAB классу компонента.
Доступ к компоненту в приложении C# (MatrixMathApp.cs
) или Visual Basic® приложение (MatrixMathApp.vb
) путем инстанцирования Factor
и использование MWArray
библиотека классов, чтобы обработать преобразование данных.
Создайте и запустите MatrixMathApp
приложение с помощью Visual Studio® Среда разработки.NET.
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 |
|
Участок кода C# |
|
Участок кода Visual Basic |
|
Скопируйте следующую папку, которая поставляется с продуктом MATLAB к вашей папке работы:
matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\MatrixMathExample
В командной строке MATLAB перейдите к новому MatrixMathExample\MatrixMathComp
подпапка в вашей папке работы.
Исследуйте функции 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);
Создайте компонент.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.
Решите, используете ли вы C# или Visual Basic, чтобы получить доступ к компоненту.
C
Если вы используете C#, запишите исходный код для приложения C#, это получает доступ к компоненту.
Пример приложения для этого примера находится в MatrixMathExample\MatrixMathCSApp\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
.
Этот оператор создает экземпляр класса Factor
:
Dim factor As Factor = New Factor
Следующие операторы вызывают методы, которые инкапсулируют функции MATLAB:
argOut = factor.cholesky(matrix)
argsOut = factor.ludecomp(2, matrix)
argsOut = factor.qrdecomp(2, matrix)
Откройте файл проекта.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.
Добавьте ссылку на свой файл блока MatrixMathComp.dll
расположенный в папке, где вы сгенерировали блок.
Добавьте ссылку на MWArray
API.
Если MATLAB установлен в вашей системе |
|
Если MATLAB Runtime установлен в вашей системе |
|
Создайте и запустите 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
программа берет один или два аргумента из командной строки. Первый аргумент преобразован в целочисленный порядок тестовой матрицы. Если строка sparse
передается в качестве второго аргумента, разреженная матрица создается, чтобы содержать тестовый массив. Холесский, LU и QR-факторизации затем вычисляются, и результаты отображены.
Основной метод имеет три части:
Первая часть настраивает входную матрицу, создает новый факторный объект и вызывает cholesky
, ludecomp
, и qrdecomp
методы. Эта часть выполняется в try
блок. Это сделано так, чтобы, если исключение происходит во время выполнения, соответствующего catch
блок будет выполняться.
Второй частью является catch
блок. Код распечатывает сообщение к стандартному выводу, чтобы сообщить пользователю об ошибке, которая произошла.
Третьей частью является finally
блокируйтесь, чтобы вручную очистить нативные ресурсы перед выходом. Это является дополнительным, когда сборщик "мусора" автоматически очистит ресурсы для вас.
libraryCompiler
| compiler.build.dotNETAssembly
| deploytool