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

matlab例程

开发平台:

Matlab

  1. //C11.cpp
  2. //Find the greatest eigenvaue,using Power Methom
  3. #include <iostream.h>
  4. #include <math.h>
  5. #include <time.h>
  6. const int N=3;
  7. double maxval(double x[],int n)
  8. {
  9. double max;
  10.     int i;
  11. max=fabs(x[0]);
  12. for(i=1;i<n;i++)
  13. {
  14. if(fabs(x[i])>max)
  15. max=fabs(x[i]);
  16. }
  17. return max;
  18. }
  19. void PowerMethom(double a[][N],double z0[],double tol,int maxtimes,int n)
  20. {
  21. int i,j,k;
  22. double max,maxlast;
  23. double y[N],z[N];
  24. for (i=0;i<n;i++)
  25. {
  26. z[i]=z0[i];
  27. }
  28. for(k=1;k<=maxtimes;k++)
  29. {
  30. for (i=0;i<n;i++)
  31. {
  32.     y[i]=0;
  33. }
  34. //Matrix Mutiply
  35. for (i=0;i<n;i++)
  36. {
  37. for (j=0;j<n;j++)
  38. {
  39. y[i]+=a[i][j]*z[j];
  40. }
  41. }
  42. if (k>1)
  43. {
  44. maxlast=max;
  45. }
  46. max=maxval(y,n);
  47. if (k>1 && fabs(maxlast-max)<tol)
  48. {
  49. cout<<"Success,iterate "<<k<<" times"<<endl;
  50. cout<<"Eigenvaule: "<<max<<endl;
  51. cout<<"The eigenvextor is: (";
  52. for (i=0;i<n;i++)
  53. {
  54. cout<<z[i];
  55. if (i<n-1)
  56. cout<<",";
  57. else
  58. cout<<")"<<endl;
  59. }
  60. return;
  61. }
  62. for (i=0;i<n;i++)
  63. {
  64.     z[i]=y[i]/max;
  65. }
  66. }
  67. void main()
  68. {
  69. double a[][N]={2,4,6,3,9,15,4,16,36};
  70. double z[N]={1,1,1};
  71. double tol=1e-5;
  72. int maxtimes=100;
  73. clock_t start, finish;
  74.     start = clock();  // Gets system time 
  75. PowerMethom(a,z,tol,maxtimes,N);
  76. finish = clock(); // Gets system time again 
  77. cout<<"The methom takes time: "<<(double)(finish - start) / CLOCKS_PER_SEC<<endl;
  78. cin>>tol;
  79. }
  80. //迭代7次,精度<1e-5, 特征值:43.88,特征向量:(0.185868,0.446232,1) ,耗时0.01秒
  81. //算法基本让人满意,但耗时偏多