雅可比迭代法.cpp
Upload User: hks123456
Upload Date: 2014-01-27
Package Size: 18k
Code Size: 1k
Category:

Algorithm

Development Platform:

Visual C++

  1. #include<iostream.h>
  2. #include<math.h>
  3. #define EPS 1e-6
  4. #define MAX 100
  5. float *Jacobi(float a[3][4],int n)
  6. {
  7. float *x,*y,epsilon,s;
  8. int   i,j,k=0;
  9. x =new float[(n*sizeof(float))]; //here must be modifed
  10. y =new float[(n*sizeof(float))]; //here must be modifed
  11. for( i=0;i<n;i++ )
  12. x[i]=0;
  13. while(1)
  14. {
  15. epsilon=0;
  16. k++;
  17. for( i=0;i<n;i++ )
  18. {
  19. s=0;
  20. for( j=0;j<n;j++ )
  21. {
  22. if(j==i)
  23. continue;
  24. s+=a[i][j]*x[j];
  25. }
  26. y[i] =(a[i][n]-s)/a[i][i];
  27. epsilon +=fabs(y[i]-x[i]);
  28. }
  29. if(epsilon<EPS)
  30. {
  31. cout<<"迭代次数为:"<<k<<endl;
  32. return y;
  33. }
  34. if( k>=MAX )
  35. {
  36. cout<<"The method is disconvergent";
  37. return y;
  38. }
  39. for( i=0;i<n;i++ )
  40. x[i]=y[i];
  41. }
  42. return y;
  43. }
  44. void main()
  45. {
  46. int i;
  47. 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
  48. float *x;
  49. x=new float[(3*sizeof(float))]; //here must be modifed
  50. x=Jacobi(a,3);
  51. for( i=0;i<3;i++ )
  52. cout<<"x["<<i<<"]="<<x[i]<<endl;
  53. }