Этот пример показывает как:
Используйте продукт MATLAB® Compiler SDK™, чтобы создать блок (OptimizeComp
). Этот блок применяет стандартные программы оптимизации MATLAB к целевым функциям, реализованным, когда.NET возражает.
Доступ к компоненту в приложении.NET (OptimizeApp.vb
). Затем используйте класс MWObjectArray
, чтобы создать ссылку на объект.NET (BananaFunction.vb
) и передача, которые возражают против компонента.
Для получения информации об этих классах преобразования данных см. Справочник по библиотеке классов MWArray MATLAB, доступный в папке
, где matlabroot\help\dotnetbuilder\MWArrayAPI
matlabroot
представляет вашу папку установки MATLAB
Создайте и запустите приложение.
Компонент OptimizeComp
Компонент (
OptimizeComp
) находит локальный минимум целевой функции и возвращает минимальное местоположение и значение. Компонент использует функцию оптимизации MATLAB fminsearch
. Этот пример оптимизирует банановую функцию Розенброка, используемую в документации fminsearch
.
Класс
OptimizeComp.OptimizeClass
выполняет неограниченную нелинейную оптимизацию на целевой функции, реализованной как объект.NET. Метод этого класса, doOptim
, принимает начальное значение (СЕТЕВОЙ объект), который реализует целевую функцию и возвращает местоположение и значение локального минимума.
Второй метод,
displayObj
, является средством отладки, которое перечисляет характеристики объекта.NET. Эти два метода, doOptim
и displayObj
, инкапсулируют функции MATLAB. Код MATLAB для этих двух методов находится в doOptim.m
и displayObj.m
. Можно найти этот код в
.matlabroot\toolbox\dotnetbuilder\Examples\VSversion\NET\OptimizeExample\OptimizeVBApp
Процедура
Если вы уже не сделали так, скопируйте файлы для этого примера можно следующим образом:
Скопируйте следующую папку, которая поставляется с MATLAB к вашей папке работы: matlabroot\toolbox\dotnetbuilder\Examples\VSversion\NET\OptimizeExample
В подсказке команды MATLAB, cd
к новой подпапке OptimizeExample
в вашей папке работы.
Если вы уже не сделали так, установил переменные окружения, которые требуются на машине разработки.
Запишите код MATLAB, к которому вы хотите получить доступ. Этот пример использует doOptim.m
и displayObj.m
, который уже находится в вашей папке работы. Путем является matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\OptimizeExample\OptimizeComp
.
Для ссылки код doOptim.m
отображен здесь:
function [x,fval] = doOptim(h, x0)
mWrapper = @(x) h.evaluateFunction(x);
directEval = h.evaluateFunction(x0)
wrapperEval = mWrapper(x0)
[x,fval] = fminsearch(mWrapper,x0)
Для ссылки код displayObj.m
отображен здесь:function className = displayObj(h)
h
className = class(h)
whos('h')
methods(h)
Из галереи приложений MATLAB откройте приложение Library Compiler.
Когда вы компилируете приложение.NET с помощью Library Compiler, используйте следующую информацию:
Название проекта OptimizeComp
ClassName OptimizeComp.OptimizeClass
Файл, чтобы скомпилировать doOptim.m
displayObj.m
Запишите исходный код для класса (BananaFunction
), который реализует объектную функцию, чтобы оптимизировать. Пример приложения для этого примера находится в matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\OptimizeExample\OptimizeVBApp
. Распечатка программ для BananaFunction.vb
отображает следующий код:
Imports System
Namespace MathWorks.Examples.Optimize
Class BananaFunction
#Region "Methods"
Public Sub BananaFunction()
End Sub
Public Function evaluateFunction(ByVal x As Double()) As Double
Dim term1 As Double = 100 * Math.Pow((x(1) - Math.Pow(x(0),
2.0)), 2.0)
Dim term2 As Double = Math.Pow((1 - x(0)), 2.0)
Return term1 + term2
End Function
#End Region
End Class
End Namespace
Класс реализует банановую функцию Розенброка, описанную в документации fminsearch
.Настройте приложение с помощью Визуального Studio®.NET с помощью папки OptimizeVBApp
, которая содержит файл проекта Visual Studio.NET для этого примера.
Папка OptimizeVBApp
содержит файл проекта Visual Studio.NET для этого примера. Откройте проект в Visual Studio.NET путем двойного клика по OptimizeVBApp.vbproj
в Проводнике Windows®. Можно также открыть его с рабочего стола путем щелчка правой кнопкой по OptimizeVBApp.vbproj> Open Outside MATLAB.
Добавьте ссылку на компонент MWArray
, который является matlabroot\toolbox\dotnetbuilder\bin\architecture\framework_version\mwarray.dll.
При необходимости добавьте (или зафиксируйте местоположение), ссылка на компонент OptimizeComp
, который вы создали на предыдущем шаге. (Компонент, OptimizeComp.dll
, находится в подпапке \OptimizeExample\OptimizeComp\x86\V2.0\Debug\distrib
вашей рабочей области.)
Когда запущено успешно, программа отображает следующий вывод:
Using initial points= -1.2000 1
*****************************************************
** Properties of .NET Object **
*****************************************************
h =
MathWorks.Examples.Optimize.BananaFunction handle w
ith 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