论坛首页· 友情链接申请·申请版主· 广告投放· 道具中心· 设为首页· 收藏本站
发新话题
打印

常用数值算法--雅可比迭代法.cpp

本主题由 Webmaster 于 2008-8-30 00:51 移动

常用数值算法--雅可比迭代法.cpp

复制内容到剪贴板
代码:
#include<iostream.h>
#include<math.h>
#define EPS 1e-6
#define MAX 100
float *Jacobi(float a[3][4],int n)
{
float *x,*y,epsilon,s;
int   i,j,k=0;
x =new float[(n*sizeof(float))]; //here must be modifed
y =new float[(n*sizeof(float))]; //here must be modifed
for( i=0;i<n;i++ )
  x[i]=0;
while(1)
{
  epsilon=0;
  k++;
  for( i=0;i<n;i++ )
  {
   s=0;
   for( j=0;j<n;j++ )
   {
    if(j==i)
     continue;
    s+=a[i][j]*x[j];   
   }  
   y[i] =(a[i][n]-s)/a[i][i];  
   epsilon +=fabs(y[i]-x[i]);
  }
  if(epsilon<EPS)
  {
   cout<<"迭代次数为:"<<k<<endl;
   return y;
  }
  if( k>=MAX )
  {
   cout<<"The method is disconvergent";
   return y;
  }
  for( i=0;i<n;i++ )
   x[i]=y[i];  
}
return y;
}
void main()
{
int i;
float a[3][4]={5.0,2.0,1.0,8.0,2.0,8.0,-3.0,21.0,1.0,-3.0,-6.0,1.0}; //here must be modifed
float *x;
x=new float[(3*sizeof(float))];  //here must be modifed
x=Jacobi(a,3);
for( i=0;i<3;i++ )
  cout<<"x["<<i<<"]="<<x[i]<<endl;
}

TOP

发新话题