vakho

რიცხვითის ლაბ. N11

Dec 22nd, 2012
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <cmath>
  5.  
  6. using namespace std;
  7.  
  8. const int n = 3;
  9.  
  10. // ვექტორის(მეორე) ნორმის გამოსათვლელი ფუნქცია:
  11. double getNorm(const vector<double> &vec);
  12.  
  13. // ვექტორის დასაბეჭდი ფუნქცია:
  14. void printVector(const vector<double> &vec);
  15.  
  16. int main()
  17. {
  18.     vector<double> z(n), q(n);
  19.     vector<vector<double>> A(n, n);
  20.  
  21.     double Norm(0), Lambda_Old, Lambda_New(1), Epsilon(0.000001);
  22.  
  23.     ifstream ifs("input.txt");
  24.  
  25.     // მატრიცის შევსება:
  26.     for (int i = 0; i < n; i++)
  27.         for (int j = 0; j < n; j++)
  28.             ifs >> A[i][j];
  29.  
  30.     // z ვექტორის შევსება:
  31.     for (int i = 0; i < n; i++)
  32.         ifs >> z[i];
  33.     ifs.close();
  34.  
  35.     // საწყისი მიახლოების გამოთვლა:
  36.     Norm = getNorm(z);
  37.     for (int i = 0; i < n; i++)
  38.         q[i] = z[i] / Norm;
  39.  
  40.     for (int i = 0; i < n; i++)
  41.     {
  42.         z[i] = 0;
  43.         for (int j = 0; j < n; j++)
  44.             z[i] += A[i][j] * q[j];
  45.     }
  46.  
  47.     int Steps(0), Max_Steps(500);
  48.     do
  49.     {
  50.         Steps++;
  51.         Lambda_Old = Lambda_New;
  52.  
  53.         Norm = getNorm(z);
  54.         for (int i = 0; i < n; i++)
  55.             q[i] = z[i] / Norm;
  56.  
  57.         for (int i = 0; i < n; i++)
  58.         {
  59.             z[i] = 0;
  60.             for (int j = 0; j < n; j++)
  61.                 z[i] += A[i][j] * q[j];
  62.         }
  63.  
  64.         Lambda_New = 0;
  65.         for (int i = 0; i < n; i++)
  66.             Lambda_New += z[i] * q[i];
  67.     }
  68.     while (fabs(Lambda_New - Lambda_Old) > Epsilon && Steps < Max_Steps);
  69.  
  70.     cout << "Steps = " << Steps << endl;
  71.     cout << "Modulit Udidesi Sakutrivi Ricxvi = " << Lambda_New << endl;
  72.     printVector(q);
  73.  
  74.     system("pause");
  75.     return(0);
  76. }
  77.  
  78. // ვექტორის(მეორე) ნორმის გამოსათვლელი ფუნქცია:
  79. double getNorm(const vector<double> &vec)
  80. {
  81.     double Norm(0);
  82.     for (int i = 0; i < n; i++)
  83.         Norm += vec[i] * vec[i];
  84.     return sqrt(Norm);
  85. }
  86.  
  87. // ვექტორის დასაბეჭდი ფუნქცია:
  88. void printVector(const vector<double> &vec)
  89. {
  90.     for (int i = 0; i < n; i++)
  91.         cout << vec[i] << " ";
  92.     cout << endl;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment