
Лаба 1 - Численное решение СЛАУ - СФ
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕЕНЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронно-
вычислительных систем (КИБЭВС)
Итерационные методы решения СЛАУ Отчет по лабораторной работе №1 По дисциплине «Численные методы»
Студент гр. Ххх-хх
________ Х. Х. Хххх
________
Принял Старший преподаватель КИБЭВС
________ Х. Х. Хххх
________
Томск 2022

1 Введение
Целью данной лабораторной работы является разработка программ,
реализующих метод простых итераций и метод Зейделя и нахождение решения индивидуальной системы уравнений с помощью полученных программ. На рисунке 1.1 представлена индивидуальная система уравнений.
Рисунок 1.1 - Индивидуальная система уравнений
2

2 Ход работы
Для решения задачи были написаны две программы. В обоих используется
два массива для X. Один массив реализует переменные X на прошлой итерации,
авторой на текущей, массив X и массив XAdd соответственно.
2.1Решение методом простых итераций
Вданном методе в системе уравнений используются переменные прошлых итераций, а также начальное условие для неизвестных будет равно свободным членам. При преобразовании уравнений в каждом последующем уравнений выражается следующая неизвестная, начиная с X1. На рисунке 2.1 приведено преобразование уравнений.
Рисунок 2.1 - Преобразование уравнений в методе Якоби
На рисунке 2.2 представлено решение индивидуальной системы уравнений.
3

Рисунок 2.2 – Результат работы программы методом Якоби
Листинг программы приведен в приложении А.
2.2Решение методом Зейделя
Вданном методе для решения СЛАУ используются переменные, которые посчитаны в предущих уравениях при выполнений одной итерации, а также начальное условие будет равно нулю. При преобразовании уравнений текущая неизвестная отсутствует в уравнении, на рисунке 2.3 показано преобразование уравнений.
4

Рисунок 2.3 - Преобразование уравнений в методе Зейделя
На рисунке 2.4 приведено решение индивидуальной системы уравнений.
Рисунок 2.4 - Результат работы программы методом Зейделя
Листинг программы приведен в приложении Б.
5
2.3Сравнительная таблица
Втаблице 1 представлено сравнение методов Якоби и Зейделя.
Таблица 1 – Сравнение методов
|
Решение |
Начальная точка |
Число итераций |
Метод простых итераций |
0,6218; |
-9,1; |
15 |
|
-0,2864; |
5,19; |
|
|
0,2890 |
-3,09 |
|
Метод Зейделя |
0,6218; |
0; |
5 |
|
-0,2866; |
0; |
|
|
0,2896 |
0 |
|
6
3Заключение
Входе данной лабораторной работы были созданы две программы для решения систем линейных алгебраических уравнений. Первая программа решала системы линейных алгебраических уравнений методом простых итераций, а
вторая решала методом Зейделя. Вследвие чего были получены навыки работы с итерационными метода рещения систем линейных алгебраических уравнений –
метод Зейделя и метод простых итераций.
7
Приложение А
(обязательное)
Метод простых итераций
using System;
namespace m41
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Метод Якоби "); int n = 3;
double[,] A = new double[3, 3] { { -15.39, 2.34, 3.94 }, { 4.1, -6.96, 2.23 }, { -2.3, -7.04, -12.7 } };
double[] B = new double[3] { -9.1, 5.19, -3.09 }; double[] X = new double[n];
double[] XAdd = new double[n]; Console.WriteLine();
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
Console.Write(A[i, j] + "\t");
}
Console.Write(" | " + B[i] + "\t"); Console.WriteLine();
}
for (int i = 0; i < n; i++)
{
XAdd[i] = B[i];
}
int iteracionale = 0; double Eps = 0.001; do
{
for (int i = 0; i < n; i++)
{
X[i] = XAdd[i];
}
XAdd[0] = B[0] / A[0, 0] - (X[1] * A[0, 1]) / A[0, 0] - (X[2] * A [0,
2])/ A[0, 0];
XAdd[1] = B[1] / A[1, 1] - (X[0] * A[1, 0]) / A[1, 1] - (X[2] * A[1,
2] / A[1, 1]);
XAdd[2] = B[2] / A[2, 2] - (X[0] * A[2, 0]) / A[2, 2] - (X[1] * A[2,
1]) / A[2, 2];
iteracionale++;
} while (Math.Abs(XAdd[0] - X[0]) >= Eps || Math.Abs(XAdd[1] - X[1]) >= Eps || Math.Abs(XAdd[2] - X[2]) >= Eps);
Console.WriteLine();
for (int i = 0; i < n; i++)
{
Console.WriteLine($"X{i} = {XAdd[i]}");
}
Console.WriteLine($"Итерации {iteracionale}");
}
}
}
8
Приложение Б
(обязательное)
Метод Зейделя
using System; namespace E3ND3Lb
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Метод Зейделя "); int n = 3;
double[,] A = new double[3, 3] { {-15.39, 2.34, 3.94 }, {4.1,-6.96, 2.23 }, {-2.3, -7.04,-12.7 } };
double[] B = new double[3] {-9.1,5.19,-3.09};
double[] X = new double[n]; double[] XAdd = new double[n]; Console.WriteLine();
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
Console.Write(A[i, j] + "\t");
}
Console.Write(" | " + B[i] + "\t"); Console.WriteLine();
}
for (int i = 0; i < n; i++)
{
XAdd[i] = 0;
}
int iteracionale = 0; double Eps = 0.001; do
{
for (int i = 0; i < n; i++)
{
X[i] = XAdd[i];
}
XAdd[0] = B[0] / A[0, 0] - (X[1] * A[0, 1]) / A[0, 0] - (X[2] * A[0,
2]) / A[0, 0];
XAdd[1] = B[1] / A[1, 1] - (XAdd[0] * A[1, 0]) / A[1, 1] - (X[2] * A[1, 2] / A[1, 1]);
XAdd[2] = B[2] / A[2, 2] - (XAdd[0] * A[2, 0]) / A[2, 2] - (XAdd[1] * A[2, 1]) / A[2, 2];
iteracionale++;
} while (Math.Abs(XAdd[0] - X[0]) >= Eps || Math.Abs(XAdd[1] - X[1]) >= Eps || Math.Abs(XAdd[2] - X[2]) >= Eps);
Console.WriteLine();
for (int i = 0; i < n; i++)
{
Console.WriteLine($"X{i} = {XAdd[i]}");
}
Console.WriteLine($"Итерации {iteracionale}");
}
}
}
9