⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 123.cpp

📁 处理armada(2
💻 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 + -