c7-2.cpp
上传用户:zhdd911129
上传日期:2007-05-11
资源大小:722k
文件大小:1k
源码类别:

matlab例程

开发平台:

Matlab

  1. //C7
  2. //Solve a linear system,using Jacobi Iteration
  3. const int N=4;
  4. #include<iostream.h>
  5. int ReachTOL(double x1[],double x2[],double tol,int n)
  6. {
  7. int i;
  8. double error=0;
  9. for (i=0;i<n;i++)
  10. {
  11. error+=(x1[i]-x2[i])*(x1[i]-x2[i]);
  12. }
  13. if(error<tol) 
  14. return 1;
  15. else
  16. return 0;
  17. }
  18. void JI(double a[][N],double b[],double x0[],double tol,int max,int n)
  19. {
  20. double x1[N];
  21. int k,i,j;
  22. for (i=0;i<n;i++)
  23. {
  24. x1[i]=0;
  25. }
  26. for (k=0;k<max;k++)
  27. {
  28. for (i=0;i<n;i++)
  29. {
  30. for (j=0;j<n;j++)
  31. {
  32.     if(j!=i)
  33. {
  34.     x1[i]+=a[i][j]*x0[j];
  35. }
  36.     x1[i]=((-1)*x1[i]+b[i])/a[i][i];
  37. }
  38. if(ReachTOL(x0,x1,tol,n))
  39. {
  40. for (i=0;i<n;i++)
  41.         cout<<"x"<<i<<" is: "<<x1[i]<<endl;
  42. cout<<endl;
  43. return;
  44. }
  45. for (i=0;i<n;i++)
  46. {
  47.     x0[i]=x1[i];
  48. x1[i]=0;
  49. }
  50. }
  51. cout<<"Exceed the maximium iteration time"<<endl;
  52. for (i=0;i<n;i++)
  53.          cout<<"x"<<i<<" is: "<<x1[i];
  54. }
  55. cout<<endl;
  56. }
  57. void main(void)
  58. {
  59. double a[N][N]={{78,-2,-12,-14},   //为克服C语言中输入浮点数的漏洞,这里采用先输大数后输小数的方式
  60. {-2,86,-4,6},
  61. {-12,-4,72,-8},
  62. {-14,6,-8,74}};
  63. double b[N]={76,8,112,68};
  64. double x0[N]={0,0,0,0};
  65. double tol=1e-2;
  66. int max=100,i,j;
  67. for(i=0;i<N;i++)
  68. {
  69. for(j=0;j<N;j++)
  70. {
  71. a[i][j]/=100;
  72. }
  73. }
  74. for (i=0;i<N;i++)
  75. {
  76. b[i]/=100;
  77. }
  78.     JI(a,b,x0,tol,max,N);
  79. }