Міністерство освіти і науки України
НТУУ «Київський політехнічний інститут ім. Ігоря Сікорського»
Кафедра АПЕПС
Лабораторна робота №1
з дисципліни «Чисельні методи в моделюванні енергетичних процесів»
«Розв’язання систем лінійних алгебраїчних рівнянь (СЛАР) прямими методами.Звичайний метод Гауса та метод квадратних коренів.»
Варіант 15
Завдання
/
Розв’язати систему рівнянь з кількістю значущих цифр m = 6. Використати метод Гауса для парних варіантів шляхом зведення матриці до верхньої трикутної побудованої на побічній діагоналі, для непарних - шляхом зведення до діагональної матриці.
Вивести всі проміжні результати (матриці А, що отримані в ході прямого ходу методу Гауса, матрицю зворотного ходу методу Гауса та розв’язок системи. Навести результат перевірки: вектор нев’язки r = b – Ax, де x - отриманий розв’язок.
Порівняти корені рівнянь, отримані у Mathcad, із власними результатами задопомогою методу середньоквадратичної похибки.
Для варіанту 15 матриця має такий вигляд:
/
Прямий хід методу Гауса:
/
/
/
Зворотній хід:
/
/
Відповідь:
/
Вектор нев’язки:
7,590085 = 7,59 (0,000085)
3,210024 = 3,21 (0,000024)
2,880229 = 2,88 (0,000229)
6,250004 = 6,25 (0,000004)
6,349953 = 6,35 (0,000047)
Розвязок через калькулятор:
/
/
/
/
/
Середньоквадратична похибка:
/
Код програми:
#include <iostream>
#include <iomanip>
#include <windows.h>
#define SIZE 5
using namespace std;
void matOutput(float(*mat)[6], int rows, int colums) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < colums; j++) {
cout << setw(9) << fixed << setprecision(4) << mat[i][j];
}
cout << endl;
}
cout << endl;
}
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
const int rows = 5;
const int columns = 6;
float mat[rows][columns] = {
{6.18, 1.12, 0.95, 1.32, 0.83, 7.59},
{1.12, 3.28, 2.12, 0.57, 0.91, 3.21},
{0.95, 2.12, 7.13, 1.29, 1.57, 2.88},
{1.32, 0.57, 1.29, 3.57, 1.25, 6.25},
{0.83, 0.91, 1.57, 1.25, 6.21, 6.35}
};
float result[rows];
cout << "Початкова матриця:" << endl;
matOutput(mat, rows, columns);
cout << "Прямий хід:" << endl << endl;
cout << "Поділимо 1 рядок на " << mat[0][0] <<" :" << endl << endl;
float temp = mat[0][0];
for (int i = 0; i < columns; i++) {
mat[0][i] /= temp;
}
matOutput(mat, rows, columns);
cout << "Помножимо 1 рядок на " << -mat[1][0] << " і додамо до 2 :" << endl << endl;
temp = -mat[1][0];
for (int i = 0; i < columns; i++) {
mat[1][i] += (mat[0][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 1 рядок на " << -mat[2][0] << " і додамо до 3 :" << endl << endl;
temp = -mat[2][0];
for (int i = 0; i < columns; i++) {
mat[2][i] += (mat[0][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 1 рядок на " << -mat[3][0] << " і додамо до 4 :" << endl << endl;
temp = -mat[3][0];
for (int i = 0; i < columns; i++) {
mat[3][i] += (mat[0][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 1 рядок на " << -mat[4][0] << " і додамо до 5 :" << endl << endl;
temp = -mat[4][0];
for (int i = 0; i < columns; i++) {
mat[4][i] += (mat[0][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Поділимо 2 рядок на " << mat[1][1] << endl << endl;
temp = mat[1][1];
for (int i = 0; i < columns; i++) {
mat[1][i] /= temp;
}
matOutput(mat, rows, columns);
cout << "Помножимо 2 рядок на " << -mat[2][1] << " і додамо до 3 :" << endl << endl;
temp = -mat[2][1];
for (int i = 0; i < columns; i++) {
mat[2][i] += (mat[1][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 2 рядок на " << -mat[3][1] << " і додамо до 4 :" << endl << endl;
temp = -mat[3][1];
for (int i = 0; i < columns; i++) {
mat[3][i] += (mat[1][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 2 рядок на " << -mat[4][1] << " і додамо до 5 :" << endl << endl;
temp = -mat[4][1];
for (int i = 0; i < columns; i++) {
mat[4][i] += (mat[1][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Поділимо 3 рядок на " << mat[2][2] << endl << endl;
temp = mat[2][2];
for (int i = 0; i < columns; i++) {
mat[2][i] /= temp;
}
matOutput(mat, rows, columns);
cout << "Помножимо 3 рядок на " << -mat[3][2] << " і додамо до 4 :" << endl << endl;
temp = -mat[3][2];
for (int i = 0; i < columns; i++) {
mat[3][i] += (mat[2][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 3 рядок на " << -mat[4][2] << " і додамо до 5 :" << endl << endl;
temp = -mat[4][2];
for (int i = 0; i < columns; i++) {
mat[4][i] += (mat[2][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Поділимо 4 рядок на " << mat[3][3] << endl << endl;
temp = mat[3][3];
for (int i = 0; i < columns; i++) {
mat[3][i] /= temp;
}
matOutput(mat, rows, columns);
cout << "Помножимо 4 рядок на " << -mat[3][3] << " і додамо до 5 :" << endl << endl;
temp = -mat[4][3];
for (int i = 0; i < columns; i++) {
mat[4][i] += (mat[3][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Поділимо 5 рядок на " << mat[4][4] << endl << endl;
temp = mat[4][4];
for (int i = 0; i < columns; i++) {
mat[4][i] /= temp;
}
matOutput(mat, rows, columns);
cout << endl << "Зворотній хід:" << endl << endl;
cout << "Помножимо 5 рядок на " << -mat[3][4] << " і додамо до 4 :" << endl << endl;
temp = -mat[3][4];
for (int i = 0; i < columns; i++) {
mat[3][i] += (mat[4][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 5 рядок на " << -mat[2][4] << " і додамо до 3 :" << endl << endl;
temp = -mat[2][4];
for (int i = 0; i < columns; i++) {
mat[2][i] += (mat[4][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 5 рядок на " << -mat[1][4] << " і додамо до 2 :" << endl << endl;
temp = -mat[1][4];
for (int i = 0; i < columns; i++) {
mat[1][i] += (mat[4][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 5 рядок на " << -mat[0][4] << " і додамо до 1 :" << endl << endl;
temp = -mat[0][4];
for (int i = 0; i < columns; i++) {
mat[0][i] += (mat[4][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 4 рядок на " << -mat[2][3] << " і додамо до 3 :" << endl << endl;
temp = -mat[2][3];
for (int i = 0; i < columns; i++) {
mat[2][i] += (mat[3][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 4 рядок на " << -mat[2][3] << " і додамо до 3 :" << endl << endl;
temp = -mat[2][3];
for (int i = 0; i < columns; i++) {
mat[2][i] += (mat[3][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 4 рядок на " << -mat[1][3] << " і додамо до 2 :" << endl << endl;
temp = -mat[1][3];
for (int i = 0; i < columns; i++) {
mat[1][i] += (mat[3][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 4 рядок на " << -mat[0][3] << " і додамо до 1 :" << endl << endl;
temp = -mat[0][3];
for (int i = 0; i < columns; i++) {
mat[0][i] += (mat[3][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 3 рядок на " << -mat[1][2] << " і додамо до 2 :" << endl << endl;
temp = -mat[1][2];
for (int i = 0; i < columns; i++) {
mat[1][i] += (mat[2][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 3 рядок на " << -mat[0][2] << " і додамо до 1 :" << endl << endl;
temp = -mat[0][2];
for (int i = 0; i < columns; i++) {
mat[0][i] += (mat[2][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Помножимо 2 рядок на " << -mat[0][1] << " і додамо до 1 :" << endl << endl;
temp = -mat[0][1];
for (int i = 0; i < columns; i++) {
mat[0][i] += (mat[1][i] * temp);
}
matOutput(mat, rows, columns);
cout << "Відповідь:" << endl << endl;
for (int i = 0; i < rows; i++) {
cout << "x" << i+1 << " = " << mat[i][columns - 1] << endl;
}
return 0;
}