我是靠谱客的博主 时尚芹菜,这篇文章主要介绍matlab仿真中的Pluse什么,请问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;

最后

以上就是时尚芹菜最近收集整理的关于matlab仿真中的Pluse什么,请问simulink中出现这个错误如何解决?求指教。的全部内容,更多相关matlab仿真中内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(144)

评论列表共有 0 条评论

立即
投稿
返回
顶部