How can I use Matlab Compiler to make a stand alone script including simFunction Objects
Show older comments
Hi,
I am currently trying to make a standalone version of my Matlab scripts in order to run it on a cluster. Unfortunately I am running into problems, when calling simFunctions (supplied by the SimBiology Toolbox).
In the Matlab terminal everything works just fine, but as soon as I compile it and do a test run through the terminal I get this error:
Warning: Variable 'Model' originally saved as a SimBiology.Model cannot be instantiated as an object and will be read in as a cell.
> In TEST_Script (line 2)
Undefined function or variable 'createSimFunction'.
Error in TEST_Script (line 5)
MATLAB:UndefinedFunction
I read http://ch.mathworks.com/products/compiler/supported/compiler_support.html that simBiology Models and simFunctions can be compiled.
Here is the code
%%Load Model
load Model;
%%Generate SimFunction
mySimFunction = createSimFunction(Model, {'Parameter_1','Parameter_2','Parameter_3','Parameter_4','Parameter_5','Parameter_6'},...
{'Output_1','Output_2','Output_3','Output_4','Output_5'},[], 'UseParallel',false);
%%Generate Input
Input = [1,10,10,5,5,1000];
%%Evaluate SimFunction
stopTime = 100000;
[~,y] = mySimFunction(Input,[],[],stopTime);
Similarly, when I import only the simFunctions and omit generating them in the script I get this error:
> In TEST_Script2 (line 2)
Insufficient number of outputs from right hand side of equal sign to satisfy assignment.
Error in TEST_Script2 (line 9)
When using feval() for createSimFunction
%%Load Model
load Model;
fun = 'createSimFunction';
%%Generate SimFunction
mySimFunction = feval(fun,Model, {'Parameter_1','Parameter_2','Parameter_3','Parameter_4','Parameter_5','Parameter_6'},...
{'Output_1','Output_2','Output_3','Output_4','Output_5'},[], 'UseParallel',false);
%%Generate Input
Input = [1,10,10,5,5,1000];
%%Evaluate SimFunction
stopTime = 100000;
[~,y] = mySimFunction(Input,[],[],stopTime);
myResult = vertcat(y{:});
I get this error:
Undefined function 'createSimFunction' for input arguments of type 'cell'.
I am grateful for any kind of help.
Thanks, Christoph
PS I am using MATLAB2015b, MRCv90
PPS I attached files
Accepted Answer
More Answers (2)
Arthur Goldsipe
on 23 Sep 2015
0 votes
Hi Christoph,
I believe you misread the compiler support page. "Regular" SimBiology models are listed in the "Cannot be compiled" column.
However, a SimFunction can be compiled. It looks like you tried this in TEST_Script2, but something went wrong. We should be able to get that to work, but I think you will need to provide the exact code (ideally including any MAT files loaded by the code). Can you attach those files to your question?
1 Comment
Christoph Stelzer
on 23 Sep 2015
Steven Lord
on 23 Sep 2015
0 votes
My suspicion is that you're running into the "Fixing Callback Problems: Missing Functions" problem described in the MATLAB Compiler documentation. Since the only places references to SimFunction appear are in the MAT-file (see the Tip in that section) or in the FEVAL statement, I think if you called createSimFunction directly (NOT via FEVAL) that would work.
Categories
Find more on Scan Parameter Ranges in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!