Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 1 - Численное решение СЛАУ - СФ

.pdf
Скачиваний:
18
Добавлен:
06.11.2022
Размер:
255.15 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕЕНЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронно-

вычислительных систем (КИБЭВС)

Итерационные методы решения СЛАУ Отчет по лабораторной работе №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