Advertisement
tojooko

qwe

May 19th, 2013
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. /*
  2. najwiekszy moduł:
  3. wyjście: lamba, x, N
  4. zbieżność ?
  5. N = f (eps)
  6. czy zbieżność zależy od y0
  7.  
  8. Kryłow: - rozmiar n
  9. y0,..,yn -> ukl. rownan -> p1,...,pn -> r char -> lamba -> X
  10.  
  11. najlepiej Gauss/Kramer
  12. A = [2 -2 3; 1 1 1; 1 3 -1];
  13. B - [3 -4 3; -4 6 3; 3 3 1];
  14. C = [3 30 -48; 3 14 -24; 3 15 -25];
  15. ROZWIAZANIE ANALITYCZNE BY WOLFRAM!
  16.  
  17. */
  18.  
  19. #include <iostream>
  20. #include <cmath>
  21. #include <vector>
  22.  
  23.  
  24. using namespace std;
  25.  
  26. int main()
  27. {
  28. const int n = 3; // Rzad macierzy
  29. float A[n][n]={{1,1,1},{1,2,3},{1,3,6}};
  30. vector<float*> Y;
  31. vector<float> lambda;
  32. float *y0 = new float[n];
  33.  
  34. y0[0] = 1;
  35. for(int i=1;i<n;i++)
  36. y0[i] = 0;
  37. Y.push_back(y0);
  38. lambda.push_back(INT_MAX);
  39.  
  40. while(1)
  41. {
  42. float* yp = Y[Y.size()-1]; //wektor y poprzedni
  43. float* y = new float[n]; //nowy wektor y
  44. float eps = 0.001;
  45. for(int i=0;i<n;i++)
  46. y[i] = 0;
  47.  
  48. //cout<<"y"<<Y.size()<<": [";
  49. for(int i=0;i<n;i++)
  50. {
  51. for(int j=0;j<n;j++)
  52. y[i] += A[i][j]*yp[j];
  53. // cout<<y[i]<<' ';
  54. }
  55. //cout<<"]\n";
  56. Y.push_back(y);
  57. float l = 0;
  58. for(int i=0;i<n;i++)
  59. if(yp[i] == 0)
  60. {
  61. l = INT_MAX;
  62. break;
  63. }
  64. else
  65. l+=y[i]/yp[i]/n;
  66.  
  67. lambda.push_back(l);
  68. if(l != INT_MAX)
  69. if(abs( lambda[lambda.size() - 2] - l) < eps)
  70. break;
  71. }
  72. float l = lambda[lambda.size() - 1];
  73. float* y = Y[Y.size() - 1];
  74. float max = y[0];
  75. for(int i=1;i<n;i++)
  76. max = (max > y[i] ? max : y[i]);
  77. cout<<"Iteracji: "<<lambda.size()-1<<" Lambda: "<<l<<"\nx=["; // -1 iteracji, poniewaz w tabeli jest y0
  78. for(int i=0;i<n;i++)
  79. cout<<y[i]/max<<' ';
  80. cout<<"]\n";
  81.  
  82. for(int i=0;i<Y.size();i++)
  83. delete[] Y[i];
  84.  
  85. system("pause");
  86. return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement