rongyihit
2008-06-03, 22:05
函数如下
function [sys,x0,str,ts] =csbsmk(t,x,u,flag,X,Y)
%X为100*5的矩阵
X=[x.',x.'.*(abs(x)),x.'.*((abs(x.')).^2),x.'.*((abs(x.')).^3),x.'.*((abs(x.')).^4)];Y=[1,linspace(0,0,99)].';
C=[1 0 0 0 0];
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes(x,X,Y,C)
case 1,
sys=mdlDerivatives(t,x,u);
case 2,
sys=mdlUpdate(t,x,u,X,Y);
case 3,
sys=mdlOutputs(t,x,u,X,Y,C);
function [sys,x0,str,ts]=mdlInitializeSizes(x,X,Y,C)
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 100;
sizes.NumOutputs = 1;
sizes.NumInputs = 2;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = rand(1,100);
str = [];
ts= [0.001 0];
function sys=mdlUpdate(t,x,u,X,Y)
sys = myupdate(X,Y,u);
function sys=mdlOutputs(t,x,u,X,Y,C)
sys = C(1);
function [C]=myupdate(X,Y,u)
for k=1:1:99
X(k,:)=X(k+1,:);
Y(k,:)=Y(k+1,:);
end
X(100,:)=[u(1),u(1)*abs(u(1)),u(1)*abs(u(1))^2,u(1)*abs(u(1))^3,u(1)*abs(u(1))^4]; %uncontinued input1
Y(100)=u(2);
C = inv(X'*X)*X'*Y;
当我运行仿真时,总是有错误信息说X尺寸是1*500。我用单步执行看了一下,出现在flag=0时,这时X是1*500的矩阵,再往下就是100*5的了。
不知道为什么X在开始时总是1*500的矩阵,我改了两天了,还是没结果,请达人帮告诉一下啊,谢谢了!
ps:我是一名大四的学生,这是我的毕业设计,做不出来就毕不了业了:cry: ,请打好心达人帮助啊!
function [sys,x0,str,ts] =csbsmk(t,x,u,flag,X,Y)
%X为100*5的矩阵
X=[x.',x.'.*(abs(x)),x.'.*((abs(x.')).^2),x.'.*((abs(x.')).^3),x.'.*((abs(x.')).^4)];Y=[1,linspace(0,0,99)].';
C=[1 0 0 0 0];
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes(x,X,Y,C)
case 1,
sys=mdlDerivatives(t,x,u);
case 2,
sys=mdlUpdate(t,x,u,X,Y);
case 3,
sys=mdlOutputs(t,x,u,X,Y,C);
function [sys,x0,str,ts]=mdlInitializeSizes(x,X,Y,C)
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 100;
sizes.NumOutputs = 1;
sizes.NumInputs = 2;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = rand(1,100);
str = [];
ts= [0.001 0];
function sys=mdlUpdate(t,x,u,X,Y)
sys = myupdate(X,Y,u);
function sys=mdlOutputs(t,x,u,X,Y,C)
sys = C(1);
function [C]=myupdate(X,Y,u)
for k=1:1:99
X(k,:)=X(k+1,:);
Y(k,:)=Y(k+1,:);
end
X(100,:)=[u(1),u(1)*abs(u(1)),u(1)*abs(u(1))^2,u(1)*abs(u(1))^3,u(1)*abs(u(1))^4]; %uncontinued input1
Y(100)=u(2);
C = inv(X'*X)*X'*Y;
当我运行仿真时,总是有错误信息说X尺寸是1*500。我用单步执行看了一下,出现在flag=0时,这时X是1*500的矩阵,再往下就是100*5的了。
不知道为什么X在开始时总是1*500的矩阵,我改了两天了,还是没结果,请达人帮告诉一下啊,谢谢了!
ps:我是一名大四的学生,这是我的毕业设计,做不出来就毕不了业了:cry: ,请打好心达人帮助啊!