在介绍上述算法之前,首先介绍MA模型到底是什么,这个算法到底有什么用??? MA模型: (1)
这是系统建模的另一种方式,传统的对系统建模无非是传递函数和状态空间模型,而 MA模型是时间序列法进行分析的较好的一种建模方式。 然后是Gevers-Wouter算法有什么用?? 在我们建立模型的时候经常会遇到一个问题,我们知道系统满足这个模型,但是怎么把模型 里面的参数给估计出来,而我们能知道的只有整个模型的输出y(t),通过y(t)来对模型的参数 进行估计就是该算法的作用,这就解决了我们在建模中的痛楚。 因为算法的推导过程比较繁琐,我这里就先把算法推导结果摆上,有兴趣的同学可以参考邓自 立的《信息融合滤波理论及其应用》,该算法的递推式如下: (2)
(3)
(4)
其中,代表输出y(t)与误差之间的协方差,代表输出y(t)和y(t-k)的协方差, 代表白噪声的方差,其定义式如下: (5)
(6) (7)
下面讨论一下算法的具体过程,不妨哪一个例子进行举例: 假设系统的实际模型如下:
假设取白噪声的方差为1,通过上述模型我们可以算出y(t)的值,我们现在要做的就是利用得到的y(t) 对模型中的参数进行估计。首先我们由协方差公式得到的对应值,协方差公式如下: (8)
如果你利用模型中标准的参数进行计算,能得到如下值: (9)
上述值是通过定义进行求取的,求取过程如下: (10)
同理可以求取、、的值。 而我们利用y(t)对其值进行求取,当n=1000时,误差在0.1左右,当n取10000时,误差在0.01, 充分证明了该方法的可行性。 我们得到、、、的值之后,就可以利用式(2)来对进行迭代 求取,求取过程如下: (11)
当t=10时,求取过程如下: (12)
这里只求了四个元素的原因是,在参数估计的式(3)、式(4)分别只需要这四个元素就可以了, 其他元素的求取是多余的。按照上述式子迭代100次后就可以估计出参数Di和Q,迭代过程如下:
仿真代码如下,有兴趣的可以验证一下:
clc;
clear;
x12=0;
sum=zeros(8,1);
Rr=zeros(100,100);
for n=1:100
R1 = normrnd(0,1,8,100000);
for t=7:-1:4
rt1(t,:)=R1(t,:)+1.5*R1(t-1,:)+0.75*R1(t-2,:)+0.125*R1(t-3,:);
b1=mean(rt1,2);
for i=1:100000
sum(t,1)=sum(t,1)+(rt1(7,i)-b1(7,1))*(rt1(t,i)-b1(t,1));
end
sum(t,1)=sum(t,1)/99999;
end
% sum(7,1)=3.828125;
% sum(6,1)=2.718750;
% sum(5,1)=0.937500;
% sum(4,1)=0.125000;
for k=min(n-1,3):-1:0
R_sum=0;
for s=k+1:3
if n-s>0
R_sum=R_sum+Rr(n,n-s)*Rr(n-k,n-s)/Rr(n-s,n-s);
end
end
Rr(n,n-k)=sum(7-k)-R_sum;
end
Q(n)=Rr(n,n);
if n>3
x1(n)=Rr(n,n-1)/Rr(n,n);
x2(n)=Rr(n,n-2)/Rr(n,n);
x3(n)=Rr(n,n-3)/Rr(n,n);
else
x1(n)=0;
x2(n)=0;
x3(n)=0;
end
end
m=1:100;
plot(m,Q,m,x1,m,x2,m,x3);
【转载】原文地址:https://blog.csdn.net/hxlove123456/article/details/80937054
|
|