Министерство науки и высшего образования Российской Федерации Федеральное государственное образовательное учреждение высшего образования «Владимирский государственный университет имени Александра Григорьевича и Николая Григорьевича Столетовых» (ВлГУ) Институт прикладной математики, физики и информатики Кафедра физики и прикладной математики ЛАБОРАТОРНАЯ РАБОТА №4 по дисциплине «Численные методы» на тему «РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ» Выполнил: ст. гр. АИС-121 Виноградов Т.А. Принял: доцент каф. ФиПМ Заякин А.А. Владимир 2022 Цель работы: изучить метод простой итерации и метод Зейделя для решения систем линейных алгебраических уравнений. Задача: решить систему линейных алгебраических уравнений методом простой итерации и методом Зейделя с погрешностью 0,001 на языке C++. 2,951 ∗ 𝑥1 + 0,512 ∗ 𝑥2 + 0,128 ∗ 𝑥3 + 0,195 ∗ 𝑥4 = 0,159 0,203 ∗ 𝑥1 + 3,469 ∗ 𝑥2 + 0,572 ∗ 𝑥3 + 0,162 ∗ 𝑥4 = 0,280 { 0,256 ∗ 𝑥1 + 0,273 ∗ 𝑥2 + 2,994 ∗ 𝑥3 + 0,501 ∗ 𝑥4 = 0,134 0,381 ∗ 𝑥1 + 0,219 ∗ 𝑥2 + 0,176 ∗ 𝑥3 + 5,903 ∗ 𝑥4 = 0,864 Краткие теоретические сведения Метод простых итераций Метод итерации — это численный и приближенный метод решения СЛАУ. Суть метода заключается в нахождении по приближённому значению величины следующего приближения, которое является более точным. Метод позволяет получить значения корней системы с заданной точностью. Пусть дана система 𝑎11 𝑥1 + 𝑎12 𝑥2 + 𝑎13 𝑥3 + 𝑎14 𝑥4 = 𝑏1 𝑎 𝑥 + 𝑎22 𝑥2 + 𝑎23 𝑥3 + 𝑎24 𝑥4 = 𝑏2 { 21 1 𝑎31 𝑥1 + 𝑎32 𝑥2 + 𝑎33 𝑥3 + 𝑎34 𝑥4 = 𝑏3 𝑎41 𝑥1 + 𝑎42 𝑥2 + 𝑎43 𝑥3 + 𝑎44 𝑥4 = 𝑏4 Алгоритм решения: 1 шаг. Важным условием для метода простой итерации в решении систем линейных уравнений является условие сходимости: |𝑎11 | > |𝑎12 | + |𝑎13 | + |𝑎14 | |𝑎22 | > |𝑎21 | + |𝑎23 | + |𝑎24 | |𝑎33 | > |𝑎31 | + |𝑎32 | + |𝑎34 | |𝑎44 | > |𝑎41 | + |𝑎42 | + |𝑎43 | Если все условия выполняются, строим матрицу А: 𝑎11 𝑎12 𝑎13 𝑎14 𝑎21 𝑎22 𝑎23 𝑎24 𝐴 = [𝑎 𝑎 𝑎 𝑎 ] 31 32 33 34 𝑎41 𝑎42 𝑎43 𝑎44 𝑥1 𝑥2 𝑥 =[…] 𝑥𝑛 𝑏1 𝑏 𝑏=[ 2] … 𝑏𝑛 2 шаг. Вычисление матрицы B. 𝑏11 𝑏12 𝑏13 𝑏14 𝑎𝑖𝑗 𝑏 𝑏 𝑏 𝑏 𝐵 = [ 21 22 23 24 ] , где 𝑏𝑖𝑗 = − , и 𝑏𝑖𝑖 = 0. 𝑏31 𝑏32 𝑏33 𝑏34 𝑎𝑖𝑖 𝑏41 𝑏42 𝑏43 𝑏44 3 шаг. Вычисляем вектор C С = (𝐶1 , 𝐶2 , 𝐶3 , 𝐶4 ), где 𝐶𝑖 = 𝑏𝑖 𝑎𝑖𝑖 4 шаг. Выбираем вектор 𝑋 0 𝑋 0 = (𝑥10 , 𝑥20 , 𝑥30 , 𝑥40 ) Есть два способа для выбора вектора 𝑋 0 𝑋 0 = (0, 0, 0, 0) 𝑋 0 = (𝐶1 , 𝐶2 , 𝐶3 , 𝐶4 ) 5 шаг. Выполнение итераций (выполнение итераций для метода простой итерации и метода Зейделя отличаются) 𝑋 1 = (𝑥11 , 𝑥21 , 𝑥31 , 𝑥41 ) Способ вычисления итераций для метода простой итерации: 𝑥11 = 𝑏11 ∗ 𝑥10 + 𝑏12 ∗ 𝑥20 + 𝑏13 ∗ 𝑥30 + 𝑏14 ∗ 𝑥40 + 𝐶1 𝑥21 = 𝑏21 ∗ 𝑥10 + 𝑏22 ∗ 𝑥20 + 𝑏23 ∗ 𝑥30 + 𝑏24 ∗ 𝑥40 + 𝐶2 𝑥31 = 𝑏31 ∗ 𝑥10 + 𝑏32 ∗ 𝑥20 + 𝑏33 ∗ 𝑥30 + 𝑏34 ∗ 𝑥40 + 𝐶3 𝑥41 = 𝑏41 ∗ 𝑥10 + 𝑏42 ∗ 𝑥20 + 𝑏43 ∗ 𝑥30 + 𝑏44 ∗ 𝑥40 + 𝐶4 Способ вычисления итераций для метода Зейделя: 𝑥11 = 𝑏11 ∗ 𝑥10 + 𝑏12 ∗ 𝑥20 + 𝑏13 ∗ 𝑥30 + 𝑏14 ∗ 𝑥40 + 𝐶1 𝑥21 = 𝑏21 ∗ 𝑥11 + 𝑏22 ∗ 𝑥20 + 𝑏23 ∗ 𝑥30 + 𝑏24 ∗ 𝑥40 + 𝐶2 𝑥31 = 𝑏31 ∗ 𝑥11 + 𝑏32 ∗ 𝑥21 + 𝑏33 ∗ 𝑥30 + 𝑏34 ∗ 𝑥40 + 𝐶3 𝑥41 = 𝑏41 ∗ 𝑥11 + 𝑏42 ∗ 𝑥21 + 𝑏43 ∗ 𝑥31 + 𝑏44 ∗ 𝑥40 + 𝐶4 Ход работы 2,951 ∗ 𝑥1 + 0,512 ∗ 𝑥2 + 0,128 ∗ 𝑥3 + 0,195 ∗ 𝑥4 = 0,159 0,203 ∗ 𝑥1 + 3,469 ∗ 𝑥2 + 0,572 ∗ 𝑥3 + 0,162 ∗ 𝑥4 = 0,280 { 0,256 ∗ 𝑥1 + 0,273 ∗ 𝑥2 + 2,994 ∗ 𝑥3 + 0,501 ∗ 𝑥4 = 0,134 0,381 ∗ 𝑥1 + 0,219 ∗ 𝑥2 + 0,176 ∗ 𝑥3 + 5,903 ∗ 𝑥4 = 0,864 (2 вариант) 1. Проверка условия сходимости. |2,951| > |0,512| + |0,128| + |0,195| − Условие выполнено |3,469| > |0,203| + |0,572| + |0,162| − Условие выполнено |2,994| > |0,256| + |0,273| + |0,501| − Условие выполнено |5,903| > |0,381| + |0,219| + |0,176| − Условие выполнено Условие сходимости выполняется, тогда составим матрицу A: 2,951 0,512 0,128 0,195 0,203 3,469 0,572 0,162 𝐴=[ ] 0,256 0,273 2,994 0,501 0,381 0,219 0,176 5,903 𝑥1 𝑥2 𝑥 =[𝑥 ] 3 𝑥4 0,159 0,280 𝑏=[ ] 0,134 0,864 2. Вычисление матрицы В. 0 − 0,198 − 0,049 − 0,075 𝑎𝑖𝑗 −0,058 0 − 0,164 − 0,046 𝐵=[ ] , где 𝑏𝑖𝑗 = − , и 𝑏𝑖𝑖 = 0 −0,086 − 0,091 0 − 0,167 𝑎𝑖𝑖 −0,065 − 0,037 − 0,030 0 3. Вычисление вектора C. 𝐶 = (0,061, 0,080, 0,045, 0,146), где 𝐶𝑖 = 𝑏𝑖 𝑎𝑖𝑖 Все вычисления выполнялись в программе Excel 4. Выбор начального значения 𝑿𝟎 . В качестве начального значения 𝑋 0 , возьмем значения вектора C: 𝑋 0 = (0,061, 0,080, 0,045, 0,146) 5. Выполнение итераций на языке С++ Консольное приложение #include <iostream> using namespace std; int main() { const int size = 4; float MAS_B[size][size] = {{0,-0.198,-0.049,-0.075},{-0.058,0,-0.164,-0.046},{0.086,-0.091,0,-0.167},{-0.065,-0.037,-0.030,0}}; // Матрица B float MAS_C[size] = { 0.061,0.080,0.045,0.146 }; // Вектор С float MAS_X0[size]= { 0.061,0.080,0.045,0.146 }; // Начальное значение X0 float* xn = new float[size]; // В xn буду записаны результаты вычислений float eps; float* E = new float[size]; cout << "Введите точность: "; cin >> eps; int counter = 0; // Переменная для подсчета количества итераций do { for (int i = 0; i < size; i++) { xn[i] = 0; // МЕТОД ПРОСТОЙ ИТЕРАЦИИ //for (int j = 0; j < size; j++) // xn[i] += MAS_B[i][j] * MAS_X0[j]; // МЕТОД ЗЕЙДЕЛЯ //for (int j = 0; j < i; j++) // xn[i] = xn[i] + MAS_B[i][j] * xn[j]; //for (int j = i; j < size; j++) // xn[i] = xn[i] + MAS_B[i][j] * MAS_X0[j]; xn[i] += MAS_C[i]; E[i] = abs(xn[i] - MAS_X0[i]); } float max = 0; for (int i = 0; i < size; i++) { if (max < E[i]) max = E[i]; MAS_X0[i] = xn[i]; } cout << endl << counter << " Итерация: " << endl; for (int i = 0; i < size; i++) cout << "x" << i + 1 << "=" << xn[i] << " " << endl; counter++; } while (max > eps); cout << endl << "Количество итераций: " << counter << endl; } Результат работы программы для метода простой итерации Результат работы программы для метода Зейделя Ответ: на выходе работы программы мы получили следующие приближения корней для системы линейных уравнений: 𝑥1 = 0,0362 𝑥 = 0,0695 − Методом простой итерации (Количество итераций: 4) { 2 𝑥3 = 0,0122 𝑥4 = 0,1408 𝑥1 = 0,0361 𝑥 = 0,0695 − Методом Зейделя (Количество итераций: 4) { 2 𝑥3 = 0,0121 𝑥4 = 0,1407 Вывод: в ходе лабораторной работы мною был изучен метод простой итерации и метод Зейделя для решения систем линейных уравнений. Данные методы позволяют нам достаточно легко найти решения системы.