Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <fstream>
- #include <cmath>
- using namespace std;
- const int n(3);
- double getNorm(const vector<double> &);
- void printV(const vector<double> &);
- int main() {
- vector<double> z(n), q(n);
- vector<vector<double>> A(n, n);
- double norm(0), la_old, la_new(1), eps(0.000001);
- ifstream ifs("data.dat");
- //
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- ifs >> A[i][j];
- for (int i = 0; i < n; i++)
- ifs >> z[i];
- // sawyisi miaxloebis gamotvla
- norm = getNorm(z);
- for (int i = 0; i < n; i++)
- q[i] = z[i] / norm;
- //
- for (int i = 0; i < n; i++) {
- z[i] = 0;
- for (int j = 0; j < n; j++)
- z[i] += A[i][j] * q[j];
- }
- //
- int k(0), k_max(500);
- do {
- k++;
- la_old = la_new;
- norm = getNorm(z);
- for (int i = 0; i < n; i++)
- q[i] = z[i] / norm;
- for (int i = 0; i < n; i++) {
- z[i] = 0;
- for (int j = 0; j < n; j++)
- z[i] += A[i][j] * q[j];
- }
- la_new = 0;
- for (int i = 0; i < n; i++)
- la_new += z[i] * q[i];
- } while (fabs(la_new - la_old) > eps && k < k_max);
- cout << "k = " << k << endl;
- cout << "modulit udidesi sakutrivi ricxvi = " << la_new << endl;
- printV(q);
- return(0);
- }
- double getNorm(const vector<double> & v) {
- double norm(0);
- for (int i = 0; i < n; i++)
- norm += v[i] * v[i];
- return sqrt(norm);
- }
- void printV(const vector<double> & v) {
- for (int i = 0; i < n; i++)
- cout << v[i] << " ";
- cout << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment