Advertisement
MaPV

VP_3_VRASHENIYA

Dec 5th, 2016
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. http://algorithmlib.org/rotation_slay
  2.  
  3.  
  4. #include <iomanip>
  5. #include<iostream>
  6. #include <math.h>
  7. #include <vector>
  8.  
  9. using namespace std;
  10.  
  11. void prnt(vector<vector<double>> &matrix){
  12.     int i, j;
  13.     for (i = 0; i < matrix.size(); i++){
  14.         for (j = 0; j < matrix[i].size(); j++){
  15.             cout << matrix[i][j] << fixed << setprecision(8)<< "  ";
  16.         }
  17.         cout << "\n";
  18.     }
  19.     cout << "\n";
  20. }
  21.  
  22. void TUDA_SUDA(vector<vector<double>>&A, vector<double>&otv){// метод вращения
  23.     int n = A.size();
  24.     int count = 0;
  25.     for (int k = 0; k < n; k++){
  26.         for (int i = k + 1; i < n; i++){
  27.             double cos = A[k][k] / sqrt(A[k][k] * A[k][k] + A[i][k] * A[i][k]);    //sqr(cos) + sqr(sin) = 1;
  28.             double sin = A[i][k] / sqrt(A[k][k] * A[k][k] + A[i][k] * A[i][k]);    //
  29.             for (int j = k; j <= n; j++){
  30.                 double prm = cos*A[k][j] + sin*A[i][j];
  31.                 A[i][j] = -sin*A[k][j] + cos*A[i][j];
  32.                 A[k][j] = prm;
  33.                 prnt(A);
  34.             }
  35.             cout << "Q " << count++ << " A\n";
  36.             prnt(A);
  37.         }
  38.     }
  39.  
  40.     //Обратный ход:
  41.     otv[n - 1] = A[n - 1][n] / A[n - 1][n - 1];
  42.     A[n - 1][n] = otv[n - 1];
  43.     for (int i = n - 2; i >= 0; i--){
  44.         for (int j = i + 1; j < n; j++)
  45.         {
  46.             otv[i] = A[i][n] - otv[j] * A[i][j];
  47.             A[i][n] = otv[i];
  48.         }
  49.         otv[i] /= A[i][i];
  50.     }
  51. }
  52.  
  53.  
  54. int main(){
  55.     setlocale(LC_ALL, "rus");
  56.  
  57.     int n, m;
  58.     cout << "размерность: ";
  59.     cin >> n;
  60.     m = n + 1;
  61.  
  62.     vector<vector<double>> Ab(n, vector<double>(m));
  63.     /*Ab[0] = { -93.6, 23.8, 13.7, 10 };
  64.     Ab[1] = { 11.14, 23.18, 41.3, 15.9 };
  65.     Ab[2] = { 13, 15.3, 19.3, 32.6 };*/
  66.     //0.686098 4.43678 -2.29026
  67.  
  68.     for (int i = 0; i < Ab.size (); i++){
  69.     for (int j = 0; j < Ab[i].size (); j++){
  70.     cin >> Ab[i][j];
  71.     }
  72.     cout<<endl;
  73.     }
  74.  
  75.     cout << "Начальная матрица.\n";
  76.     prnt(Ab);
  77.     system("pause");
  78.  
  79.     vector<double> X(n);
  80.     TUDA_SUDA(Ab, X);
  81.  
  82.     cout << "Результат:\n";
  83.     for (int i = 0; i < n; i++){
  84.         cout << "x" << i + 1 << "=" << X[i] << endl;
  85.     }
  86.  
  87.     system("pause");
  88.  
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement