How can I use anonymous function / cfit in simulink ?

Hello everyone,
I have created several models stored as anonymous functions or cfit objects (I can change for one another, depending on what is the best in that case) in the main workspace.
I would like to use them in Simulink, namely take as input a signal u, and use my function f on it f(u) = y where y will be the output signal in simulink.
So far, I have tried to call them in Matlab Function Block but it doesn't work. For instance, with coder.extrinsic
function y = fcn(u)
y=0;
coder.extrinsic('evalin')
coder.extrinsic('my_fun_in_WS')
fun = evalin('base','my_fun_in_WS');
y = fun(u);
end
It seems that u has not the right type since I get this error Function output 'y' cannot be an mxArray in this context. Consider preinitializing the output variable with a known type.
However, if I put
y = feval(fun,42);
Then the output is correct (constant, equal to fun(42))
Do you have any solution to workout this issue?
Thank you in advance (and sorry for bad english)
Edward

1 Comment

I find it also works ok using an Interpreted MATLAB Fcn block

Sign in to comment.

Answers (1)

Sean de Wolski
Sean de Wolski on 12 Jan 2017
Edited: Sean de Wolski on 13 Jan 2017
See my answer here:
EDIT In R2016b, anonymous functions are supported for code generation and thus can be used directly inside of the MATLAB function block:
For cfit, sfit objects you will still need to call those inside of a separate MATLAB function labeled as coder.extrinsic in the MATLAB function block.

4 Comments

Thanks for that answer. It was not exactly what I was looking for but maybe I could use something similar for anonymous function.
Unfortunatly, I have to work on Matlab2014a, but it's good to know !
Could you show an example where you use a cfit object in Simulink. I am having trouble calling the cfit object in a separate Matlab function and thus cannot use it in Simulink.

Sign in to comment.

Categories

Asked:

on 10 Jan 2017

Commented:

on 20 Feb 2021

Community Treasure Hunt

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

Start Hunting!