Advertisement
Georgiy031

Untitled

Nov 5th, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.85 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. typedef long long ll;
  5. typedef unsigned long long ull;
  6. #define all(x) x.begin(), x.end()
  7. #define rall(x) x.rbegin(), x.rend()
  8. //#define endl '\n'
  9. #define boostIO() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  10. ll gcd(ll a, ll b) { return (b == 0 ? a : gcd(b, a % b)); }
  11. typedef long double ld;
  12. typedef vector<vector<ld>> matrix;
  13.  
  14. matrix mul(const matrix& a, const matrix& b) {
  15.     matrix ans(a.size(), vector<ld>(b[0].size()));
  16.     for (int i = 0; i < a.size(); ++i)
  17.         for (int j = 0; j < b[0].size(); ++j)
  18.             for (int k = 0; k < b.size(); ++k)
  19.                 ans[i][j] += a[i][k] * b[k][j];
  20.  
  21.     return ans;
  22. }
  23. void print(string name,const matrix& a) {
  24.     cout << name << " = \n";
  25.     for (auto row : a) {
  26.         for (auto x : row) {
  27.             cout << fixed << setw(15) << x;
  28.         }
  29.         cout << endl;
  30.     }
  31. }
  32.  
  33. const ld EPS = 1e-6;
  34. const ld INF = LONG_MAX;
  35.  
  36. int gauss(matrix& a, vector<ld>& ans) {
  37.     int n = (int)a.size();
  38.     int m = (int)a[0].size() - 1;
  39.  
  40.     vector<int> where(m, -1);
  41.     for (int col = 0, row = 0; col < m && row < n; ++col) {
  42.         int sel = row;
  43.         for (int i = row; i < n; ++i)
  44.             if (abs(a[i][col]) > abs(a[sel][col]))
  45.                 sel = i;
  46.         if (abs(a[sel][col]) < EPS)
  47.             continue;
  48.         for (int i = col; i <= m; ++i)
  49.             swap(a[sel][i], a[row][i]);
  50.         where[col] = row;
  51.  
  52.         for (int i = 0; i < n; ++i)
  53.             if (i != row) {
  54.                 double c = a[i][col] / a[row][col];
  55.                 for (int j = col; j <= m; ++j)
  56.                     a[i][j] -= a[row][j] * c;
  57.             }
  58.         ++row;
  59.     }
  60.     print("a", a);
  61.     ans.assign(m, 0);
  62.  
  63.     for (int i = 0; i < m; ++i)
  64.         if (where[i] != -1)
  65.             ans[i] = a[where[i]][m] / a[where[i]][i];
  66.     for (int i = 0; i < n; ++i) {
  67.         double sum = 0;
  68.         for (int j = 0; j < m; ++j)
  69.             sum += ans[j] * a[i][j];
  70.         if (abs(sum - a[i][m]) > EPS)
  71.             return 0;
  72.     }
  73.  
  74.     for (int i = 0; i < m; ++i)
  75.         if (where[i] == -1)
  76.             return INF;
  77.     return 1;
  78. }
  79.  
  80.  
  81. int main() {
  82.  
  83.     matrix A = {
  84.         {352809.0 / 50000,-233253.0 / 100000.0,0,0,0},
  85.         {65007.0 / 10000.0,-281899.0 / 100000.0,-451277.0 / 100000.0,0,0},
  86.         {0,17213.0 / 2000,75103.0 / 10000,855647.0 / 100000.0,0},
  87.         {0,0,26733.0 / 4000.0,-493469.0 / 50000.0,31539.0 / 6250.0},
  88.         {0,0,0,93833.0 / 12500.0,-417783.0 / 50000.0}
  89.     };
  90.     vector<ld> b = { 2.23609, -8.3874, -2.47353, 7.43828, -0.746177};
  91.     vector<ld> fi(5), l(5), x(5);
  92.     fi[0] = -A[0][1] / A[0][0];
  93.     l[0] = b[0] / A[0][0];
  94.     for (int i = 1; i < 5; ++i) {
  95.         if (i != 4)
  96.             fi[i] = -A[i][i + 1] /
  97.             (A[i][i] + A[i][i - 1] * fi[i - 1]);
  98.  
  99.         l[i] = (b[i] - A[i][i - 1] * l[i - 1]) /
  100.             (A[i][i] + A[i][i - 1] * fi[i - 1]);
  101.     }
  102.     x[4] = l[4];
  103.     for (int i = 3; i >= 0; --i) {
  104.         x[i] = x[i + 1] * fi[i] + l[i];
  105.     }
  106.     cout << endl << "fi: \n";
  107.     for (auto x : fi) {
  108.         cout << x << endl;
  109.     }
  110.     cout << endl << "la: \n";
  111.     for (auto x : l) {
  112.         cout << x << endl;
  113.     }
  114.     cout << endl << "X: \n";
  115.     for (auto xx : x) {
  116.         cout << xx << endl;
  117.     }
  118.     matrix X(5, vector<ld>(1));
  119.     for (int i = 0; i < 5; ++i)
  120.         X[i][0] = x[i];
  121.     print("b", mul(A, X));
  122. }
  123.    
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement