logo资料库

最小二乘类的参数辨识matlab程序.docx

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
利用最小二乘类算法辨识系统的参数
利用最小二乘类算法辨识系统的参数 首先设计一个可以利用递推最小二乘方法辨识参数的例子,并且编程将其参 数辨识出来。 设计系统如下: ( Z k  2) 1.8 ( z k  1) 0.9 ( ) 0.75 ( u k   z k  1) 0.5 ( ) u k    ( ) v k 其中 ( ) v k 为白噪声,此时系统满足极点位于单位圆内,系统稳定。 程序如下: %利用最小二乘递推算法进行参数辨识 %Z(k+2)=1.8*Z(k+1)-0.9*Z(k)+0.75*u(k+1)+0.5*u(k)+v(k) %==========产生500点的M序列作为输入============== x=[0 1 0 1 1 0 1 1 1]; n=503; N=500; for i=1:n %寄存器初值 %脉冲数目 temp=xor(x(4),x(9)); M(i)=x(9); for j=9:-1:2 %M序列 x(j)=x(j-1); end x(1)=temp; end %===========产生方差为1 的白噪声======== v=randn(1,N); %==============生成观测数列================= z=zeros(N+2,1); z(1)=-1; z(2)=0; for i=3:N+2 z(i)=1.8*z(i-1)-0.9*z(i-2)+0.75*M(i-1)+0.5*M(i-2)+v(i-2); %估计方差 end %==============递推求解================= P=100*eye(4); Pstore=zeros(4,N+1); Pstore(:,1)=[P(1,1),P(2,2),P(3,3),P(4,4)]; Theta=zeros(4,N+1); %参数估计值 %参数估计初值 Theta(:,1)=[1;1;1;1]; K=[1;1;1;1]; %增益矩阵初值 for i=3:N+2 h=[-z(i-1);-z(i-2);M(i-1);M(i-2)]; K=P*h*inv(h'*P*h+1);
Theta(:,i-1)=Theta(:,i-2)+K*(z(i)-h'*Theta(:,i-2)); P=(eye(4)-K*h')*P; Pstore(:,i-1)=[P(1,1),P(2,2),P(3,3),P(4,4)]; End %==============作图================= i=1:N+1; figure(1) plot(i,Theta(1,:),i,Theta(2,:),i,Theta(3,:),i,Theta(4,:),i,-1.8,i,0.9,i,0.75,i,0.5) grid on; title('参数估计过程'); 辨识结果如下图所示: 由图可知,利用最小二乘递推算法可以辨识系统的参数,但是辨识结果会与 其精确值始终着偏差。 然后在将程序改为渐消记忆最小二乘算法,进行仿真计算,得到如下结果: 修改语句K=P*h*inv(h'*P*h+1)和P=(eye(4)-K*h')*P分别为K=P*h*inv(h'*P*h+0.998) 和P=(eye(4)-K*h')*P/0.998,得到了较为准确的结果。
分享到:
收藏