Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Звіт до лабораторної роботи № 2
з курсу “Комп’ютерні методи дослідження систем керування”
ПРЯМІ ТА ІТЕРАЦІЙНІ МЕТОДИ РОЗВ’ЯЗУВАННЯ СИСТЕМ ЛІНІЙНИХ АЛГЕБРИЧНИХ РІВНЯНЬ
Варіант #8
Мета роботи: вивчити найпоширеніші прямі та ітераційні методи розв’язування систем лінійних алгебричних рівнянь та способи їх застосування для обчислення визначників і обертання матриць.
Теоретичні відомості
Застосування методу Гауса для обчислення визначників матриць
Нехай маємо деяку матрицю
. (4.1)
Розглянемо лінійну систему
. (4.2)
При розв’язуванні системи (4.2) методом Гауса (п.2) ми здійснювали заміну матриці трикутною матрицею , що складалася з елементів зазначених стрічок,
. (4.3)
У результаті ми отримували еквівалентну систему
. (4.4)
Елементи матриці послідовно утворювалися з елементів матриці та подальших допоміжних матриць за допомогою таких елементарних перетворень:
ділення на головні елементи , , … , , які передбачалися відмінними від нуля, та
віднімання із рядків матриці та проміжних матриць чисел, що пропорційні елементам відповідних головних стрічок.
При першій операції визначник матриці також ділиться на відповідний головний елемент, при другій – визначник матриці залишається незмінним. Тому
.
Отже
(4.5)
Як бачимо з виразу (4.5), визначник дорівнює добутку головних елементів для відповідної схеми Гауса. До того ж немає потреби здійснювати обчислення для вектора вільних членів та операції зворотного ходу – вистачає лише прямого ходу методу Гауса.
Завдання
8
Обчислити визначник матриці методом Гауса з вибором головного елемента по всій матриці
матриця №1
Матриця №1
де ; ;Код програми
#include <iostream>
#include <math.h>
using namespace std;
void main()
{
int n = 4, h, w;
double det = 1;
double max = 0, value = 0;
double V[4][4], C[4][4];
double A[4][4] = { { 8.3, 2.64, 4.1, 1.9 },
{ 3.92, 8.45, 7.76, 2.46 },
{ 3.77, 7.23, 8.04, 2.28 },
{ 2.21, 3.63, 1.69, 6.69 } };
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
V[i][j] = A[i][j];
}
for (int k = 0; k < n; k++)
{
//****************************************
//Сортування
max = fabs(V[k][k]);
h = k;
w = k;
for (int l = k; l < n; l++)
for (int f = k; f < n; f++)
{
if (max < abs(V[l][f]))
{
h = l; w = f;
}
}
for (int d = 0; d < n; d++)
{
value = V[k][d];
V[k][d] = V[h][d];
V[h][d] = value;
}
for (int d = 0; d < n; d++)
{
if (d < k)
{
value = C[d][k];
C[d][k] = C[d][w];
C[d][w] = value;
}
else
{
value = V[d][k];
V[d][k] = V[d][w];
V[d][w] = value;
}
}
//****************************************
det = det*pow((-1), w + h)*V[k][k];
for (int i = k + 1; i < n; i++)
for (int j = k + 1; j < n; j++)
{
C[k][j] = V[k][j] / V[k][k];
V[i][j] -= V[i][k] * C[k][j];
}
}
cout << "\n\t==============================" << endl;
cout << "\n\t The determinant is " << det << endl;
cout << "\n\t==============================" << endl;
getchar();
}
Результат роботи програми
/