A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在介绍上述算法之前,首先介绍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




您需要登录后才可以回帖 登录 | 加入黑马