vakho

ricxviti lab 4

Dec 7th, 2012
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <fstream>
  4. #include <cmath>
  5.  
  6. using namespace std;
  7.  
  8. const int n(3);
  9.  
  10. double getNorm(const vector<double> &);
  11. void printV(const vector<double> &);
  12.  
  13. int main() {
  14.     vector<double> z(n), q(n);
  15.     vector<vector<double>> A(n, n);
  16.     double norm(0), la_old, la_new(1), eps(0.000001);
  17.     ifstream ifs("data.dat");
  18.     //
  19.     for (int i = 0; i < n; i++)
  20.         for (int j = 0; j < n; j++)
  21.             ifs >> A[i][j];
  22.     for (int i = 0; i < n; i++)
  23.         ifs >> z[i];
  24.     // sawyisi miaxloebis gamotvla
  25.     norm = getNorm(z);
  26.     for (int i = 0; i < n; i++)
  27.         q[i] = z[i] / norm;
  28.     //
  29.     for (int i = 0; i < n; i++) {
  30.         z[i] = 0;
  31.         for (int j = 0; j < n; j++)
  32.             z[i] += A[i][j] * q[j];
  33.     }
  34.     //
  35.     int k(0), k_max(500);
  36.     do {
  37.         k++;
  38.         la_old = la_new;
  39.         norm = getNorm(z);
  40.         for (int i = 0; i < n; i++)
  41.             q[i] = z[i] / norm;
  42.         for (int i = 0; i < n; i++) {
  43.             z[i] = 0;
  44.             for (int j = 0; j < n; j++)
  45.                 z[i] += A[i][j] * q[j];
  46.         }
  47.         la_new = 0;
  48.         for (int i = 0; i < n; i++)
  49.             la_new += z[i] * q[i];
  50.     } while (fabs(la_new - la_old) > eps && k < k_max);
  51.     cout << "k = " << k << endl;
  52.     cout << "modulit udidesi sakutrivi ricxvi = " << la_new << endl;
  53.     printV(q);
  54.     return(0);
  55. }
  56.  
  57. double getNorm(const vector<double> & v) {
  58.     double norm(0);
  59.     for (int i = 0; i < n; i++)
  60.         norm += v[i] * v[i];
  61.     return sqrt(norm);
  62. }
  63.  
  64. void printV(const vector<double> & v) {
  65.     for (int i = 0; i < n; i++)
  66.         cout << v[i] << " ";
  67.     cout << endl;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment