⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xiugai增广矩阵法作业答案.m

📁 我用MATLAB做的增广矩阵法系统参数辨识
💻 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 + -