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

matlab例程

开发平台:

Matlab

  1. //C8.cpp
  2. //Solve a linear system,using G-S Iteration
  3. const int N=3;
  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 GSI(double a[][N],double b[],double x0[],double tol,int max,int n)
  19. {
  20. double x1[N],x00[N];
  21. int k,i,j;
  22. for (i=0;i<n;i++)                     //Initialazation
  23. {
  24. x1[i]=0;
  25. x00[i]=x0[i];
  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]*x00[j];
  36. }
  37.     x1[i]=((-1)*x1[i]+b[i])/a[i][i];
  38. if(i<n-1)
  39. x00[i]=x1[i];
  40. }
  41. if(ReachTOL(x00,x1,tol,n))
  42. {
  43. for (i=0;i<n;i++)
  44.         cout<<"x"<<i<<" is: "<<x1[i]<<endl;
  45. cout<<x1[0]*(-1)+6*x1[1]-1*x1[2];
  46. cout<<endl;
  47. cout<<"Has iterated "<<k<<" times."<<endl;
  48. return;
  49. }
  50. x00[n-1]=x1[n-1];
  51. for (i=0;i<n;i++)
  52. {
  53.     x1[i]=0;
  54. }
  55. }
  56. cout<<"Exceed the maximium iteration time"<<endl;
  57. for (i=0;i<n;i++)
  58.          cout<<"x"<<i<<" is: "<<x1[i]<<endl;
  59. }
  60. cout<<endl;
  61. }
  62. void main(void)
  63. {
  64. double a[N][N]={6,-1,-1,
  65. -1,6,-1,
  66. -1,-1,6};
  67. double b[N]={11.33,32,42};      
  68. double x0[N]={0,0,0};
  69. double tol=1e-6;
  70. int max=100,i,j;
  71. for(i=0;i<N;i++)
  72. {
  73. for(j=0;j<N;j++)
  74. {
  75. a[i][j]/=100;  //why divide 100?
  76. }
  77. }
  78. for (i=0;i<N;i++)
  79. {
  80. b[i]/=100;
  81. }
  82.     GSI(a,b,x0,tol,max,N);
  83. cin>>i;
  84. }
  85. //Result:reach the precision of 1e-4,with iteration of 5 times
  86. //x0 is: 4.66597;x1 is: 7.61888;x2 is: 9.04747
  87. //从后面的比较可以看出GS的确比Jacobi占优