Прямые методы решения систем линейных алгебраических уравнений
Краткое сожержание материала:
Размещено на
Министерство образования и науки, молодежи и спорта Украины
Харьковский национальный университет имени В.Н. Каразина
Лабораторная работа №2
Прямые методы решения систем линейных алгебраических уравнений
Выполнила:
студентка группы МП-31
Кальницкая Б.М.
Проверил:
доц. Скорик В.А.
Харьков 2014
Постановка задачи
I. Найти решение систем линейных алгебраических уравнений Ах=b, найти А-1, вычислить det A.
1. Методом Гаусса с выбором ведущего элемента в строке.
2. Методом Гаусса с выбором ведущего элемента в столбце.
3. Методом Гаусса с выбором ведущего элемента в матрице. На печать вывести исходную матрицу A, вектор b, решение x, невязку, det A, А-1. Сравнить полученые результаты.
II. Найти решение систем линейных алгебраических уравнений Ах=b, вычислить det A.
1. Методом факторизации.
Напечать вывести исходную матрицу A, вектор b, решение x, невязку, вычислить det A. Сравнить полученые результаты.
Вариант №4
А = , b =
Метод Факторизации
Теорема.
Пусть
Тогда А представима единственным образом в виде где
- нижнетреугольная,
- верхнетреугольная;
.
При этом решение сводится к решению двух систем
Листинг программы
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;
const int n = 4;
int main()
{
int i = 0, j = 0, k = 0, m = 0;
double A[n][n], B[n][n], C[n][n], f[n], x[n], y[n], r[n], Ax[n], max = -1;
cout << " Our matrix A is: " << endl;
for (i = 0; i<n; i++)
{
for (j = 0; j<n; j++)
{
A[0][0] = 0.11;
A[0][1] = -0.17;
A[0][2] = 0.72;
A[0][3] = -0.34;
A[1][0] = 0.81;
A[1][1] = 0.12;
A[1][2] = -0.91;
A[1][3] = 0.17;
A[2][0] = 0.17;
A[2][1] = -0.18;
A[2][2] = 1;
A[2][3] = 0.28;
A[3][0] = 0.13;
A[3][1] = 0.17;
A[3][2] = -0.99;
A[3][3] = 0.35;
B[i][j] = 0;
C[i][j] = 0;
x[i] = 0;
y[i] = 0;
printf(" %.4f", A[i][j], " ");
}
cout << endl;
}
cout << " Our string f is: " << endl;
for (int i = 0; i<n; i++)
{
f[0] = 0.17;
f[1] = 1;
f[2] = 0.21;
f[3] = 2.71;
printf(" %.0f", f[i], " ");
}
cout << endl;
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
double s = 0;
for (int k = 0; k < i; k++)
s += B[j][k] * C[k][i];
B[j][i] = A[j][i] - s;
s = 0;
for (int k = 0; k < i; k++)
s += B[i][k] * C[k][j];
C[i][j] = (A[i][j] - s) / B[i][i];
}
}
cout << " Our matrix B is: " << endl;
for (int i = 0; i<n; i++)
{
for (int j = 0; j<i + 1; j++)
{
printf(" %.4f", B[i][j], " ");
}
cout << endl;
}
cout << " Our matrix C is: " << endl;
for (int i = 0; i<n; i++)
{
for (int j = i; j<n; j++)
{
printf(" %.4f", C[i][j], " ");
}
cout << endl;
}
for (int i = 0; i < n; i++)
{
double s = 0;
for (int k = 0; k < i; k++)
s += B[i][k] * y[k];
y[i] = (f[i] - s) / B[i][i];
}
for (int i = n - 1; i >= 0; i--)
{
double s = 0;
for (int k = i + 1; k < n; k++)
s += C[i][k] * x[k];
x[i] = y[i] - s;
}
cout << "Vector x" << endl;
for (int i = 0; i<n; i++)
{
cout << x[i] << " ";
}
cout << endl;
for (int i = 0; i<n; i++)
{
double s = 0;
for (int j = 0; j<n; j++)
{
s += A[i][j] * x[j];
}
Ax[i] = s;
r[i] = Ax[i] - f[i];
}
cout << "Nevazka" << endl;
for (int i = 0; i<n; i++)
{
printf("%1.18f\n", r[i]);
}
max = 0;
for (int i = 0; i<n; i++)
{
if (max< fabs(r[i]))
{
max = fabs(r[i]);
}
}
printf("\n ||Ax-f||=%1.18f\n", max);
double det = 1;
for (int i = 0; i<n; i++)
{
det *= B[i][i];
}
cout << "Determinant:" << endl;
cout << det << endl;
return 0;
}
Распечатка результатов
Our matrix A is:
0.1100 -0.1700 0.7200 -0.3400
0.8100 0.1200 -0.9100 0.1700
0.1700 -0.1800 1.0000 0.2800
0.1300 0.1700 -0.9900 0.3500
Our string f is:
0.1700 1.0000 0.2100 2.7100
Our matrix B is:
0.1100
0.8100 1.3718
0.1700 0.0827 0.2619
0.1300 0.3709 -0.1614 0.4259
Our matrix C is:
1.0000 -1.5455 6.5455 -3.0909
1.0000 -4.5282 1.9490
1.0000 2.4600
1.0000
Vector x
-5.0073 -79.3203 -14.8955 5.99673
Nevazka
-0.000000000000000527
0.000000000000001110
-0.000000000000002470
0.000000000000000444
||Ax-f||=0.000000000000002470
Determinant:
0.0168305
Метод Гаусса
Пусть , матрица, невырожденная.
Рассмотрим систему
= - известный n-мерный вектор
=; = - неизвестный
Метод Гаусса решения систем линейных уравнений с выбором главного или ведущего элемента матрицы.
Рассмотрим 1 шаг:
.
Если то меняем местами и строки:
то : .
Если то меняем местами и столбцы:
то : .
Делим 1-ю строку полученной матрицы на элемент :
Исключаем из всех уравнений, кроме 1-го, т. е.:
,
В результате получим матрицу
.
Пусть проделано k-1 шагов:
.
Рассмотрим k-й шаг:
k.1. .
k.2. Если то меняем местами и строки:
о .
k.3. Если то меняем местами и столбцы:
то ; .
k.4. Делим k-ю строку полученной матрицы на элемент :
k.5. Исключаем из всех уравнений, кроме k-го, т. е.
В результате получим матрицу
.
После n-го шага получаем матрицу
Решение находим следующим образом:
Метод Гаусса с выбором главного элемента в строке матрицы.
Рассмотрим k-й шаг,
k.1.
k.2. См. предыдущий метод.
k.3. См. предыдущий метод.
k.4. См. предыдущий метод.
k.5. См. предыдущий метод.
Решение находим следующим образом:
...Прямые методы решения систем линейных алгебраических уравнений
Характеристика и использование итерационных методов для решения систем алгебраических уравнений, способы формирования уравнений. Методы последовательн...
Метод Гаусса решения систем линейных алгебраических уравнений
Системы линейных алгебраических уравнений. Код программы для решения систем линейных алгебраических уравнений. Математические и алгоритмические основы...
Прямые методы решения систем линейных уравнений
Характеристика способов решения систем линейных алгебраических уравнений (СЛАУ). Описание проведения вычислений на компьютере методом Гаусса, методом...
Итерационные методы решения систем линейных алгебраических уравнений
Сущность итерационного метода решения задачи, оценка его главных преимуществ и недостатков. Разновидности итерационных методов решения систем линейных...
Точные методы решения систем линейных алгебраических уравнений (СЛАУ)
Методы решения систем линейных алгебраических уравнений (СЛАУ): Гаусса и Холецкого, их применение к конкретной задаче. Код программы решения перечисле...