Розв’язання систем лінійних алгебраїчних рівнянь (СЛАР) прямими методами. Звичайний метод Гауса та метод квадратних коренів.

Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
ІСМ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2024
Тип роботи:
Лабораторна робота
Предмет:
Чисельні методи

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України НТУУ «Київський політехнічний інститут ім. Ігоря Сікорського» Кафедра АПЕПС Лабораторна робота №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; }
Антиботан аватар за замовчуванням

03.05.2023 17:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!