How do I write a MATLAB file S-function when the output width depends on the input width and input value?
Show older comments
I want to write a MATLAB file S-function that allows dynamic input and output width; besides, the output width depends on the input width and input value. For example, my mdlInitializeSizes routine contains the following code fragment:
sizes.NumOutputs = -1;
sizes.NumInputs = -1;
sizes.DirFeedthrough = 1;
and my mdlOutputs routine looks like the following:
function sys=mdlOutputs(t,x,u)
if (length(u) - 1) > 4 %% Input width larger than 4
if u(1) == 1
y = [1;u(2:5)]; %% Assign first four input elements to output
else
y = [0;u(2:length(u))]; %% Assign all input elements to output
end
else %% Input width less than or equal to 4
y = [0;u(2:length(u))]; %% Assign all input elements to output
end
sys = y;
However, the S-function does not work when the output width is different from the input width. For example, when the input is [1, 2, 3, 4, 5, 6], the output is supposed to be [1, 2, 3, 4, 5]; but I receive the following error message:
Output returned by S-function 'modified_dac' in block 'customer_dec/S-Function'
during flag=3 call must be a real vector of length 6
Accepted Answer
More Answers (0)
Categories
Find more on Nonlinear Operators 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!