В этом примере показано, как:
Используйте MATLAB® Compiler SDK™ продукт для создания сборки (OptimizeComp). Эта сборка применяет стандартные программы оптимизации MATLAB к целевым функциям, реализованным как объекты .NET.
Доступ к компоненту в приложении .NET (OptimizeApp.cs). Затем используйте MWObjectArray класс для создания ссылки на объект .NET (BananaFunction.cs) и передать этот объект компоненту.
Примечание
Для получения информации об этих классах преобразования данных смотрите 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\OptimizeComp
Если вы еще не сделали этого, скопируйте файлы для этого примера следующим образом:
Скопируйте следующую папку, которая поставляется с 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 |
| Файл для компиляции | doOptim.m displayObj.m |
Запись исходного кода для класса (BananaFunction), который реализует функцию объекта для оптимизации. Пример применения для этого примера приведен в . Список программ для matlabroot\ toolbox\dotnetbuilder\VS Version\ NET\Примеры\OptimizeExample\OptimizeCSAppBananaFunction.cs отображает следующий код:
using System;
namespace MathWorks.Examples.Optimize
{
public class BananaFunction
{
public BananaFunction() {}
public double evaluateFunction(double[] x)
{
double term1= 100*Math.Pow((x[1]-Math.Pow(x[0],2.0)),2.0);
double term2= Math.Pow((1-x[0]),2.0);
return term1+term2;
}
}
}
fminsearch документация.Настройте приложение с помощью Visual Studio® .NET с использованием OptimizeCSApp папка, содержащая файл проекта Visual Studio .NET для этого примера.
. Откройте проект в Visual Studio .NET двойным кликом мыши OptimizeCSApp.csproj в Windows® Исследователь. Вы также можете открыть его с рабочего стола, щелкнув правой кнопкой мыши OptimizeCSApp.csproj > 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
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