В этом примере показано, как:
Используйте продукт MATLAB ® Compiler SDK™ для создания сборки (OptimizeComp). Эта сборка применяет процедуры оптимизации MATLAB к целевым функциям, реализованным как объекты .NET.
Доступ к компоненту в приложении .NET (OptimizeApp.vb). Затем используйте MWObjectArray для создания ссылки на объект .NET (BananaFunction.vb) и передайте этот объект компоненту.
Примечание
Для получения информации об этих классах преобразования данных см. Справочник по библиотеке классов MATLAB MWArray, доступный в папка, где matlabroot\help\dotnetbuilder\MWArrayAPImatlabroot представляет папку установки MATLAB
Создайте и запустите приложение.
Компонент (OptimizeComp) находит локальный минимум целевой функции и возвращает минимальное местоположение и значение. Компонент использует функцию оптимизации MATLAB. fminsearch. Этот пример оптимизирует функцию банана Розенброк, используемую в fminsearch документация.
Класс OptimizeComp.OptimizeClass выполняет неограниченную нелинейную оптимизацию целевой функции, реализованной как объект .NET. Метод этого класса, doOptim, принимает начальное значение (объект NET), реализующее целевую функцию, и возвращает местоположение и значение локального минимума.
Второй метод, 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 откройте приложение Компилятор библиотеки.
При компиляции приложения .NET с помощью компилятора библиотеки используйте следующую информацию:
| Название проекта | OptimizeComp |
| Имя класса | OptimizeComp.OptimizeClass |
| Файл для компиляции |
|
Запись исходного кода для класса (BananaFunction), который реализует функцию объекта для оптимизации. Пример приложения для этого примера находится в . Список программ для matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\OptimizeExample\OptimizeVBAppBananaFunction.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 документация.Настройте приложение с помощью Visual Studio ® .NET с помощью OptimizeVBApp , которая содержит файл проекта Visual Studio .NET для этого примера.
OptimizeVBApp содержит файл проекта Visual Studio .NET для этого примера. Откройте проект в Visual Studio .NET, дважды щелкнув OptimizeVBApp.vbproj в Проводнике Windows ®. Его также можно открыть с рабочего стола, щелкнув правой кнопкой мыши по команде «Открыть вне 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