This example shows how to:
Use the MATLAB® Compiler SDK™ product to create an
assembly (OptimizeComp). This assembly applies MATLAB optimization
routines to objective functions implemented as .NET objects.
Access the component in a .NET application (OptimizeApp.vb).
Then, use the MWObjectArray class to create a reference
to a .NET object (BananaFunction.vb), and pass
that object to the component.
Note:
For information about these data conversion classes, see the MATLAB
MWArray Class Library Reference, available in the |
Build and run the application.
The component (OptimizeComp) finds a local
minimum of an objective function and returns the minimal location
and value. The component uses the MATLAB optimization function fminsearch.
This example optimizes the Rosenbrock banana function used in the fminsearch documentation.
The class OptimizeComp.OptimizeClass performs
an unconstrained nonlinear optimization on an objective function implemented
as a .NET object. A method of this class, doOptim,
accepts an initial value (NET object) that implements the objective
function, and returns the location and value of a local minimum.
The second method, displayObj, is a debugging
tool that lists the characteristics of a .NET object. These two methods, doOptim and displayObj,
encapsulate MATLAB functions. The MATLAB code for these
two methods resides in doOptim.m and displayObj.m.
You can find this code in .matlabroot\toolbox\dotnetbuilder\Examples\VSversion\NET\OptimizeExample\OptimizeVBApp
If you have not already done so, copy the files for this example as follows:
Copy the following folder that ships with MATLAB to
your work folder: matlabroot\toolbox\dotnetbuilder\Examples\VSversion\NET\OptimizeExample
At the MATLAB command prompt, cd to
the new OptimizeExample subfolder in your work
folder.
If you have not already done so, set the environment variables that are required on a development machine.
Write the MATLAB code that you want to access. This example
uses doOptim.m and displayObj.m,
which already resides in your work folder. The path is . matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\OptimizeExample\OptimizeComp
For reference, the code of doOptim.m is displayed
here:
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 is displayed here:function className = displayObj(h)
h
className = class(h)
whos('h')
methods(h)From the MATLAB apps gallery, open the Library Compiler app.
As you compile the .NET application using the Library Compiler, use the following information:
| Project Name | OptimizeComp |
| Class Name | OptimizeComp.OptimizeClass |
| File to compile | doOptim.mdisplayObj.m |
Write source code for a class (BananaFunction)
that implements an object function to optimize. The sample application
for this example is in .
The program listing for matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\OptimizeExample\OptimizeVBAppBananaFunction.vb displays
the following code:
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 documentation.Customize the application using Visual Studio® .NET
using the OptimizeVBApp folder, which contains
a Visual Studio .NET project file for this example.
The OptimizeVBApp folder contains a Visual Studio .NET
project file for this example. Open the project in Visual Studio .NET
by double-clicking OptimizeVBApp.vbproj in Windows® Explorer.
You can also open it from the desktop by right-clicking OptimizeVBApp.vbproj > Open Outside
MATLAB.
Add a reference to the MWArray component,
which is matlabroot\toolbox\dotnetbuilder\bin\architecture\framework_version\mwarray.dll.
If necessary, add (or fix the location of) a reference
to the OptimizeComp component which you built in
a previous step. (The component, OptimizeComp.dll,
is in the \OptimizeExample\OptimizeComp\x86\V2.0\Debug\distrib subfolder
of your work area.)
When run successfully, the program displays the following output:
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