cm2
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра безопасности информационных систем (КИБЭВС)
ЧИСЛЕННОЕ РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
Отчет по практической работе №2 по дисциплине¾Численные методы¿
Студент гр. 730-2 Подойницын К.В. 29.10.2021
Доцент каф.КИБЭВС Якимук А.Ю. 29.10.2021
Томск 2021
2
1 Введение
Цель работы: получить навыки работы с методами Зейде-
ля и Якоби, разработать программы, реализующие эти методы.
Составить отчет с помощью онлайн-редактора LaTeX.
Для тестирования использовать систему уравнений:
8
>
> 100x1 + 2x2 + 3x3 = 105;
>
>
<
x1 + 100x2 + 3x3 = 104;
>
>
>
> x1 + 2x2 + 100x3 = 103;
:
0 1
1
B C
решение x=B1C обоими методами должно быть достигнуто за
@ A
1
2-4 итерации (с точностью 0.001).
3
2 Ход работы
2.1 Преобразование систем
Для преобразования системы к виду:
8
>
> x1 = f1(x1; x2; x3);
>
>
<
x2 = f2(x1; x2; x3);
>
>
>
> x3 = f3(x1; x2; x3);
:
необходимо из данной системы выразить каждую неизвестную
переменную.
Для того, чтобы воспользоваться методами, необходимо преоб-
разовать индивидуальную систему:
8
>
> 9x1 + 2x2 3x3 = 400;
>
>
<
x1 + 9x2 3x3 = 300;
>
>
>
> 2x1 + 3x2 9x3 = 100;
:
Выраженные переменные индивидуальной системы:
8
>
> x1 = 40; 2002;
>
>
<
x2 = 31; 6593;
>
>
>
> x3 = 8; 3754;
:
4
2.2 Результат работы программы
Рисунок 1: Скриншот работы программы
Рисунок 2: Скриншот работы программы
Листинг программы представлен в Приложении А
5
2.3 Таблица результатов
Таблица 1 Результаты работы
|
Решение |
Начальная |
точка |
Число итераци |
|
|
|
|
|
Якоби |
40,1992; 31,6567; 8,377 |
400; 300; |
100 |
13 |
|
|
|
|
|
Зейдель |
40,2002; 31,6593; 8,3754 |
0; 0; 0 |
5 |
|
|
|
|
|
|
6
3Заключение
Входе выполнения данной лабораторной работы были получены навыки работы с методами Зейделя и Якоби.
7
Приложение А
(обязательное)
using System; namespace laba2_cm
{
class Program
{
static void Main(string[] args)
{
double[,] a = new double[4, 4]; double[] b = new double[4];
Console.WriteLine("Введите коэффициенты: "); for (int i = 1; i <= 3; i++)
{
for (int j = 1; j <= 3; j++)
{
Console.Write($" a{i}{j} = ");
a[i, j] = double.Parse(Console.ReadLine());
}
Console.WriteLine();
}
for (int i = 1; i <= 3; i++)
{
Console.Write($" b{i} = ");
b[i] = double.Parse(Console.ReadLine());
}
double y1 = -(a[1, 2] / a[1, 1]); double z1 = -(a[1, 3] / a[1, 1]); double f1 = b[1] / a[1, 1]; double x2 = -(a[2, 1] / a[2, 2]); double z2 = -(a[2, 3] / a[2, 2]);
8
double f2 = b[2] / a[2, 2]; double x3 = -(a[3, 1] / a[3, 3]); double y3 = -(a[3, 2] / a[3, 3]); double f3 = b[3] / a[3, 3]; double x, y = 0, z = 0, X, Y, Z; double A = 0, B = 0, C = 0;
int k = 0; do
{
X = A;
Y = B;
Z = C;
A = Math.Round((f1 + y * y1 + z * z1), 4); x = A;
B = Math.Round((f2 + x * x2 + z * z2), 4); y = B;
C = Math.Round((f3 + x * x3 + y * y3), 4); z = C;
k++;
}
while (Math.Abs(A - X) >= 0.01
||Math.Abs(B - Y) >= 0.01
||Math.Abs(C - Z) >= 0.01); Console.WriteLine("\nРешение по методу Зейделя: "); Console.WriteLine(A);
Console.WriteLine(B);
Console.WriteLine(C); Console.WriteLine($"\nКоличество итераций по методу Зейделя: {k}\n", k);
x = 0; y = 0; z = 0;
9
A = f1; B = f2; C = f3; k = 0;
while (Math.Abs(A - x) >= 0.01
||Math.Abs(B - y) >= 0.01
||Math.Abs(C - z) >= 0.01)
{
x = A; y = B; z = C;
A = Math.Round((f1 + y * y1 + z * z1), 4); B = Math.Round((f2 + x * x2 + z * z2), 4); C = Math.Round((f3 + x * x3 + y * y3), 4); k++;
}
Console.WriteLine("\nРешение по методу простых Итераций: " Console.WriteLine(A);
Console.WriteLine(B);
Console.WriteLine(C); Console.WriteLine($"\nКоличество итераций по методу простых Итераций: {k}\n", k);
}
}
}