matlab中如何把白噪声数据加入至微分方程求解
kirra 2011-05-15 01:13:14 我要用ode45求一个方程
function backstep1
[t,X]=ode45(@ff,0:0.1:50,[-10 -10 0 0 0 0 -10 -10 0 0 0 0]);
plot(t,X(:,1),'r',t,X(:,7),'b');
figure
plot(X(:,1),X(:,2));
function xdot=ff(t,X)
x1=X(1);x2=X(2);x3=X(3);x4=X(4);x5=X(5);x6=X(6);
t
x1j=X(7);x2j=X(8);x3j=X(9);x4j=X(10);x5j=X(11);x6j=X(12);
Y=[x1;x2;x3];V=[x4;x5;x6];
Yj=[x1j;x2j;x3j];Vj=[x4j;x5j;x6j];
Yw=Y-Yj;Vw=V-Vj;
x1d=0;dotx1d=0;%diff(x1d)
ddotx1d=0; %diff(x1d,2)
x2d=0;dotx2d=0;%diff(x2d)
ddotx2d=0; %diff(x2d,2);
x3d=0;dotx3d=0;%diff(x3d);
ddotx3d=0; %diff(x3d,2);
Yd=[x1d;x2d;x3d];dotYd=[dotx1d;dotx2d;dotx3d];
ddotYd=[ddotx1d;ddotx2d;ddotx3d];
M=[1.0852 0 0;0 2.0575 -0.4087;0 -0.4087 0.2153];
D=[0.0865 0 0;0 0.0762 0.1510;0 0.0151 0.0031];
K=[0.0389 0 0;0 0.0266 0;0 0 0];
P1=[3 0 0;0 3 0;0 0 1];
Q1=[1 0 0;0 1 0;0 0 1];
Q2=[1 0 0;0 1 0;0 0 1];
C1=0.1*eye(3);C2=0.1*eye(3);
d1=10;d2=10;d3=1;d4=1;d5=1;d6=1;
%求A1,A2,B
A1=-inv(M)*K;
A2=-inv(M)*D;
B=inv(M);
%求P2
P2=lyap(A2',A2,-2*Q2);
%求K1,K2
K1=inv(P1)*Q1;
J=[cos(x3) -sin(x3) 0;sin(x3) cos(x3) 0;0 0 1];
K2=inv(P2)*J'*P1-A1;
%T,S
T=[0 0 -x5j;0 0 x4j;0 0 0];
S=[0 -x6j 0;x6j 0 0;0 0 0];
%ki参数定义
k1=K1(1,:);k2=K1(2,:);k3=K1(3,:);
%求D1
D1=zeros(3);
D1(1,1)=d1*k1*k1';
D1(2,2)=d2*k2*k2';
D1(3,3)=d3*k3*k3';
%alfa参数
alfa1=(C1+D1)*K1+J*K2;
alfa2=J*T;
%求wij参数
w1=alfa1(1,:);w2=alfa1(2,:);w3=alfa1(3,:);
w4=alfa2(1,:);w5=alfa2(2,:);
%求D2
D2=zeros(3);
D2(1,1)=d1*(w1*w1'+w4*w4');
D2(2,2)=d5*(w2*w2'+w5*w5');
D2(3,3)=d6*w3*w3';
%求z1,z2,alfa11
z1=Yj-Yd;
alfa11=-C1*z1-D1*z1+dotYd;
z2=J*Vj-alfa11;
%求fai,tao
fai=-(C1+D1)^2*z1+(C1+D1)*z2-ddotYd+J*A1*Yj+J*(A2+S)*Vj;
tao=-inv(B)*J'*(fai+C2*z2+D2*z2+z1);
%状态方程
dotY=J*V;
dotV=A1*Y+A2*V+B*tao;
dotYj=J*Vj+K1*Yw;
dotVj=A1*Yj+A2*Vj+B*tao+k2*Yw;
xdot=[dotY;dotV;dotYj;dotVj];
其中:Y=[x1;x2;x3];是测量值,存在测量误差,因此x1,x2,x3均存在高斯白噪声,我想请教下在matlab中如何将噪声加进我的x1,x2,x3中啊?我直接这样加Y1=Y+randn(3,1);然后运算速度极其慢,貌似还算不出来,请问有什么别的办法可以解决吗?图是参考文献的测量值与估计值,而我的测量值由于没有加高斯白噪声和估计值几乎相等。误差为零