Этот пример показывает вам, как создать приложение.NET, которое находит локальный минимум целевой функции с помощью MATLAB® оптимизационная функция fminsearch
и MWObjectArray
класс.
В этом примере вы выполняете следующие шаги:
Используйте продукт MATLAB Compiler SDK™, чтобы создать блок (OptimizeComp
). Этот блок применяет стандартные программы оптимизации MATLAB к целевым функциям, реализованным, когда.NET возражает.
Доступ к компоненту в любом приложение C# (OptimizeApp.cs
) или Visual Basic® приложение (OptimizeApp.vb
).
Используйте MWObjectArray
класс, чтобы создать ссылку на объект.NET, использующий C# (BananaFunction.cs
) или Visual Basic (BananaFunction.vb
), и передача, которые возражают против компонента.
Создайте и запустите приложение с помощью Visual Studio® Среда разработки.NET.
OptimizeComp
приложение находит локальный минимум целевой функции и возвращает минимальное местоположение и значение. Компонент использует оптимизационную функцию MATLAB fminsearch
. Этот пример оптимизирует банановую функцию Розенброка, используемую в fminsearch
документация.
Класс OptimizeComp.OptimizeClass
выполняет неограниченную нелинейную оптимизацию на целевой функции, реализованной как объект.NET. Метод этого класса, doOptim
, принимает начальное значение (СЕТЕВОЙ объект), который реализует целевую функцию и возвращает местоположение и значение локального минимума.
Второй метод, displayObj
, средство отладки, которое перечисляет характеристики объекта.NET. Эти два метода doOptim
и displayObj
инкапсулируйте функции MATLAB.
Функции MATLAB | doOptim.m
displayObj.m
|
Местоположение функции MATLAB |
|
Участок кода C# |
|
Участок кода Visual Basic |
|
Местоположение ссылки API MWArray |
|
Скопируйте следующую папку, которая поставляется с MATLAB к вашей папке работы:
matlabroot
\toolbox\dotnetbuilder\Examples\VSVersion
\NET\OptimizeExample
В командной строке MATLAB перейдите к новому OptimizeExample\OptimizeComp
подпапка в вашей папке работы.
Исследуйте код MATLAB, к которому вы хотите получить доступ. Этот пример использует doOptim.m
и displayObj.m
.
function [x,fval] = doOptim(h, x0)
mWrapper = @(x) h.evaluateFunction(x);
directEval = h.evaluateFunction(x0)
wrapperEval = mWrapper(x0)
[x,fval] = fminsearch(mWrapper,x0)
function className = displayObj(h) h className = class(h) whos('h') methods(h)
Создайте компонент.NET с приложением Library Compiler или compiler.build.dotNETAssembly
использование следующей информации:
Поле | Значение |
---|---|
Имя библиотеки | OptimizeComp |
ClassName | OptimizeComp.OptimizeClass |
Файлы, чтобы скомпилировать | doOptim.m
displayObj.m
|
Например, если вы используете compiler.build.dotNETAssembly
Ввод:
buildResults = compiler.build.dotNETAssembly(["doOptim.m","displayObj.m"], ... 'AssemblyName','OptimizeComp', ... 'ClassName','OptimizeComp.OptimizeClass');
Для получения дополнительной информации смотрите, что инструкции в Генерируют блок.NET и Создают Приложение.NET.
Решите, используете ли вы C# или Visual Basic, чтобы получить доступ к компоненту.
C
Если вы используете C#, запишите исходный код для класса, который реализует объектную функцию, чтобы оптимизировать.
Пример приложения для этого примера находится в OptimizeExample\OptimizeCSApp\BananaFunction.cs
Visual Basic
Если вы используете Visual Basic, запишите исходный код для класса, который реализует объектную функцию, чтобы оптимизировать.
Пример приложения для этого примера находится в OptimizeExample\OptimizeVBApp\BananaFunction.vb
.
BananaFunction
класс реализует банановую функцию Розенброка, описанную в fminsearch
документация.
Откройте файл проекта.NET, который соответствует вашему языку приложения с помощью Visual Studio.
C
Если вы используете C#, OptimizeCSApp
папка содержит файл проекта Visual Studio.NET для этого примера. Откройте проект в Visual Studio.NET путем двойного клика по OptimizeCSApp.csproj
в Windows® Проводник. Можно также открыть его с рабочего стола путем щелчка правой кнопкой по OptimizeCSApp.csproj и выбора Open Outside MATLAB.
Visual Basic
Если вы используете Visual Basic, OptimizeVBApp
папка содержит файл проекта Visual Studio.NET для этого примера. Откройте проект в Visual Studio.NET путем двойного клика по OptimizeVBApp.vbproj
в Windows Explorer. Можно также открыть его с рабочего стола путем щелчка правой кнопкой по OptimizeVBApp.vbproj и выбора Open Outside MATLAB.
Добавьте ссылку на свой файл блока OptimizeComp.dll
.
Добавьте ссылку на MWArray
API.
Если MATLAB установлен в вашей системе |
|
Если MATLAB Runtime установлен в вашей системе |
|
Создайте и запустите OptimizeApp
приложение в Visual Studio.NET.
Программа отображает следующий вывод:
Using initial points= -1.2000 1 ***************************************************** ** Properties of .NET Object ** ***************************************************** h = MathWorks.Examples.Optimize.BananaFunction handle with no properties. Package: MathWorks.Examples.Optimize className = MathWorks.Examples.Optimize.BananaFunction Name Size Bytes Class Attributes h 1x1 60 MathWorks.Examples.Optimize.BananaFunction Methods for class MathWorks.Examples.Optimize.BananaFunction: BananaFunction addlistener findprop lt Equals delete ge ne GetHashCode eq gt notify GetType evaluateFunction isvalid ToString findobj le **************** Finished displayObj **************** ***************************************************** ** Performing unconstrained nonlinear optimization ** ***************************************************** directEval = 24.2000 wrapperEval = 24.2000 x = 1.0000 1.0000 fval = 8.1777e-010 ***************** Finished doOptim ****************** Location of minimum: 1.0000 1.0000 Function value at minimum: 8.1777e-010
libraryCompiler
| compiler.build.dotNETAssembly
| deploytool