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

matlab例程

开发平台:

Matlab

  1. //C7.cpp
  2. //Solve a linear system,using Jacobi Iteration
  3. const int N=4;
  4. #include<iostream.h>
  5. #include <time.h>
  6. int ReachTOL(double x1[],double x2[],double tol,int n)
  7. {
  8. int i;
  9. double error=0;
  10. for (i=0;i<n;i++)
  11. {
  12. error+=(x1[i]-x2[i])*(x1[i]-x2[i]);
  13. }
  14. if(error<tol) 
  15. return 1;
  16. else
  17. return 0;
  18. }
  19. void JI(double a[][N],double b[],double x0[],double tol,int max,int n)
  20. {
  21. double x1[N];
  22. int k,i,j;
  23. for (i=0;i<n;i++)
  24. {
  25. x1[i]=0;
  26. }
  27. for (k=0;k<max;k++)
  28. {
  29. for (i=0;i<n;i++)
  30. {
  31. for (j=0;j<n;j++)
  32. {
  33.     if(j!=i)
  34. {
  35.     x1[i]+=a[i][j]*x0[j];
  36. }
  37.     x1[i]=((-1)*x1[i]+b[i])/a[i][i];
  38. }
  39. if(ReachTOL(x0,x1,tol,n))
  40. {
  41. cout<<k;
  42. for (i=0;i<n;i++)
  43.         cout<<"x"<<i<<" is: "<<x1[i]<<endl;
  44. cout<<endl;
  45. return;
  46. }
  47. for (i=0;i<n;i++)
  48. {
  49.     x0[i]=x1[i];
  50. x1[i]=0;
  51. }
  52. }
  53. cout<<"Exceed the maximium iteration time"<<endl;
  54. for (i=0;i<n;i++)
  55.          cout<<"x"<<i<<" is: "<<x1[i];
  56. }
  57. cout<<endl;
  58. }
  59. void main(void)
  60. {
  61. double a[N][N]={{78,-2,-12,-14},   //为克服C语言中输入浮点数的漏洞,这里采用先输大数后输小数的方式
  62. {-2,86,-4,6},
  63. {-12,-4,72,-8},
  64. {-14,6,-8,74}};
  65. double b[N]={76,8,112,68};
  66. double x0[N]={0,0,0,0};
  67. double tol=1e-5;
  68. int max=100,i,j;
  69. for(i=0;i<N;i++)
  70. {
  71. for(j=0;j<N;j++)
  72. {
  73. a[i][j]/=100;
  74. }
  75. }
  76. for (i=0;i<N;i++)
  77. {
  78. b[i]/=100;
  79. }
  80. clock_t start, finish;
  81.     start = clock();  // Gets system time 
  82. JI(a,b,x0,tol,max,N);
  83. finish = clock(); // Gets system time again 
  84. cout<<"The methom takes time: "<<(double)(finish - start) / CLOCKS_PER_SEC<<endl;
  85.     cin>>i;
  86. }
  87. //迭代6次,程序运行耗时<0.005s
  88. //x0 is: 1.53454;x1 is: 0.122011;x2 is: 1.97478;x3 is: 1.41256
  89. //就此题而言Jacobi的效果还是让人满意的