Hi all, I have 416 seperate M-file functions located in a local folder under the current folder, e.g. Functions\fnc_1.m Functions\fnc_2.m .... Functions\fnc_416.m I need to call all of these functions in a loop in a Matlab function block in Simulink, e.g. for i=1:416 out = fnc_i(some_arguments); end I tried using coder.extrinsic but it can only work if the function is located in the current folder and its name is explicity defined like coder.extrinsic('Functions\fnc_52'); out = fnc_52(some_arguments); for i=1:416 filename = strcat(char(39),'Functions\fnc_',num2str(i),char(39)); eval(strcat('coder.extrinsic(',filename,');')); out = eval(strcat('fnc_',num2str(i),'(some_arguments);')); end But, It throws the errror --> Function 'strcat' not supported for code generation. I seem to be stuck now. Do you know any way (preferably much easier) of calling functions located in local folders from Simulink?? Thank you Solution Edit I realized that we can call directly any function from inside a Matlab Function Bock in Simulink as long as the function is in the current folder (or your function directory is added to your current directory). This at least works in R2020a. To call functions in a loop like I tried to do, you can follow the solution below. function y = MatlabFunctionBlock(x) % We need these two functions, so add them as extrinsic functions coder.extrinsic('strcat'); coder.extrinsic('eval'); y = zeros(416,1); for i = 1:416 f = eval(strcat('@(x) fnc_',num2str(i),'(x)')); y(i) = f(x); end end This script can call all the 416 functions one by one by their name. Hope that helps. Solution Edit (for R2021a and higher) Turns out that the above method is no longer working for the 2021a release (2021a does not support eval code generation). A more efficient (faster) and elegent solution is the following function y = MatlabFunctionBlock(x) y = zeros(416,1); for i = 1:416 f = sprintf('fnc_%d',i); y(i) = feval(f,X);; end end
John Michell answered .
2025-11-20
persistent fcn
if isempty(fcn)
fcn = populate_fcn();
end