Setting a fixed sized matrix size in Simulink at run time

16 views (last 30 days)
In Simulink I would like to create a matrix that is of fixed size during a run (e.g. as opposed to a variabel sized matrix), but to have those dimensions be tuneable from run to run based on a parameter. Is this possible?
For example, I would like to be able to do something along the lines of the following, which would be as embedded matlab within Simulink
function A = myEmbeddedMatlabFcn(n)
% Note: n is a *Parameter" defined in the workspace, and NOT an input!
A = randn(n,n);
where n might be 5 for one simulation run, and 3 for another simulation run, but in both cases it is constant during the respective simulation runs, it is only varies across runs.
In theory if I define "n" in the workspace before Simulink compiles, I don't see why it shouldn't be able to handle this. But it can't....it always chokes and says that "Data 'n' is inferred as a variable size matrix..." even though it should be constant.
(Note: For my specific application, I am aware of, but would like to avoid, a few possible workarounds: a) variable sized matrices and b) pre-allocated buffers that are larger than necessary and then only use/work on a subset of data.)
Thank you

Accepted Answer

Timo Dietz
Timo Dietz on 6 Jan 2021
First, add an input 'n' of type „Parameter“ to the Matlab function block using the Simulink ModelExplorer and un-check the “Tunable” option.
Mask the parent block of the function and add a dialog parameter which is stored to internal variable 'n'.
Now, the variable name you state in the input box of the mask will be taken from workspace and propagated to n for your function.

More Answers (0)

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!