Прямые методы решения систем линейных алгебраических уравнений

Изучение основ линейных алгебраических уравнений. Нахождение решения систем данных уравнений методом Гаусса с выбором ведущего элемента в строке, в столбце и в матрице. Выведение исходной матрицы. Основные правила применения метода факторизации.

Рубрика Математика
Вид лабораторная работа
Язык русский
Дата добавления 28.10.2014
Размер файла 489,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство образования и науки, молодежи и спорта Украины

Харьковский национальный университет имени В.Н. Каразина

Лабораторная работа №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. См. предыдущий метод.

Решение находим следующим образом:

Метод Гаусса с выбором главного элемента в столбце матрицы.

Рассмотрим k-й шаг,

k.1.

k.2. См. предыдущий метод.

k.3. См. предыдущий метод.

k.4. См. предыдущий метод.

k.5. См. предыдущий метод.

Решение находим следующим образом:

Нахождение обратной матрицы

Нахождение матрицы предложенными модификациями метода Гаусса повторет модификации метода Гаусса для решения СЛАУ, в которых n+1 меняется на 2n.

При этом в результате проделанных n шагов получаем матрицу

В первой и третьей модификациях:

Для второй модификации:

Вычисление определителя

Метода Гаусса с выбором ведущего элемента в матрице.

, p = 1, s = 1 - знак определителя на текущем шаге

1-й шаг

Если

Если , меняем местами 1-ю и строки.

Если меняем и 1-й столбцы.

Выносим элемент за знак определителя

Зануляем все элементы первого столбца за исключением первого элемента.

Пусть проделан (k-1) шаг:

где .

Если то

k-й шаг

k.1.

Если

k.2.Если , меняем местами k-ю и строки.

k.3. Если меняем и k-й столбцы.

Выносим элемент за знак определителя

Зануляем все элементы k-го столбца начиная с (k+1)-го элемента.

n-й шаг:

.

Метод Гаусса с выбором главного или ведущего элемента матрицы в строке

Рассмотрим k-й шаг:

k.1.

Если

k.2. См. предыдущий метод.

k.3. См. предыдущий метод.

k.4. См. предыдущий метод.

k.5. См. предыдущий метод.

Метод Гаусса с выбором главного или ведущего элемента матрицы в столбце

Рассмотрим k-й шаг:

k.1.

Если

k.2. См. предыдущий метод.

k.3. См. предыдущий метод.

k.4. См. предыдущий метод.

k.5. См. предыдущий метод.

Листинг программы

#include "stdafx.h"

#include <iomanip>

#include <iostream>

#include <math.h>

using namespace std;

const int n = 4;

void Print(double array[n][n])

{

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

printf(" %.4f",array[i][j]," ");

}

cout << endl;

}

}

void buldMatrA(double A[n][n])

{

for (int i = 0; i < n; i++)

{

for (int 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;

}

}

}

void Gauss_Matr(double A[n][n], double f[n])

{

int P[n];

for (int i = 0; i < n; i++)

P[i] = i;

double max=-1;

int line = 0, column= 0;

double d, x[n], r[n], Ax[n];

double A_1[n][n+1];// создаём расширенную матрицу

for (int i = 0; i < n; i ++)

{

for (int j = 0; j < n; j++)

{

A_1[i][j] = A[i][j];

}

A_1[i][n] = f[i];

}

cout << endl;

cout << "This is a matrix A_1[n][n+1] " << endl;

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n+1; j++)

{

printf(" %.4f", A_1[i][j]," ");

}

cout << endl;

}

for (int k = 0; k < n; k++)

{

max = fabs(A_1[k][k]);

line = k;

column = k;

for (int i = k; i < n; i++)

{

for (int j = k; j < n; j++)

{

if (fabs(A_1[i][j]) > max)

{

max = fabs(A_1[i][j]);

line = i;// нахождение макс элемента и его позиции

column = j;

}

}

}

if (line != k)// меняем строки местами

{

for (int j = k; j < n+1; j++)

{

swap(A_1[k][j], A_1[line][j]);

}

}

if (column != k)// меняем столбцы местами

{

for (int i = 0; i < n; i++)

{

swap(A_1[i][k], A_1[i][column]);

}

swap(P[k], P[column]);

}

d = A_1[k][k];

for (int j = k; j < n+1; j++)// деление к-й строки на макс элемент

{

A_1[k][j] = (double) A_1[k][j] / d;

}

for (int i = 0; i < n; i++)

{

if (i != k)

{

d = A_1[i][k];

for (int j = k; j < n+1; j++)

{

A_1[i][j] -= d*A_1[k][j];

}

}

}

}

cout << endl;

for (int i = 0; i < n; i++)

{

x[P[i]] = A_1[i][n];

}

cout<<"Root"<<endl;

for (int i = 0; i < n; i++)

{

printf(" %.4f", x[i], " ");

cout << endl;

}

buldMatrA(A);

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.17f\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);

}

void Gauss_column(double A[n][n], double f[n])

{

double max;

int line = 0, column = 0;// позиции максимального элемента

double d, x[n], r[n], Ax[n];

double A_1[n][n+1];// создаём расширенную матрицу

for (int i = 0; i < n; i ++)

{

for (int j = 0; j < n; j++)

{

A_1[i][j] = A[i][j];

}

A_1[i][n] = f[i];

}

cout << endl;

for (int k = 0; k < n; k++)

{

max = fabs(A_1[k][k]);

line = k;

column = k;

for (int i = k; i < n; i++)

{

if (fabs(A_1[i][k]) > max)

{

max = fabs(A_1[i][k]);

line = i;// нахождение макс элемента и его позиции

}

}

if (line != k)// меняем строки местами

{

for (int j = k; j < n+1; j++)

{

swap(A_1[k][j], A_1[line][j]);

}

}

d = A_1[k][k];

for (int j = k; j < n+1; j++)// деление к-й строки на макс элемент

{

A_1[k][j] = (double) A_1[k][j] / d;

}

for (int i = 0; i < n; i++)

{

if (i != k)

{

d = A_1[i][k];

for (int j = k; j < n+1; j++)

{

A_1[i][j] -= d*A_1[k][j];

}

}

}

}

cout << endl;

cout<<"Root"<<endl;

for (int i = 0; i < n; i++)

{

x[i] = A_1[i][n];

printf(" %.4f", x[i], " ");

cout << endl;

}

buldMatrA(A);

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);

}

void Gauss_Line(double A[n][n], double f[n])

{

int P[n];

for (int i = 0; i < n; i++)

P[i] = i;

double max;

int line = 0, column= 0;// позиции максимального элемента

double d, x[n], r[n], Ax[n];

double A_1[n][n+1];// создаём расширенную матрицу

for (int i = 0; i < n; i ++)

{

for (int j = 0; j < n; j++)

{

A_1[i][j] = A[i][j];

}

A_1[i][n] = f[i];

}

cout << endl;

for (int k = 0; k < n; k++)

{

max = fabs(A_1[k][k]);

line = k;

column = k;

for (int j = k; j < n; j++)

{

if (fabs(A_1[k][j]) > max)

{

max = fabs(A_1[k][j]);

column = j;

}

}

if (column!= k)// меняем столбцы местами

{

for (int i = 0; i < n; i++)

{

swap(A_1[i][k], A_1[i][column]);

}

swap(P[k], P[column]);

}

d = A_1[k][k];

for (int j = k; j < n+1; j++)// деление к-й строки на макс элемент

{

A_1[k][j] = (double) A_1[k][j] / d;

}

for (int i = 0; i < n; i++)

{

if (i != k)

{

d = A_1[i][k];

for (int j = k; j < n+1; j++)

{

A_1[i][j] -= d*A_1[k][j];

}

}

}

}

cout << endl;

for (int i = 0; i < n; i++)

{

x[P[i]] = A_1[i][n];

}

cout<<"Root"<<endl;

for (int i = 0; i < n; i++)

{

printf(" %.4f", x[i], " ");

cout << endl;

}

buldMatrA(A);

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);

}

void Determinant(double A[n][n])

{

double max, p = 1;

int s = 1;

int line = 0, column= 0;// позиции максимального элемента

double d;

for (int k = 0; k < n; k++)

{

max = fabs(A[k][k]);

line = k;

column = k;

for (int i = k; i < n; i++)

{

for (int j = k; j < n; j++)

{

if (fabs(A[i][j]) > max)

{

max = fabs(A[i][j]);

line = i;// нахождение макс элемента и фикс позиции

column = j;

}

}

}

if (line != k)// меняем строки местами

{

for (int j = k; j < n; j++)

{

swap(A[k][j], A[line][j]);

}

s *= -1;

}

if (column != k)// меняем столбцы местами

{

for (int i = k; i < n; i++)

{

swap(A[i][k], A[i][column]);

}

s *= -1;

}

d = A[k][k];

for (int j = k; j < n; j++)// деление к-й строки на макс элемент

{

A[k][j] = (double) A[k][j] / d;

}

p = p*d;

for (int i = k+1; i < n; i++)

{

d = A[i][k];

for (int j = k; j < n; j++)

{

A[i][j] -= d*A[k][j];

}

}

}

cout<<s*p;

cout << endl;

}

void Multipluying(double A[n][n], double B[n][n])

{

double C[n][n];

double s = 0;

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

s = 0;

for (int k = 0; k < n; k++)

{

s = s + A[i][k]*B[k][j];

}

C[i][j] = s;

}

}

Print(C);

}

void Inverted_Gauss_Matr(double A[n][n])

{

double d;

int P[n];

int line,column;

double max;

for (int l = 0; l < n; l++)

P[l] = l;

double A_2[n][2*n];// создаём расширенную матрицу

for (int i = 0; i < n; i ++)

{

for (int j = 0; j < n; j++)

{

A_2[i][j] = A[i][j];

}

}

for (int i = 0; i < n; i++)

{

for (int j = n; j < 2*n; j++)

{

if ((i+n) == j)

{

A_2[i][j] = 1;

}

else

{

A_2[i][j] = 0;

}

}

}

for (int i = 0; i < n; i++)

{

for (int j = 0; j < 2*n; j++)

{

printf(" %.4f", A_2[i][j], " " );

}

cout << endl;

}

for (int k = 0; k < n; k++)

{

max = fabs(A_2[k][k]);

line = k;

column = k;

for (int i = k; i < n; i++)

{

for (int j = k; j < n; j++)

{

if (fabs(A_2[i][j]) > max)

{

max = fabs(A_2[i][j]);

line = i;// нахождение макс элемента и фикс позиции

column= j;

}

}

}

if (line != k)// меняем строки местами

{

for (int j = k; j < 2*n; j++)

{

swap(A_2[k][j], A_2[line][j]);

}

}

if (column != k)// меняем столбцы местами

{

for (int i = 0; i < n; i++)

{

swap(A_2[i][k], A_2[i][column]);

}

swap(P[k], P[column]);//менял тут!!!11

}

d = A_2[k][k];

for (int j = k; j < 2*n; j++)// деление к-й строки на макс элемент

{

A_2[k][j] = (double) A_2[k][j] / d;

}

for (int i = 0; i < n; i++)

{

if (i != k)

{

d = A_2[i][k];

for (int j = k; j < 2*n; j++)

{

A_2[i][j] -= d*A_2[k][j];

}

}

}

}

double A_Inverted[n][n];

cout << endl << endl;

cout << "Inverted matrix is:" << endl;

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

A_Inverted[P[i]][j] = A_2[i][j+n];

}

}

cout << endl;

Print(A_Inverted);

cout << endl << "Check" << endl << endl;

Multipluying(A, A_Inverted);

}

void Inverted_Gauss_Line(double A[n][n])

{

double max;

int line = 0, column = 0;// позиции максимального элемента

double d;

int P[n];

for (int l = 0; l < n; l++)

P[l] = l;

double A_2[n][2*n];// создаём расширенную матрицу

for (int i = 0; i < n; i ++)

{

for (int j = 0; j < n; j++)

{

A_2[i][j] = A[i][j];

}

}

for (int i = 0; i < n; i++)

{

for (int j = n; j < 2*n; j++)

{

if ((i+n) == j)

{

A_2[i][j] = 1;

}

else

{

A_2[i][j] = 0;

}

}

}

for (int k = 0; k < n; k++)

{

max = fabs(A_2[k][k]);

line = k;

column= k;

for (int j = k; j < n; j++)

{

if (fabs(A_2[k][j]) > max)

{

max = fabs(A_2[k][j]);

column= j;

}

}

if (column != k)// меняем столбцы местами

{

for (int i = 0; i < n; i++)

{

swap(A_2[i][k], A_2[i][column]);

}

swap(P[k], P[column]);

}

d =A_2[k][k];

for (int j = k; j < 2*n; j++)// деление к-й строки на макс элемент

{

A_2[k][j] = (double) A_2[k][j] / d;

}

for (int i = 0; i < n; i++)

{

if (i != k)

{

d = A_2[i][k];

for (int j = k; j < 2*n; j++)

{

A_2[i][j] -= d*A_2[k][j];

}

}

}

}

cout << endl;

double A_Inverted[n][n];

cout << endl;

cout << "Inverted matrix is:" << endl;

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

A_Inverted[P[i]][j] = A_2[i][j+n];

}

}

cout << endl;

Print(A_Inverted);

cout << endl << "Check" << endl << endl;

Multipluying(A, A_Inverted);

}

void Inverted_Gauss_Column(double A[n][n])

{

double max;

int line = 0, column = 0;// позиции максимального элемента

double d;

double A_2[n][2*n];// создаём расширенную матрицу

int P[n];

for (int l = 0; l < n; l++)

P[l] = l;

for (int i = 0; i < n; i ++)

{

for (int j = 0; j < n; j++)

{

A_2[i][j] = A[i][j];

}

}

for (int i = 0; i < n; i++)

{

for (int j = n; j < 2*n; j++)

{

if ((i+n) == j)

{

A_2[i][j] = 1;

}

else

{

A_2[i][j] = 0;

}

}

}

for (int k = 0; k < n; k++)

{

max = fabs(A_2[k][k]);

line = k;

column = k;

for (int i = k; i < n; i++)

{

if (fabs(A_2[i][k]) > max)

{

max = fabs(A_2[i][k]);

line = i;// нахождение макс элемента и фикс позиции

}

}

if (line != k)// меняем строки местами

{

for (int j = k; j < 2*n; j++)

{

swap(A_2[k][j], A_2[line][j]);

}

}

d = A_2[k][k];

for (int j = k; j < 2*n; j++)// деление к-й строки на макс элемент

{

A_2[k][j] = (double) A_2[k][j] / d;

}

for (int i = 0; i < n; i++)

{

if (i != k)

{

d = A_2[i][k];

for (int j = k; j < 2*n; j++)

{

A_2[i][j] -= d*A_2[k][j];

}

}

}

}

double A_Inverted[n][n];

cout << endl;

cout << "Inverted matrix is:" << endl;

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

A_Inverted[i][j] = A_2[i][j+n];

}

}

cout << endl;

Print(A_Inverted);

cout << endl << "Check" << endl << endl;

Multipluying(A, A_Inverted);

}

void main()

{

double A[n][n];

buldMatrA(A);

cout << "Our matrix A is:" << endl;

Print(A);

double f[n] = {0.17,1,0.21,2.71}; // это вектор свободных членов

cout << endl << "Our vector f is:" << endl;

for (int i = 0; i < n; i++)

{

printf(" %.4f", f[i], " ");

}

cout<<endl;

cout << "Gauss method - max element in MATRIX";

Gauss_Matr(A, f);

cout << "Gauss method - max element in COLUMN";

Gauss_column(A, f);

cout << "Gauss method - max element in LINE";

Gauss_Line(A, f);

cout << "Determinant:" << endl;

Determinant(A);

buldMatrA(A);

cout << "matrix A_2[n][2*n]" << endl;

Inverted_Gauss_Matr(A);

cout << "Matrix by lines" << endl;

Inverted_Gauss_Line(A);

cout << "Matrix by the column" << endl;

Inverted_Gauss_Column(A);

system("PAUSE");}

Распечатка результатов

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 vector f is:

0.1700 1.0000 0.2100 2.7100

Gauss method - max element in MATRIX

This is a matrix A_1[n][n+1]

0.1100 -0.1700 0.7200 -0.3400 0.1700

0.8100 0.1200 -0.9100 0.1700 1.0000

0.1700 -0.1800 1.0000 0.2800 0.2100

0.1300 0.1700 -0.9900 0.3500 2.7100

Root

-5.0073

-79.3203

-14.8955

5.9967

Nevazka

-0.00000000000000008

-0.00000000000000089

0.00000000000000086

-0.00000000000000178

||Ax-f||=0.000000000000001776

Gauss method - max element in COLUMN

Root

-5.0073

-79.3203

-14.8955

5.9967

Nevazka

0.000000000000003469

-0.000000000000000888

-0.000000000000000916

0.000000000000000000

||Ax-f||=0.000000000000003469

Gauss method - max element in LINE

Root

-5.0073

-79.3203

-14.8955

5.9967

Nevazka

0.000000000000001249

-0.000000000000002442

-0.000000000000000472

-0.000000000000000888

||Ax-f||=0.000000000000002442

Determinant:

0.0168305

matrix A_2[n][2*n]

0.1100 -0.1700 0.7200 -0.3400 1.0000 0.0000 0.0000 0.0000

0.8100 0.1200 -0.9100 0.1700 0.0000 1.0000 0.0000 0.0000

0.1700 -0.1800 1.0000 0.2800 0.0000 0.0000 1.0000 0.0000

0.1300 0.1700 -0.9900 0.3500 0.0000 0.0000 0.0000 1.0000

Inverted matrix is:

-1.4253 1.7694 0.2315 -2.4292

-28.4211 9.1371 -1.6455 -30.7307

-4.9593 1.5461 0.2594 -5.7760

0.3063 -0.7221 1.4468 2.3479

Check

1.0000 -0.0000 0.0000 -0.0000

0.0000 1.0000 0.0000 0.0000

-0.0000 0.0000 1.0000 -0.0000

0.0000 0.0000 0.0000 1.0000

Matrix by lines

Inverted matrix is:

-1.4253 1.7694 0.2315 -2.4292

-28.4211 9.1371 -1.6455 -30.7307

-4.9593 1.5461 0.2594 -5.7760

0.3063 -0.7221 1.4468 2.3479

Check

1.0000 -0.0000 0.0000 0.0000

-0.0000 1.0000 -0.0000 -0.0000

0.0000 0.0000 1.0000 -0.0000

-0.0000 0.0000 -0.0000 1.0000

Matrix by the column

Inverted matrix is:

-1.4253 1.7694 0.2315 -2.4292

-28.4211 9.1371 -1.6455 -30.7307

-4.9593 1.5461 0.2594 -5.7760

0.3063 -0.7221 1.4468 2.3479

Check

1.0000 -0.0000 -0.0000 0.0000

-0.0000 1.0000 0.0000 0.0000

-0.0000 0.0000 1.0000 -0.0000

-0.0000 -0.0000 0.0000 1.0000

линейный алгебраический уравнение гаусс

Вывод

В нашем случае более точным оказался метод Гаусса с выбором ведущего элемента в матрице, его невязка составила

||Ax-f||=0.000000000000001776.

Потом идет метод Гаусса с выбором ведущего элемента в строке

||Ax-f||=0.000000000000002442.

А уже после идут метод факторизации с невязкой

||Ax-f||=0.000000000000002470

и метод Гаусса с выбором ведущего элемента в столбце с невязкой

||Ax-f||=0.000000000000003469

соответственно. Так же было найдено решение системы

Root

-5.0073

-79.3203

-14.8955

5.9967

и определитель

Determinant:

0.0168305

значение которых совпало для всех методов.

Размещено на Allbest.ru


Подобные документы

  • Понятие и специфические черты системы линейных алгебраических уравнений. Механизм и этапы решения системы линейных алгебраических уравнений. Сущность метода исключения Гаусса, примеры решения СЛАУ данным методом. Преимущества и недостатки метода Гаусса.

    контрольная работа [397,2 K], добавлен 13.12.2010

  • Характеристика и использование итерационных методов для решения систем алгебраических уравнений, способы формирования уравнений. Методы последовательных приближений, Гаусса-Зейделя, обращения и триангуляции матрицы, Халецкого, квадратного корня.

    реферат [60,6 K], добавлен 15.08.2009

  • Основные правила решения системы заданных уравнений методом Гаусса с минимизацией невязки и методом простых итераций. Понятие исходной матрицы; нахождение определителя для матрицы коэффициентов. Пример составления блок-схемы метода минимизации невязок.

    лабораторная работа [264,1 K], добавлен 24.09.2014

  • Характеристика способов решения систем линейных алгебраических уравнений (СЛАУ). Описание проведения вычислений на компьютере методом Гаусса, методом квадратного корня, LU–методом. Реализация метода вращений средствами системы программирования Delphi.

    курсовая работа [118,4 K], добавлен 04.05.2014

  • Рассмотрение систем линейных алгебраических уравнений общего вида. Сущность теорем и их доказательство. Особенность трапецеидальной матрицы. Решение однородных и неоднородных линейных алгебраических уравнений, их отличия и применение метода Гаусса.

    реферат [66,4 K], добавлен 14.08.2009

  • Методы решения систем линейных алгебраических уравнений (СЛАУ): Гаусса и Холецкого, их применение к конкретной задаче. Код программы решения перечисленных методов на языке программирования Borland C++ Builder 6. Понятие точного метода решения СЛАУ.

    реферат [58,5 K], добавлен 24.11.2009

  • Сущность итерационного метода решения задачи, оценка его главных преимуществ и недостатков. Разновидности итерационных методов решения систем линейных алгебраических уравнений: Якоби, Хорецкого и верхней релаксации, их отличия и возможности применения.

    курсовая работа [39,2 K], добавлен 01.12.2009

  • Основные действия над матрицами, операция их умножения. Элементарные преобразования матрицы, матричный метод решения систем линейных уравнений. Элементарные преобразования систем, методы решения произвольных систем линейных уравнений, свойства матриц.

    реферат [111,8 K], добавлен 09.06.2011

  • Структура и элементы, принципы формирования и правила разрешения систем линейных алгебраических уравнений. История развития различных методов решения: матричного, Крамера, с помощью функции Find. Особенности применения возможностей программы Mathcad.

    контрольная работа [96,0 K], добавлен 09.03.2016

  • Сущность и содержание метода Крамера как способа решения квадратных систем линейных алгебраических уравнений с ненулевым определителем основной матрицы. Содержание основных правил Крамера, сферы и особенности их практического применения в математике.

    презентация [987,7 K], добавлен 22.11.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.