В этом примере показано, как:
Используйте MATLAB® Compiler SDK™ продукт для создания сборки (OptimizeComp
). Эта сборка применяет стандартные программы оптимизации MATLAB к целевым функциям, реализованным как объекты .NET.
Доступ к компоненту в приложении .NET (OptimizeApp.vb
). Затем используйте MWObjectArray
класс для создания ссылки на объект .NET (BananaFunction.vb
) и передать этот объект компоненту.
Примечание
Для получения информации об этих классах преобразования данных смотрите MATLAB MWArray Class Ссылка, доступный в
папка, где 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\Примеры\VS version
\ NET\OptimizeExample\OptimizeVBApp
Если вы еще не сделали этого, скопируйте файлы для этого примера следующим образом:
Скопируйте следующую папку, которая поставляется с MATLAB, в вашу рабочую папку: matlabroot
\ toolbox\dotnetbuilder\Примеры\VS version
\ NET\ОптимизируйтеПример
В командной строке MATLAB, cd
на новый OptimizeExample
подпапка в рабочей папке.
Если вы еще не сделали этого, задайте переменные окружения, которые требуются на машине разработки.
Напишите код MATLAB, к которому вы хотите получить доступ. Этот пример использует doOptim.m
и displayObj.m
, который уже находится в рабочей папке. Путь следующий
. matlabroot
\ toolbox\dotnetbuilder\Примеры\VS Version
\ 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)
Из галереи Apps MATLAB откройте приложение Library Compiler.
При компиляции приложения .NET с помощью Library Compiler используйте следующую информацию:
Имя проекта | OptimizeComp |
Имя класса | OptimizeComp.OptimizeClass |
Файл для компиляции |
|
Запись исходного кода для класса (BananaFunction
), который реализует функцию объекта для оптимизации. Пример применения для этого примера приведен в
. Список программ для matlabroot
\ toolbox\dotnetbuilder\Примеры\VS Version
\ 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 для этого примера.
The 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