- 积分
- 0
- 注册时间
- 2008-10-10
- 仿真币
-
- 最后登录
- 1970-1-1
|
运行S函数时,提示错误“during flag=1 call must be a real vector of length 4.”
程序是 :
function [sys,x0,str,ts]=sregulation_k(t,x,u,flag)
switch flag
case 0
sizes=simsizes;
sizes.NumContStates=4;
sizes.NumDiscStates=0;
sizes.NumOutputs=4;
sizes.NumInputs=2;
sizes.DirFeedthrough=1;
sizes.NumSampleTimes=1;
sys=simsizes(sizes);
x0=[0 0 0 0]';str=[ ];ts=[0 0];
case 1
sys=mdlderiative(t,x,u);
case 3
C=diag([1 1 1 1]);D=[0 0];
sys=C*x+D*u;
case {2 4 9}
sys=[];
otherwise
error(['unvalid flag=',num2str(flag)]);
end;
%================================
function sys=mdlderiative(t,x,u)
if t<=10
speed=10;
elseif t<=20
speed=30;
elseif t<=30
speed=20;
elseif t<=40
speed=25;
else
speed=15;
end
Mw=40;Mb=320;Ks=2*10^5;Kt=2*10^6;Cs=1000;
A11=-Cs/Mb;A12=-A11;A13=-Ks/Mb;A14=-A13;
A21=Cs/Mw;A22=-A21;A23=Ks/Mw;A24=(-Kt-Ks)/Mw;
A=[A11 A12 A13 A14;...
A21 A22 A23 A24;...
1 0 0 0;...
0 1 0 0];
B11=1/Mb;B12=-1/Mw;A25=Kt/Mw;
B1=[B11 B12 0 0]';%U
B2=[0 A25 0 0]';%Xg
B=[B1,B2];
C=[1 0 0 0];
D=[0 0];
%===============================
t1=[0.0:0.005:50]';
w1=wgn(10001,1,20);%wgn
fo=0.1;Go=5.0*10^(-6);
A55=-2*pi*fo;F5=2*pi*sqrt(Go*speed);
a=[A55];b=[F5];c=[1];d=[0];
sys_xg=ss(a,b,c,d);
[xg,t]=lsim(sys_xg,w1,t1);
Qn=var(xg);
Rn=0.03*Qn;
Nn=0;
%===============================
sys_plant=ss(A,B,C,D);
[kest,L,P] = kalman(sys_plant,Qn,Rn,Nn);
sys_kalman=ss(kest.a ,kest.b ,kest.c([2 3 4 5],:),kest.d([2 3 4 5],:));
sys=kest.a*x+kest.b*[u(1) u(2)]'; |
|