hi guys when i try to use the follow s-function in a simulink blocket, i obtain this error:
Sizes vector returned by MATLAB S-function 'NARMASYSTEM' in 'NARMA/S-Function' must be a real vector consisting of integer value of length 7
This is the function code:
function [sys,x0,str,ts] = NARMASYSTEM(t,x,u,flag)%M-file S-function for defining a discrete system.
% This S-function implements discrete equations
% Generate a discrete nonlinear system:
a1=0.2;a2=0.1;g1=1;g2=0.2;%=-0.2
b1=0.3;b2=-0.6;switch flag, case 0 [sys,x0,str,ts] = mdlInitializeSizes(a1,a2,g1,g2,b1,b2); % Initialization
case 2 [sys,x0,str,ts] = mdlUpdates(t,x,u,a1,a2,g1,g2,b1,b2); % Update discrete states
case 3 [sys,x0,str,ts] = mdlOutputs(t,x,u,a1,a2,g1,g2,b1,b2); % Calculate outputs
case {1, 4, 9} % Unused flags
sys = []; otherwise error(['unhandled flag = ',num2str(flag)]); % Error handling
end % End of dsfunc.
%==============================================================
% Initialization%==============================================================function [sys,x0,str,ts] = mdlInitializeSizes(a1,a2,g1,g2,b1,b2)% Call simsizes for a sizes structure, fill it in, and convert it
% to a sizes array.
sizes = simsizes;sizes.NumContStates = 0;sizes.NumDiscStates = 2;sizes.NumOutputs = 2;sizes.NumInputs = 2;sizes.DirFeedthrough = 0; % Matrix D is non-empty.
sizes.NumSampleTimes = 0.05;sys = simsizes(sizes); x0 = [0 1]; % Initialize the discrete states.
str = []; % Set str to an empty matrix.
ts = [1 0]; % sample time: [period, offset]
% End of mdlInitializeSizes.
%==============================================================% Update the discrete states
%==============================================================function sys = mdlUpdates(t,x,u,a1,a2,g1,g2,b1,b2)sys(1) =a1*x(1)*cos(x(1))+a2*(x(1)^2)/(1+x(1)^2)+g1*x(2) ;sys(2)=b1*sin(x(1))+b2*(x(1)^3)/(2+x(1)^2)+g2*u(1)+u(2);% End of mdlUpdate.
%==============================================================% Calculate outputs%==============================================================function sys = mdlOutputs(t,x,u,a1,a2,g1,g2,b1,b2)sys(1) =x(1);sys(2)=x(2);% End of mdlOutputs.
Best Answer