1、12. 用辅助变量法递推算法估计如下模型的参数:201250127015 ke.ke.ku.kz.kz.构成辅助变量的方法有以下几种 (本题采用第二种完成) : 取输入 u(k)的滤波输出 bavvt nkunkzkzx ,1,1作为辅助变量矩阵的基行, 延迟输出,取输出的 l 步迟延信号作为辅助变量,即取bat klkzkzx , 作为辅助变量矩阵的基行,辅助变量矩阵为 )1()2()1()2( 11 NnkuNkunlkzNlkz ll baN X这种方法又叫 Tally 法,优点是不必用一个模型来对 u(k)滤波也能解决一致性问题,但此法延迟步数 l 的确定对估计精度有影响。理论上应当用
2、干扰的阶数 Nc。本题采用此法,l 取为 2(在实际估计中,Nc 是事先不知道的)。 取输入 Nb 步延迟信号作为辅助变量,即取 babbt nkunkunkux ,1,1作为辅助变量矩阵的基行本法是法的特例。取延迟输入和延迟输出作为辅助变量,即取 bat nlkulkunlkzlkzx ,1,1作为辅助变量矩阵的基行,辅助变量矩阵为 )1()2()1()2(1 NnlkuNlkunlkzNlkz llll baN X本法的优点是只要残差向量可表示为 且 l Nc,就能保证估计的一致性,开ze Cv环和闭环都行。选择不同的辅助变量会导致参数估计的不同结果。在任何情况下,辅助变量法的估计效果都会
3、比 GLS 估计差。但辅助变量法使用简单,既能对相关残差进行辨识,又有如同最小二乘估计那样简单的算法。iv.c 为辅助变量递推算法的程序。M.txtM 序列,白噪声.txt 为白噪声序列,程序运行后生成的 iv.dat(递推过程)和 result.txt 文件为辨识结果。结果如下所示:a1=-1.498809 a2=0.698895 b1=0.996045 b2=0.493464 源程序:#include “stdlib.h“#include “math.h“#include “stdio.h“#include “brinv.c“#include “brmul.c“void main()dou
4、ble z607,zz6071,w41,ww14,p44,I44,k41,kk41,ss41,pp44,X41,XX14,x1807;double s41,a41,b1,c11,f44,ee11,g44,x211;double u1,v1,d,q;int i,j,N;double u607,e607,v607;FILE *fp1,*fp2,*fp3,*fp;if(fp1=fopen(“m.txt“,“r“)=NULL)printf(“ERROR“);exit(1);if(fp2=fopen(“白噪声.txt“,“r“)=NULL)printf(“ERROR“);exit(1);if(fp3=f
5、open(“IV.txt“,“w“)=NULL)printf(“ERROR“);exit(1);if(fp=fopen(“result.txt“,“w“)=NULL)printf(“ERROR“);exit(1);for(i=0;i0) break;/递推 pbrmul(k,ww,4,1,4,f);for(i=0;i4;i+)for(j=0;j4;j+)ppij=Iij-fij;brmul(pp,p,4,4,4,g);for(i=0;i4;i+)for(j=0;j4;j+)pij=gij;/递推 e/ brmul(ww,s,1,6,1,ee);/ eN+6=zzN+60-ee00;/递推 Xbrmul(XX,s,1,4,1,x2);x1N+6=x200;for(i=0;i4;i+)printf(“%fn“,si0);fprintf(fp,“%lfn“,si0);fclose(fp1);fclose(fp2);fclose(fp3);fclose(fp);