📄 123.cpp
字号:
#include <iostream>
#include <fstream>
#include <cmath> //可能有用
using namespace std;
void main() //to deal with arma(2,3)
{ double phi[3],theta[4],psi[4]={0},r[3][4]={0},gamma[6]={0},K[11][11]={0},x0[10]={0},x1[11]={0};
double v[10]={0},alpha[11][11]={0},p1,p0;
int i,j,k,n,min,max,sum;
cout<<"please enter in ten data fo the observation"<<"\n";//有些乱;看来需要重新检查我的思路;
//我现在头晕脑胀, 不知所措。
for(i=0;i<10;i++)
cin>>x0[i]; //to hide the code remember to recover it******************
cout<<"please enter in three parameters of function phi"<<"\n";
for(i=0;i<3;i++)
cin>>phi[i];
cout<<"please enter in three parameters of function theta"<<"\n";
for(i=0;i<4;i++)
cin>>theta[i];
/*for(i=0;i<4;i++)
cout<<psi[i]; */ // to check the input
psi[0]=theta[0];
for(j=1;j<3;j++)
{ for(k=1;k<=j;k++)
{psi[j]+=phi[k]*psi[j-k];}
psi[j]+=theta[j];
} for(i=1;i<3;i++) //psi计算错误 ,psi3不可计算
psi[3]+=phi[i]*psi[3-i];
psi[3]+=theta[3];
for(i=0;i<4;i++)
cout<<psi[i]<<" ";
cout<<"\n"; //no problem to generate four因果参数s
r[0][0]=1;r[0][1]=-phi[1];r[0][2]=-phi[2];
r[1][0]=-phi[1];r[1][1]=1-phi[2];
r[2][0]=-phi[2];r[2][1]=-phi[1];r[2][2]=1;
/*for(k=0;k<3;k++)*/
for(i=0;i<3;i++)
{ for(j=i;j<4;j++)
r[i][3]+=theta[j]*psi[j-i];//to generate the matrix to caculate the covariance[k],k=1,2,3
}
for(i=0;i<3;i++)
{ for(j=0;j<4;j++)
cout<<r[i][j]<<" ";
cout<<endl<<"\n";;
} // to check the matrix dealing with variance
if(r[0][0]==0)
{if(r[1][0]!=0)
for(k=0;k<4;k++)
/*{r[0][k]-=r[1][k];r[1][k]+=r[0][k];r[0][k]=r[1][k]-r[0][k];}*/ // to replace the code in a simple way
{p0=r[0][k];r[0][k]=r[1][k];r[1][k]=p0;}
else if(r[2][0]!=0)// sth wrong
for(k=0;k<4;k++)
/*{r[0][k]-=r[2][k];r[2][k]+=r[0][k];r[0][k]=r[2][k]-r[0][k];}*/ //to wrant it that r[1][1],r[2][2]are both positive
{p0=r[0][k];r[0][k]=r[2][k];r[2][k]=p0;} //to replace the code in a simple way
else return ;
}
else
{ p1=r[1][0]/r[0][0];p0=r[2][0]/r[0][0];
for(k=0;k<4;k++)
{r[1][k]-=r[0][k]*p1;r[2][k]-=r[0][k]*p0;}
/*{p0=r[1][k];r[1][k]=r[2][k];r[2][k]=p0;} */
if(r[1][1]!=0)
{ p1=r[2][1]/r[1][1];
for(k=1;k<4;k++)
{r[2][k]-=r[1][k]*p1;}
} //here sth wrong
else
{for(k=1;k<4;k++)
/*{r[1][k]-=r[2][k];r[2][k]+=r[1][k];r[1][k]=r[2][k]-r[1][k];}*/
{ p0=r[1][k];r[1][k]=r[2][k];r[2][k]=p0;}
p1=r[2][1]/r[1][1];
for(k=1;k<4;k++)
{r[2][k]-=r[1][k]*p1;}
}
} //to caculate variance by the Gauss simple迭代method
for(i=0;i<3;i++)
{ for(j=0;j<4;j++)
cout<<r[i][j]<<" "; //应该说 函数鼓捣错误 在
cout<<"\n";
}
cout<<endl; //to check the matrix 输出有错误 应该在r[k][3]阶段出现了错误思想
if(r[2][2]==0) //总的说 gauss迭代法是可以应用的。
return ;
else //由此开始计算x的协方差函数
{ gamma[2]=r[2][3]/r[2][2];
for(i=1;i<3;i++)
{for(j=1;j<=i;j++)
gamma[2-i]-=r[2-i][3-j]*gamma[3-j];
gamma[2-i]+=r[2-i][3];
gamma[2-i]=gamma[2-i]/r[2-i][2-i];
}
for(i=1;i<3;i++)
gamma[3]+=phi[i]*gamma[3-i];
gamma[3]+=theta[3]*psi[0];
for(k=4;k<6;k++)
for(j=1;j<3;j++)
gamma[k]+=gamma[k-j]*phi[j];
}
for(i=0;i<6;i++)
cout<<gamma[i]<<" ";
cout<<endl; // 演算表明基本正确
for(i=0;i<11;i++)
for(j=0;j<=i;j++) //为满足书本要求故修改j《11为j《i*******
{ if(i>=j) {min=j;max=i;k=i-j;}
else {min=i;max=i;k=j-i;}
if(k>3)
K[i][j]=0;
else
{ if(max<3)
K[i][j]=gamma[k];
if(min<3&&max>2&&max<6)
{for(n=1;n<3;n++)
K[i][j]-=phi[n]*gamma[abs(n-k)];
K[i][j]+=gamma[k];
}
if(min>2)
for(n=0;n<4-k;n++)
K[i][j]+=theta[n]*theta[n+k];
}
}
/*for(i=0;i<11;i++)
{ for(j=0;j<11;j++)
{ if(i>=j) {min=j;max=i;k=i-j;}
else {min=i;max=j;k=j-i;} //由以前计算可知 可能是分类不完善而导致表格计算错误&&&&
if(max<3)
K[i][j]=gamma[k];
if(min<3&&max<6)
{ for(n=1;n<2;n++)
{ if(n>=k)
K[i][j]-=phi[n]*gamma[n-k];
else K[i][j]-=phi[n]*gamma[k-n];
}
K[i][j]+=gamma[k];
}
if(min>2&&k<=3)
{ for(n=0;n<=3-k;n++)
K[i][j]+=theta[n]*theta[n+k];
}
else K[i][j]=0; //to generate the 转化后的变量的covariance
}
} */
cout<<"\n";
for(i=0;i<11;i++) //to generate v[n]and the 系数矩阵alpha[10][10]及参数
{ for(j=0;j<11;j++)
cout<<K[i][j]<<" ";
cout<<"\n";
}
cout<<endl;
v[0]=K[0][0];x1[0]=0;
for(i=1;i<11;i++) //alpha[10][10]changed to alpha[11][11]
{ alpha[i-1][i-1]=K[i][0]/v[0];
for(k=1;k<i;k++)
{ for(j=0;j<k;j++) alpha[i-1][i-1-k]-=alpha[k-1][k-1-j]*alpha[i-1][i-1-j]*v[j];
alpha[i-1][i-1-k]+=K[i][k]; alpha[i-1][i-1-k]=alpha[i-1][i-1-k]/v[k];
}
for(j=0;j<i;j++) v[i]-=alpha[i-1][i-1-j]*alpha[i-1][i-1-j]*v[j];
v[i]+=K[i][i];
for(j=1;j<=i;j++)
x1[i]+=alpha[i-1][j-1]*(x0[i-j]-x1[i-j]);//assign failure
}
/*v[0]=K[0][0];alpha[0][0]=K[1][0]/v[0];v[1]=K[1][1]-alpha[0][0]*alpha[0][0]*v[0];
for(n=1;n<10;n++)
{ alpha[n][n]=K[n+1][0]/v[0];
for(k=1;k<=n;k++) //sth changed******************************
{ for(j=0;j<=k;j++) //problem*********************where it is? U-F
alpha[n][n-k]-=alpha[k][k-j]*alpha[n][n-j]*v[j]; //关于alpha矩阵坐标的计算
//
alpha[n][n-k]+=K[n][k]; alpha[n][n-k]=alpha[n][n-k]/v[k]; //可能有毛病;需检验。
} //今天仅检验程序整体的正确性。
for(j=0;j<n;j++) //在k【1】【0】
{ v[n]-=alpha[n][n-j]*alpha[n][n-j]*v[j]; //即theta【2】【1】时开始出现错误
} //
v[n]+=K[n][n]; //to caculate v[n]\\
//
x1[0]=0; //
for(n=1;n<12;n++) //
{ for(j=1;j<=n;j++) //
x1[n]+=alpha[n-1][j-1]*(x0[n-j]-x1[n-j]); //
} //
}*/ //to make forcast of x[k];检查cout格式正确与否。
for(i=0;i<10;i++)
{ for(j=0;j<10;j++)
cout<<alpha[i][j]<<" ";
cout<<endl;
}
cout<<endl;
for(i=0;i<10;i++)
cout<<v[i]<<" ";
cout<<endl;
for(i=0;i<10;i++)
cout<<x0[i]<<" ";
cout<<"\n";
for(i=0;i<11;i++)
cout<<x1[i]<<" ";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -