Use of Function Handle and fmincon in Embedded MATLAB

2 次查看(过去 30 天)
Hi,
I would like to perform the following 2 lines of code in the MATLAB Function found in the Simulink library (user-defined function):
F = @(x) eval('x(1)^2 + x(2) - 5'); [x,fval] = fmincon(F,x0,[],[],Aeq,beq,lb,ub);
However, I received a coder error saying that: 'This kind of expression is not supported'. Is there any way I can get around this problem?
Any help or suggestion is greatly appreciated! Thanks alot!

回答(2 个)

Sean de Wolski
Sean de Wolski 2012-3-1
No need for evil-eval:
F = @(x)x(1)^2 + x(2) - 5;
  2 个评论
rach
rach 2012-3-1
Hi Sean,
The code that I typed above is a simplified version of what I actually have in my code. The actual code is:
F = @(x) eval(costFunction);
[x,fval] = fmincon(F,x0,[],[],Aeq,beq,lb,ub);
where costFunction is a string generated from a rather long and complicated function. Hence, 'eval' is necessary in this case.
The problem I am facing now is that embedded matlab does not seem to be able to handle the function handle. Is there any way to get around this limitation?
Thank you!
Sean de Wolski
Sean de Wolski 2012-3-1
web([docroot '/toolbox/eml/ug/bsvqvgq.html'])
I'm sorry I do not have more time to look at this now.

请先登录,再进行评论。


Kaustubha Govind
Kaustubha Govind 2012-3-2
As Sean pointed out, here is the documentation about support for function handles with code generation - Code Generation for Function Handles.
Btw, support for function handles was supported for code-generation only added fairly recently. So you might be using an older release where they are not supported in an Embedded MATLAB Function block. In that case, I would recommend defining a MATLAB-file with your code in it:
F = @(x) eval('x(1)^2 + x(2) - 5');
[x,fval] = fmincon(F,x0,[],[],Aeq,beq,lb,ub);
And call that function with the coder.extrinsic (previously eml.extrinsic) directive. Since eval and fmincon are not amongst the functions supported for code-generation, you will have to declare them as extrinsic functions anyway.

类别

Help CenterFile Exchange 中查找有关 Startup and Shutdown 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by