系统辨识-最小二乘法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.3 Matlab源程序:

%最小二乘估计

clear

u=[ 1.147 0.201 -0.787 -1.589 -1.052 0.866 1.152 1.573 0.626

0.433 -0.985 0.810 -0.044 0.947 -1.474 -0.719 -0.086 -1.099 1.450

1.151 0.485 1.633 0.043 1.326 1.706 -0.340 0.890 0.144 1.177

-0.390];

n=normrnd(0, sqrt(0.1), 1, 31); %方差为0.1

z=zeros(1,30);

for k=3:31

z(k)=-1.642*z(k-1)-0.715*z(k-2)+0.39*u(k-1)+0.35*u(k-2)+n(k)+1.642*n(k-1)+0.715 *n(k-2);

end

h0=[-z(2) -z(1) u(2) u(1)]';

HLT=[h0,zeros(4,28)];

for k=3:30

h1=[-z(k) -z(k-1) u(k) u(k-1)]';

HLT(:,k-1)=h1;

end

HL=HLT';

y=[z(3);z(4);z(5);z(6);z(7);z(8);z(9);z(10);z(11);z(12);z(13);z(14);z(15);z(16) ;z(17);z(18);z(19);z(20);z(21);z(22);z(23);z(24);z(25);z(26);z(27);z(28);z(29); z(30);z(31)];%求出FAI

c1=HL'*HL;

c2=inv(c1);

c3=HL'*y;

c=c2*c3;

%display('方差=0.1时,最小二乘法估计辨识参数θ如下:');

a1=c(1)

a2=c(2)

b1=c(3)

b2=c(4)

%递推最小二乘法估计

clear

u=[ 1.147 0.201 -0.787 -1.589 -1.052 0.866 1.152 1.573 0.626

0.433 -0.985 0.810 -0.044 0.947 -1.474 -0.719 -0.086 -1.099 1.450

1.151 0.485 1.633 0.043 1.326 1.706 -0.340 0.890 0.144 1.177

-0.390];

z(2)=0;

z(1)=0;

n=normrnd(0, sqrt(0.1), 1, 31); %方差为0.1

for k=3:31

z(k)=-1.642*z(k-1)-0.715*z(k-2)+0.39*u(k-1)+0.35*u(k-2)+n(k)+1.642*n(k-1)+0.715 *n(k-2);

end

c0=[0.001 0.001 0.001 0.001]'; %直接给出被辨识参数的初始值,即一个充分小的实向量

p0=10^6*eye(4,4); %直接给出初始状态P0,即一个充分大的实数单位矩阵

E=0.000000005; %取相对误差E=0.000000005

c=[c0,zeros(4,30)]; %被辨识参数矩阵的初始值及大小

e=zeros(4,30); %相对误差的初始值及大小

for k=3:30; %开始求K

h1=[-z(k-1),-z(k-2),u(k-1),u(k-2)]';

x=h1'*p0*h1+1; x1=inv(x); %开始求K(k)

k1=p0*h1*x1;%求出K的值

d1=z(k)-h1'*c0; c1=c0+k1*d1; %求被辨识参数c

e1=c1-c0; %求参数当前值与上一次的值的差值

e2=e1./c0; %求参数的相对变化

e(:,k)=e2; %把当前相对变化的列向量加入误差矩阵的最后一列

c0=c1; %新获得的参数作为下一次递推的旧参数

c(:,k)=c1; %把辨识参数c 列向量加入辨识参数矩阵的最后一列

p1=p0-k1*k1'*[h1'*p0*h1+1]; %求出 p(k)的值

p0=p1; %给下次用

if e2<=E

break; %如果参数收敛情况满足要求,终止计算

end

end

%display('方差为0. 1递推最小二乘法辨识后的结果是:');

a1=c(1,:);

a2=c(2,:);

b1=c(3,:);

b2=c(4,:);

%display('a1,a2,b1,b2经过递推最小二乘法辨识的结果是:');

for i=3:31;

if(c(1,i)==0)

q1=c(1,i-1);

break;

end

end

for i=3:31;

if(c(2,i)==0)

q2=c(2,i-1);

break;

end

end

for i=3:31;

if(c(3,i)==0)

q3=c(3,i-1);

break;

end

end

for i=3:31;

if(c(4,i)==0)

q4=c(4,i-1);

break;

end

end

a1=q1

a2=q2

b1=q3

b2=q4

%辅助变量递推最小二乘法估计

clear

na=2;

nb=2;

siitt=[1.642 0.715 0.39 0.35]';

siit0=0.001*eye(na+nb,1);

p=10^6*eye(na+nb);

siit(:,1)=siit0;

y(2)=0;y(1)=0;

x(1)=0;x(2)=0;

j=0;

u=[ 1.147 0.201 -0.787 -1.589 -1.052 0.866 1.152 1.573 0.626

0.433 -0.985 0.810 -0.044 0.947 -1.474 -0.719 -0.086 -1.099 1.450

1.151 0.485 1.633 0.043 1.326 1.706 -0.340 0.890 0.144 1.177

-0.390];

n=normrnd(0, sqrt(0.1), 1, 31); %方差为0.1

for k=3:31;

h=[-y(k-1),-y(k-2),u(k-1),u(k-2)]';

y(k)=h'*siitt+n(k)+1.642*n(k-1)+0.715*n(k-2);

hx=[-x(k-1),-x(k-2),u(k-1),u(k-2)]';

kk=p*hx/(h'*p*hx+1);

p=[eye(na+nb)-kk*h']*p;

siit(:,k-1)=siit0+kk*[y(k)-h'*siit0];

x(k)=hx'*siit(:,k-1);

j=j+(y(k)-h'*[1.642 0.715 0.39 0.35]')^2;

e=max(abs((siit(:,k-1)-siit0)./siit0));

ess(:,k-2)=siit(:,k-1)-siitt;

相关文档
最新文档