How can I call (a lot of) user-defined functions in Simulink?

E
Emin_ucer · Oct 21, 2021 · 2.6K views
Question
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  
Expert Answer
Profile picture of John Michell
John Michell PhD Expert
Answered Aug 14, 2026
I would suggest writing a small bit of code that mechanically generates a cell array of function handles, one for each file; create it as a function in a .m and call it from the main MATLAB function block, and then iterate through invoking the function handles. Make the array of handles persistent for efficiency
 
 
persistent fcn
if isempty(fcn)
    fcn = populate_fcn();
end

 

Have a different question? Ask here

Get a Free Consultation or a Sample Assignment Review!