最小二乘法MATLAB程序及结果
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最小二乘递推算法的MATLAB仿真
针对辨识模型,有z(k)-+a1*z(k-1)+a2*z(k-2)=b1*u(k-1)+b2*u(k-2)+v(k)模型结构,对其进行最小二乘递推算法的MATLAB仿真,对比真值与估计值。更改a1、a2、b1、b2参数,观察结果。
仿真对象:z(k)-1.5*z(k-1)+0.7*z(k-2)=u(k-1)+0.5*u(k-2)+v(k)
程序如下:
L=15;
y1=1;y2=1;y3=1;y4=0; %四个移位寄存器的初始值
for i=1:L; %移位循环
x1=xor(y3,y4);
x2=y1;
x3=y2;
x4=y3;
y(i)=y4; %取出作为输出信号,即M序列
if y(i)>0.5,u(i)=-0.03; %输入信号
else u(i)=0.03;
end
y1=x1;y2=x2;y3=x3;y4=x4;
end
figure(1);
stem(u),grid on
z(2)=0;z(1)=0;
for k=3:15;
z(k)=1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2); %输出采样信号
end
c0=[0.001 0.001 0.001 0.001]'; %直接给出被识别参数的初始值
p0=10^6*eye(4,4); %直接给出初始状态P0
E=0.000000005;
c=[c0,zeros(4,14)];
e=zeros(4,15);
for k=3:15; %开始求k
h1=[-z(k-1),-z(k-2),u(k-1),u(k-2)]';
x=h1'*p0*h1+1;
x1=inv(x);
k1=p0*h1*x1; %开始求k的值
d1=z(k)-h1'*c0;c1=c0+k1*d1;
e1=c1-c0;
e2=e1./c0; %求参数的相对变化
e(:,k)=e2;
c0=c1;
c(:,k)=c1;
p1=p0-k1*k1'*[h1'*p0*h1+1]; %求出P(k)的值
p0=p1;
if e2<=E break;
end
end
c,e %显示被辨识参数及其误差情况
a1=c(1,:);a2=c(2,:);b1=c(3,:);b2=c(4,:);ea1=e(1,:);ea2=e(2,:);eb1=e(3,:);eb2=e(4,:);
figure(2);
i=1:15;
plot(i,a1,'r',i,a2,':',i,b1,'g',i,b2,':')
title('Parameter Identification with Recursive Least Squares Method')
figure(3);
i=1:15;
plot(i,ea1,'r',i,ea2,'g',i,eb1,'b',i,eb2,'r:')
title('Identification Precision')
程序运行结果:
p0 =
1000000 0 0 0
0 1000000 0 0
0 0 1000000 0
0 0 0 1000000
c =
Columns 1 through 9
0.0010 0 0.0010 -0.4984 -1.2325 -1.4951 -1.4962 -1.4991 -1.4998
0.0001 0 0.0001 0.0001 -0.2358 0.6912 0.6941 0.6990 0.6998
0.0010 0 0.2509 1.2497 1.0665 1.0017 1.0020 1.0002 0.9999
0.0010 0 -0.2489 0.7500 0.5668 0.5020 0.5016 0.5008 0.5002
Columns 10 through 15
-1.4999 -1.5000 -1.5000 -1.5000 -1.4999 -1.4999
0.6999 0.7000 0.7000 0.7000 0.7000 0.7000
0.9998 0.9999 0.9999 0.9999 0.9999 0.9999
0.5002 0.5000 0.5000 0.5000 0.5000 0.5000
e =
1.0e+003 *
Columns 1 through 9
0 0 0 -0.4994 0.0015 0.0002 0.0000 0.0000 0.0000
0 0 0 0 -2.3592 -0.0039 0.0000 0.0000 0.0000
0 0 0.2499 0.0040 -0.0001 -0.0001 0.0000 -0.0000 -0.0000
0 0 -0.2499 -0.0040 -0.0002 -0.0001 -0.0000 -0.0000 -0.0000
Columns 10 through 15
0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000
0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000
-0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000
-0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000
程序运行曲线:
图1.输入信号
图2.a1,a2,b1,b2辨识仿真结果