多变量最小二乘辨识
- 码下此文章,只因在各大搜索都难以找到多变量最小二乘参数辨识MATLAB代码
- 然后!希望我的课程作业可以帮助到还在苦苦寻找多变量最小二乘参数辨识MATLAB代码的你
1. 多重最小二乘参数辨识(RLS)
(理论有空更…一定一定一定咯咯咯)
%多重RLS仿真算法源程序
clear ;
clc;
Bushu = 1000;
Q = [1 0; 0 0.81]; A = [0.9 0;0.7 0.5];
randn('seed',1); %选定初始状态
e = sqrt(Q)*randn(2,Bushu); %Q的平方根与一个随机数相乘
%生成二维模型
y(:,1) = e(:,1);
for i = 2:Bushu
y(:,i) = A*y(: , i-1)+e(:,i);
end
%*****************************参数估计部分*************************%
Na = 1; %模型的待估参数Na
N = 2 ; %预估参数的维数N
Num = N * Na;
p0 = 10^5 * eye(Num);
fai(:,1) = [0,0]';
p(:,1:2) = 10^5*eye(2);
sita(1:4,1) = zeros(4,1); %因为矩阵A中有4个未知参数
for k = 1:N
for i = 2:Bushu
fai(:,i) = [y(1,i-1),y(2,i-1)]';
sita((k-1)*Num+1 : k*Num , i) = sita((k-1) * Num+1 : k*Num , i-1) + ...
p(: ,Num * (i-2)+1 : Num* (i-1)) * fai(: , i) / (1 + fai(: , i)' * ...
p(: , Num*(i-2)+1 : Num*(i-1)) * fai(: ,i)) * ...
(y(k , i) - fai(: ,i)' * sita((k-1) * Num+1 : k*Num , i-1));
p(: , Num*(i-1)+1:Num*i) = p(: , Num*(i-2)+1:Num*(i-1)) - ...
p(: , Num*(i-2)+1:Num*(i-1)) * fai(:,i) * ...
fai(: , i)' * p(: ,Num*(i-2)+1:Num*(i-1)) / (1+fai(:,i)' * ...
p(: , Num * (i-2)+1:Num*(i-1)) * fai(: , i));
end
end
%*****************************噪声估计部分*************************%
for k = 1:N
for i = 1:Bushu
emixiu(i) = y(k,i) - fai(: ,i)' *sita((k-1) * Num +1:k*Num, i);
end
taoe(k,1) = emixiu(1)^2;
for i = 2:Bushu
taoe(k,i) = taoe(k,i-1) +1 / i*[emixiu(i)^2-taoe(k,i-1)];
end
end
%*****************************做图部分*************************%
t = 1:Bushu;
subplot(2,2,1);
plot(t,sita(1,t),'r', t,sita(2,t),'g', t,sita(3,t),'g', t,sita(4,t),'w');
axis([0 Bushu -0.5 1.5]);
line([0,Bushu], [0.9,0.9]); line([0,Bushu], [0,0]);
line([0,Bushu], [0.7,0.7]); line([0,Bushu], [0.5,0.5]);
subplot(2,2,2);
plot(t,taoe(1,t),'r', t,taoe(2,t),'g');
line([0,Bushu], [1,1]); line([0,Bushu], [0.81,0.81]);
- 运行结果
参数估计
噪声估计
当Bushu=1000即t=1000时,sita参数的多重RLS估值为,与理想的A相近。
(下次更新多维最小二乘参数辨识 …e了该干饭了)