Цель примера состоит в том, чтобы показать вам следующее:
Как присвоить больше чем одну функцию MATLAB® классу компонента
Как получить доступ к компоненту в приложении C# (MatrixMathApp.cs
) путем инстанцирования Factor
и использования библиотеки классов MWArray
, чтобы обработать преобразование данных
Для получения информации об этих классах преобразования данных см. Справочник по библиотеке классов MWArray MATLAB, доступный в папке
, где matlabroot\help\dotnetbuilder\MWArrayAPI
matlabroot
представляет вашу папку установки MATLAB
Как создать и запустить приложение MatrixMathApp
, с помощью Визуальной среды разработки Studio®.NET
Этот пример создает компонент.NET, чтобы выполнить матричную математику. Пример создает программу, которая выполняет Холесский, 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 к вашей папке работы:
matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\MatrixMathExample
В подсказке команды MATLAB, cd
к новой подпапке MatrixMathExample
в вашей папке работы.
Запишите функции MATLAB, когда вы были бы любая функция MATLAB.
Код для cholesky
, ludecomp
и функций qrdecomp
уже находится в вашей папке работы в MatrixMathExample\MatrixMathComp\
.
Из галереи приложений MATLAB откройте приложение Library Compiler.
Создайте компонент.NET. Смотрите, что инструкции в Генерируют блок.NET и Создают Приложение.NET для получения дополнительной информации. Используйте следующую информацию:
Название проекта | MatrixMathComp |
ClassName | Factor |
Файлы, чтобы скомпилировать | cholesky ludecomp qrdecomp |
Запишите исходный код для приложения, это получает доступ к компоненту.
Пример приложения для этого примера находится в MatrixMathExample\MatrixMathCSApp\MatrixMathApp.cs
.
Распечатку программ показывают здесь.
Оператор
Factor factor= new Factor();
создает экземпляр класса Factor
.
Следующие операторы вызывают методы, которые инкапсулируют функции MATLAB:
argOut= factor.cholesky((MWArray)matrix); ... argsOut= factor.ludecomp(2, matrix); ... argsOut= factor.qrdecomp(2, matrix); ...
Смотрите Понимание Программы MatrixMath для получения дополнительной информации о структуре этой программы.
Создайте the MatrixMathApp
приложение с помощью Visual Studio.NET.
Папка MatrixMathCSApp
содержит файл проекта Visual Studio.NET для этого примера. Откройте проект в Visual Studio.NET путем двойного клика по MatrixMathCSApp.csproj
в Проводнике Windows®. Можно также открыть его с рабочего стола путем щелчка правой кнопкой по MatrixMathCSApp.csproj> Open Outside MATLAB.
Добавьте ссылку на компонент MWArray
, который является
Смотрите Поддерживаемые Версии Microsoft.NET Framework для списка поддерживаемых версий среды.matlabroot
\toolbox\dotnetbuilder\bin\architecture\
framework_version
\mwarray.dll.
При необходимости добавьте (или зафиксируйте местоположение), ссылка на компонент MatrixMathComp
, который вы создали на предыдущем шаге. (Компонент, MatrixMathComp.dll
, находится в подпапке \MatrixMathExample\MatrixMathComp\x86\V2.0\Debug\distrib
вашей рабочей области.)
Создайте и запустите приложение в Visual Studio.NET.
Следующий код задает функции MATLAB, используемые в примере.
Программа MatrixMath
берет один или два аргумента из командной строки. Первый аргумент преобразован в целочисленный порядок тестовой матрицы. Если строка, sparse
передается в качестве второго аргумента, разреженная матрица, создается, чтобы содержать тестовый массив. Холесский, LU и QR-факторизации затем вычисляются, и результаты отображены.
Основной метод имеет три части:
Первая часть настраивает входную матрицу, создает новый факторный объект и вызывает cholesky
, ludecomp
и методы qrdecomp
. Эта часть выполняется в блоке try
. Это сделано так, чтобы, если исключение происходит во время выполнения, соответствующий блок catch
был выполнен.
Вторая часть является блоком catch
. Код распечатывает сообщение к стандартному выводу, чтобы сообщить пользователю об ошибке, которая произошла.
Третья часть является блоком finally
, чтобы вручную очистить нативные ресурсы перед выходом.
Это дополнительное как сборщик "мусора" будет автоматически ресурсы очистки для вас.