ЧислМетодЛаб1
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Факультет безопасности (ФБ)
Кафедра безопасности информационных систем (БИС)
ЧИСЛЕННОЕ РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
Отчѐт по лабораторной работе №1
по дисциплине «Численные методы»
Студент гр.731-2
__________ Батаев А.С. 18.10.2022
Руководитель: Доцент кафедры КИБЭВС
__________ __________ Якимук А.Ю. 18.10.2022
Томск 2022
|
|
2 |
|
|
|
Оглавление |
|
1 |
Введение................................................................................................................................ |
3 |
|
2 |
Ход работы ........................................................................................................................... |
4 |
|
|
2.1 |
Пример системы уравнений ....................................................................... |
4 |
|
2.2 |
Индивидуальный вариант .......................................................................... |
6 |
3 |
Заключение .......................................................................................................... |
8 |
|
Приложение ............................................................................................................ |
9 |
3
1 Введение
Целью работы является разработка программы, реализующий метод простых итераций и метод Зейделя. Необходимо найти решение индивидуальной системы уравнений с помощью полученных программ.
Вариант:
Рисунок 1.1 – Вариант
4
2 Ход работы
2.1 Пример системы уравнений
Перед решением своего варианта программы нужно протестировать пример.
Для тестирования использовать систему уравнений (рис.2.1):
Рисунок 2.1 – Пример системы уравнений Из каждого уравнения были выражены x1, x2, x3:
x1 = (-2 * x2 - 3 * x3 + 105) / 100;
x2 = (-x1 - 3 * x3 +104) / 100;
x3 = (-x1 - 2 * x2 + 103) / 100.
На рисунке 2.2 представлена работа программы примера для метода
простых итераций:
Рисунок 2.2 – Работа программы, пример (метод простых итераций)
5
На рисунке 2.2 представлена работа программы примера для метода Зейделя:
Рисунок 2.3 – Работа программы, пример (метод Зейделя)
2.2 Индивидуальный вариант
На рисунке 2.4 представлен индивидуальный вариант.
|
Рисунок 2.4 – Индивидуальный вариант |
Из каждого уравнения были выражены x1, x2, x3: |
|
|
; |
|
; |
|
. |
На рисунке |
2.5 представлена работа программы индивидуального |
варианта для метода простых итераций:
6
Рисунок 2.5 – Работа программы, индивидуальный вариант (метод простых итераций)
На рисунке 2.6 представлена работа программы индивидуального варианта для метода Зейделя:
Рисунок 2.6 – Работа программы, индивидуальный вариант (метод Зейделя)
7
Таблица 1 - Данные
|
Решение |
Начальная точка |
Число итераций |
||
|
|
|
|
|
|
Метод простых |
[0,4566 |
[(-1,79 |
/ -12,5), |
|
|
0,9175 |
(-5,89 |
/ -7,37), |
15 |
||
итераций |
|||||
-0,5447] |
(-2,21 / -10.54)] |
|
|||
|
|
||||
|
|
|
|
|
|
|
[0,4563 |
|
|
|
|
Метод Зейделя |
0,9176 |
[0, 0, 0] |
12 |
||
|
-0,5448] |
|
|
|
|
|
|
|
|
|
8
3Заключение
Входе данной работы были приобретены навыки работы с методом простых итераций и методом Зейделя.
По итогу выполнения, оба метода были одинаково трудозатратными.
9
Приложение A
(Обязательное)
Код приложения
namespace chm1
{
class Program
{
static double x1test(double x2, double x3)
{
double x1 = (-2 * x2 - 3 * x3 + 105) / 100; return x1;
}
static double x2test(double x1, double x3)
{
double x2 = (-x1 - 3 * x3 + 104) / 100; return x2;
}
static double x3test(double x1, double x2)
{
double x3 = (-x1 - 2 * x2 + 103) / 100; return x3;
}
static double x1task(double x2, double x3)
{
double x1 = (+0.18 * x2 + 7.49 * x3 - 1.79) / -12.5; return x1;
}
static double x2task(double x1, double x3)
{
double x2 = (-2.7 * x1 - 0.66 * x3 - 5.89) / -7.37; return x2;
}
static double x3task(double x1, double x2)
{
double x3 = (-0.41 * x1 + 8.87 * x2 - 2.21) / -10.54; return x3;
}
static void Main(string[] args)
{
10
bool stop = false; int step = 0;
double[,] system = new double[3, 4]; double[,] x1 = new double[3, 1]; double acc;
double maxd, maxdp = 0, k, sum_kv = 0; int i, j;
double[] B, d; double[,] A; int n = 3;
B = new double[n]; d = new double[n];
A = new double[n, n];
Console.WriteLine("1 - Simple iteration method 2 - Seidel method"); switch (int.Parse(Console.ReadLine()))
{
case 1:
Console.WriteLine("1 - test 2 - task"); switch (int.Parse(Console.ReadLine()))
{
case 1:
acc = Math.Pow(10, -5); Console.WriteLine("100*x1 + 2*x2 + 3*x3 = 105"); Console.WriteLine("1*x1 + 100*x2 + 3*x3 = 104"); Console.WriteLine("1*x1 + 2*x2 + 100*x3 = 103"); system = new double[3, 4] {
{100, 2, 3, 105 },
{1, 100, 3, 104 },
{1, 2, 100, 103 } };
x1 = new double[3, 1] { { system[0, 3] / system[0, 0] }, { system[1, 3] / system[1, 1] }, { system[2, 3] / system[2, 2] } };
do
{
step++;
double[,] x2 = new double[3, 1]; x2[0, 0] = x1test(x1[1, 0], x1[2, 0]); x2[1, 0] = x2test(x1[0, 0], x1[2, 0]); x2[2, 0] = x3test(x1[0, 0], x1[1, 0]);
if (Math.Abs((x2[0, 0] - x1[0, 0])) < acc || Math.Abs((x2[1, 0] - x1[1, 0])) < acc || Math.Abs((x2[2, 0] - x1[2, 0])) < acc)
stop = true; x1[0, 0] = x2[0, 0]; x1[1, 0] = x2[1, 0];