📄 xiugai增广矩阵法作业答案.m
字号:
clear %清除以前的变量
load data066; %载入数据
v(2)=0;v(4)=0; %给误差记录数组附处值
c0=[0.001 0.001 0.001 0.001 0.001 0.001 0.001]'; %给估计参数数组附初值
c1=[0 0 0 0 0 0 0]; % 叠代用的中间变量
p0=10^6*eye(7,7); % 为p0设为单位矩阵
E=5.0e-15; %判断收敛条件
z=y; % 载入数据库data066的数据
count=1; %记录叠代次数
for k=4:250; % 采样时间间隔2
h1=[-z(2*(k-1)),-z(2*(k-2)),-z(2*(k-3)),u(2*(k-2)),u(2*(k-3)),v(2*(k-2)),v(2*(k-3))]'; % 递推增广矩阵算法
x=h1'*p0*h1+1; x1=inv(x); k1=p0*h1*x1;
d1=z(2*k)-h1'*c0; c1=c0+k1*d1;
v(2*(k-1))=z(2*(k-1))-h1'*c0; %干扰信号的递推公式
zmd(count)=h1'*c1; %每次迭代后的模型输出
zz(count)=z(count)-zmd(count); %真值与模型估计的差值
ct=(zz(count)'*zz(count))./501; %表示方差
ctt(:,count)=ct; %每次产生的方差数据储存到ctt
e1=c1-c0; % 前后两次迭带的误差
e2=e1./c0; % 表示误差的方差
e(:,count)=e2; % 将误差的方差储存到e
c0=c1; % 将本次迭代结果作为下次迭代的初值
c(:,count)=c1; %将迭代结果存入c1
p1=p0-k1*k1'*[h1'*p0*h1+1];
p0=p1;
count=count+1; %记录迭代次数
if e2<=E break;
end
end
count=count-1;
c
zz
count
ctt
a1=c(1,count), %a1的值
a2=c(2,count), %a2的值
a3=c(3,count), %a3的值
b1=c(4,count), %b1的值
b2=c(5,count), %b2的值
c1=c(6,count), %c1的值
c2=c(7,count) %c2的值
a1=c(1,:);a2=c(2,:);a3=c(3,:);b1=c(4,:);b2=c(5,:);d1=c(6,:);d2=c(7,:);
wa1=e(1,:);wa2=e(2,:);wa3=e(3,:);wb1=e(4,:);wb2=e(5,:);wd1=e(6,:);wd2=e(7,:);
figure(1);%输出各参数迭代的收敛过程
i=1:count;
plot(i,a1,'r',i,a2,'r:',i,a3,'r*',i,b1,'b',i,b2,'b:',i,d1,'g',i,d2,'g:')
figure(2); %输出误差方差变化
i=1:count;
plot(i,wa1,'r',i,wa2,'r:',i,wa3,'r*',i,wb1,'b',i,wb2,'b:',i,wd1,'g',i,wd2,'g:')
figure(3); %每次模型输出的误差方差
i=1:count;
plot(i,ctt,'r')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -