#include <iostream.h> #include <math.h> #include <fstream.h> ifstream fin("in.txt"); int main() { int n; //数据个数 float x[100],xx; //数据,xx为预测值 int p; //自回归模型的阶数 float k; //设定的k值 float a[100]; //自回归系数 float mse1=0,mse2=0; //方差,差额小于1%程序结束 int i,j; fin>>n; for(i=0;i<n;i++) fin>>x[i]; fin>>p>>k; for(i=0;i<p;i++) fin>>a[i]; while(1) { mse1=0; for(i=p;i<n;i++) { xx=0; for(j=0;j<p;j++) xx+=a[j]*x[i-j-1]; for(j=0;j<p;j++) a[j]+=2*k*(x[i]-xx)*x[i-j-1]; mse1+=(x[i]-xx)*(x[i]-xx); } mse1=sqrt(mse1/(n-p-1)); if(mse2!=0) { if(mse1/mse2>0.99 && mse1/mse2<1.01) break; mse2=mse1; } } for(i=0;i<p;i++) cout<<a[i]<<” “; cout<<endl; cin>>n; } 测试数据: 10 3.21 2.65 4.12 4.3 4.72 4.19 3.85 2.52 3.91 3.36 2 0.5 0.5 0.5 测试数据II: 20 4.2 5.8 6.9 7.62 5.57 3.34 2 1.7 2.02 2.71 3.63 5.18 7.11 8.26 7.96 6.78 5.07 5.04 6.02 7.61 2 0.008 1.2 -0.55 结果应该是: 1.402 0.3 PS:不知道为什么结果总不对~~

评论