24小时热门版块排行榜    

查看: 5268  |  回复: 0

mln5431

铜虫 (初入文坛)

[求助] 请问simulink中出现这个错误如何解决?求指教。

请问simulink中出现这个错误怎么解决?求指教。

Error in 'CSTR_ISMCO/S-Function' while executing MATLAB S-function 'CSTR_sFun', flag = 1 (derivatives), at time 0.0.

试图访问 u(2);由于 numel(u)=1,索引超出范围。
Component: Simulink | Category: Block error

该模块原程序如下
function [sys,x0,str,ts]=mdlInitializeSizes

sizes = simsizes;

sizes.NumContStates  = 4;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 3;
sizes.NumInputs      = 2;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;   % at least one sample time is needed

sys = simsizes(sizes);
x0  = [0.5 3 0 0];

str = [];

ts  = [0 0];

function sys=mdlDerivatives(t,x,u)
u=u(1);
filter=u(2);
%***********CSTR parameters**************
alfa=1.0;
beta=0.3;
gamma=20;
b=-8.0;
Da=0.072;
alfa1=0.5;
alfa2=0.5;

%system states
x1=x(1);
x2=x(2);
xx1=x(3);
xx2=x(4);
y=x2;


%*************  dynamic equation  **********************
dx1=-alfa*x(1)+Da*(1-x(1))*exp(gamma*x(2)/(gamma+x(2)));
dx2=-alfa*x(2)-b*Da*(1-x(1))*exp(gamma*x(2)/(gamma+x(2)))+beta*u-beta*x(2);
sys(1)= dx1;
sys(2)= dx2;

%**********     observer   **********
xxx1=xx1-alfa2*filter/(-b*Da*exp(gamma*xx2/(gamma+xx2)));
dxx1=-alfa*xx1+Da*(1-xx1)*exp(gamma*xx2/(gamma+xx2))+alfa1*sign(xxx1-xx1);
dxx2=-alfa*xx2-b*Da*(1-xx1)*exp(gamma*xx2/(gamma+xx2))+beta*u-beta*xx2+alfa2*sign(y-xx2);
sys(3)=dxx1;
sys(4)=dxx2;


function sys=mdlOutputs(t,x,u)
y=x(2);
f=sign(y-x(4));
sys(1)=x(3);
sys(2)=x(4);
sys(3)=f;
回复此楼

» 猜你喜欢

All is well!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 mln5431 的主题更新
信息提示
请填处理意见