《最小二乘法MATLAB程序及结果(共8页).doc》由会员分享,可在线阅读,更多相关《最小二乘法MATLAB程序及结果(共8页).doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上最小二乘递推算法的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)=
2、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;endfigure(1);stem(u),grid onz(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); %输出采样信号endc0=0.001 0.001 0.001 0.001; %直接给出被识别参数的初始值p0=106*eye(4,4); %直接给出初始状态P0E=0.; c=c0,zeros(4,14); e=ze
3、ros(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 e20.5,u(i)=-0.03; else u(i)=0.03; end y1=x1;y2=x2;y3=x3;y4=x4
4、;endfigure(1);stem(u),grid onz(2)=0;z(1)=0;for k=3:15; z(k)=z(k-1)-1.5*z(k-2)+u(k-1)+1.5*u(k-2);endc0=0.001 .0001 0.001 0.001;p0=106*eye(4,4)E=0.;c=c0,zeros(4,14);e=zeros(4,15);for k=3:15; 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; d1=z(k)-h1*c0;c1=c0+k1*d1; e1=c1-c0; e2
5、=e1./c0; e(:,k)=e2; c0=c1; c(:,k)=c1; p1=p0-k1*k1*h1*p0*h1+1; p0=p1; if e2=E break; endendc,ea1=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
6、(3);i=1:15;plot(i,ea1,r,i,ea2,g,i,eb1,b,i,eb2,r:)title(Identification Precision)程序运行结果:p0 = 0 0 0 0 0 0 0 0 0 0 0 0 c = Columns 1 through 9 0.0010 0 0.0010 0.4447 -1.2248 -0.9996 -0.9999 -1.0001 -1.0001 0.0001 0 0.0001 0.0001 0.3757 1.4987 1.4997 1.5000 1.5000 0.0010 0 -0.2489 0.6385 1.0560 1.0000 1
7、.0001 0.9999 0.9999 0.0010 0 0.2509 1.1382 1.5557 1.4997 1.4995 1.4995 1.4996 Columns 10 through 15 -1.0001 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 1.5000 1.5000 1.5000 1.5000 1.5000 1.5000 0.9999 0.9999 0.9999 0.9999 0.9999 0.9999 1.4996 1.4996 1.4999 1.4999 1.4999 1.4999e = 1.0e+003 * Columns 1 th
8、rough 9 0 0 0 0.4437 -0.0038 -0.0002 0.0000 0.0000 -0.0000 0 0 0 0 3.7564 0.0030 0.0000 0.0000 -0.0000 0 0 -0.2499 -0.0036 0.0007 -0.0001 0.0000 -0.0000 0.0000 0 0 0.2499 0.0035 0.0004 -0.0000 -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.
9、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程序运行曲线:图4. 输入信号图5. a1,a2,b1,b2辨识仿真结果图6. a1,a2,b1,b2各次辨识结果的收敛情况结果总结及问题分析: 辨识结果与程序运行曲线表明,大约递推到五步时,参数辨识的结果基本达到稳定状态。在参数更改前后运行结果可以看出,输出观测值在没有任何噪声成分下,估计值与真值最大相对误差达到3位数。在编写程序时,发现很多语句都不怎么明白,对程序原理也不是完全了解。在通过对程序的逐句编译后,逐渐了解了每一步的原理与作用,不仅理解了最小二乘递推算法的原理,也学习程序的编写及更多MATLAB语句,比如eye(),zeros(),inv()等函数的应用。专心-专注-专业