Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include "string.h"
- #include "array.h"
- using namespace std;
- // Функция для решения методом Гаусса
- Array<double> gaussSolve(Array<Array<double>>& A, Array<double>& b)
- {
- int n = A.size();
- // Расширенная матрица
- // (Но давайте для удобства будем хранить всё в A, а b — в последнем столбце)
- // Перенесём b[i] в A[i][n]
- for(int i = 0; i < n; i++)
- {
- A[i].append(b[i]);
- }
- // Прямой ход
- for(int i = 0; i < n; i++)
- {
- double pivot = A[i][i];
- // нормируем
- for(int col = i; col <= n; col++)
- {
- A[i][col] /= pivot;
- }
- // зануляем остальные
- for(int r = i+1; r < n; r++)
- {
- double factor = A[r][i];
- for(int c = i; c <= n; c++)
- {
- A[r][c] -= factor * A[i][c];
- }
- }
- }
- // Обратный ход
- Array<double> x;
- for(int i = 0; i < n; i++)
- {
- x.append(0.0);
- }
- for(int i = n-1; i >= 0; i--)
- {
- double val = A[i][n];
- for(int c = i+1; c < n; c++)
- {
- val -= A[i][c] * x[c];
- }
- x[i] = val;
- }
- return x;
- }
- int main()
- {
- cout << "Введите n: ";
- int n;
- cin >> n;
- Array<Array<double>> mat;
- mat.append(Array<double>()); // чтобы избежать проблем, но лучше сразу resize
- mat = Array<Array<double>>(); // заново инициализируем
- // Инициализируем матрицу A
- for(int i = 0; i < n; i++)
- {
- Array<double> row;
- for(int j = 0; j < n; j++)
- {
- double tmp;
- cin >> tmp;
- row.append(tmp);
- }
- mat.append(row);
- }
- // Считываем b
- Array<double> b;
- for(int i = 0; i < n; i++)
- {
- double tmp;
- cin >> tmp;
- b.append(tmp);
- }
- // Решаем
- Array<double> solution = gaussSolve(mat, b);
- // Вывод
- for(int i = 0; i < n; i++)
- {
- cout << "x[" << i << "] = " << solution[i] << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement