Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <vector>
- #include <cmath>
- using namespace std;
- typedef vector <double> vec;
- typedef vector <vec> mat;
- const double v = 10;
- int n;
- mat A;
- vec x, b;
- vec operator * (const mat& A, const vec& x)
- {
- vec b(n + 1);
- for (int i = 0; i <= n; ++i)
- for (int j = 0; j <= n; ++j)
- b[i] += A[i][j] * x[j];
- return b;
- }
- vec Gauss(mat& A, vec& b)
- {
- mat T(n + 1, vec(n + 1));
- for (int k = 0; k < n; ++k)
- for (int i = k + 1; i <= n; ++i)
- {
- T[i][k] = A[i][k] / A[k][k];
- b[i] -= T[i][k] * b[k];
- for (int j = k + 1; j <= n; ++j)
- A[i][j] -= T[i][k] * A[k][j];
- }
- vec x(n + 1);
- x[n] = b[n] / A[n][n];
- for (int k = n - 1; k >= 0; --k)
- {
- double sum = 0;
- for (int j = k + 1; j <= n; ++j)
- sum += A[k][j] * x[j];
- x[k] = (b[k] - sum) / A[k][k];
- }
- return x;
- }
- void print(mat& A)
- {
- cout << "Матрица:\n";
- for (int i = 0; i <= n; ++i, cout << "\n")
- for (int j = 0; j <= n; ++j)
- cout << left << setw(10) << A[i][j];
- }
- void print(vec& a)
- {
- cout << "Вектор: (";
- for (int i = 0; i < n; ++i)
- cout << a[i] << ", ";
- cout << a[n] << ")\n";
- }
- void print(mat& A, vec& b)
- {
- cout << "СЛУ имеет вид:\n";
- for (int i = 0; i <= n; ++i, cout << "\n")
- {
- for (int j = 0; j < n; ++j)
- cout << A[i][j] << " * x_" << (j + 1) << " + ";
- cout << A[i][n] << " * x_" << (n + 1) << " = " << b[i];
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- cout << fixed << setprecision(4);
- n = 10;
- A.resize(n + 1);
- for (int i = 0; i <= n; ++i)
- for (int j = 0; j <= n; ++j)
- {
- A[i].push_back(v + i);
- if (i != j) A[i][j] /= 100.0;
- }
- x.resize(n + 1);
- for (int i = 0; i <= n; ++i)
- x[i] = i;
- vec b = A * x;
- vec checkx = Gauss(A, b);
- print(checkx);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement