6
3Заключение
Врезультате выполнения лабораторной работы были освоены приближенные методы вычисления (метод простых итераций и метод Зейделя ), а также закреплены навыки решения с помощью точных методов (метода Крамера).
Отчет оформлен в соответствии с ОС ТУСУР, в программном обеспечении LATEX.
7
Приложение А
(Обязательное)
Листинг кода программы для метода Крамера
using System;
namespace Метод_крамера
{
class Program
{
static void Main(string[] args)
{
double[,] a = new double[3, 4]; Console.WriteLine("Введите систему слева-направо"); for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
{
a[i, j] = double.Parse(Console.ReadLine());
}
double def_delta, def_delta_x, def_delta_y, def_delta_z;
def_delta = a[0, 0] * a[1, 1] * a[2, 2] + a[0, 1] * a[1, 2] * a[2, 0] + a[1, 0] * a[0, 2] * a[2, 1] - a[0, 2] * a[1, 1] * a[2, 0]
- a[0, 1] * a[1, 0] * a[2, 2] - a[0, 0] * a[2, 1] * a[1, 2]; def_delta_x = a[0, 3] * a[1, 1] * a[2, 2] + a[0, 1] * a[1, 2] * a[2, 3]
+a[1, 3] * a[0, 2] * a[2, 1] - a[0, 2] * a[1, 1] * a[2, 3] - a[0, 1] * a[1, 3] * a[2, 2] - a[0, 3] * a[2, 1] * a[1, 2];
def_delta_y = a[0, 0] * a[1, 3] * a[2, 2] + a[0, 3] * a[1, 2] * a[2, 0]
+a[1, 0] * a[0, 2] * a[2, 3] - a[0, 2] * a[1, 3] * a[2, 0]
- a[0, 3] * a[1, 0] * a[2, 2] - a[0, 0] * a[2, 3] * a[1, 2];
def_delta_z = a[0, 0] * a[1, 1] * a[2, 3] + a[0, 1] * a[1, 3] * a[2, 0] + a[1, 0] * a[0, 3] * a[2, 1] - a[0, 3] * a[1, 1] * a[2, 0]
- a[0, 1] * a[1, 0] * a[2, 3] - a[0, 0] * a[2, 1] * a[1, 3];
Console.WriteLine("Решение с помощью метода Крамера:");
Console.WriteLine("x1 =" + (def_delta_x / def_delta));
Console.WriteLine("x2 =" + (def_delta_y / def_delta));
Console.WriteLine("x3 =" + (def_delta_z / def_delta));
8
Приложение Б
(Обязательное)
Листинг кода программы для метода простых итераций
using System;
namespace Метод_простых_итераций
{
class Program
{
static void Main(string[] args)
{
double[,] N = new double[3, 4]; Console.WriteLine("Введите систему слева-направо"); for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
{
N[i, j] = double.Parse(Console.ReadLine());
}
double[,] M = new double[3, 4]
{
{1, -N[0,1]/N[0,0], -N[0,2]/N[0,0], N[0,3]/N[0,0]}, {-N[1,0]/N[1,1], 1, -N[1,2]/N[1,1], N[1,3]/N[1,1]},
{-N[2,0]/N[2,2], -N[2,1]/N[2,2], 1, N[2,3]/N[2,2]}
};
double x_new = N[0, 3], y_new = N[1, 3], z_new = N[2, 3], x = 0, y = 0, z = 0; int count = 0;
while ((Math.Abs(x_new - x) >= 0.01) & (Math.Abs(y_new - y) >= 0.01) & (Math.Abs(z_new - z) >= 0.01))
{
x = x_new; y = y_new; z = z_new;
x_new = (M[0, 1] * y + M[0, 2] * z + M[0, 3]); y_new = (M[1, 0] * x + M[1, 2] * z + M[1, 3]); z_new = (M[2, 0] * x + M[2, 1] * y + M[2, 3]);
count++;
}
Console.WriteLine("Решение методом простых итераций:");
Console.WriteLine($"x = {x_new}");
Console.WriteLine($"y = {y_new}");
Console.WriteLine($"z = {z_new}");
Console.WriteLine($"Количество итераций {count}");
}
}
}
9
Приложение В
(Обязательное) Листинг кода для метода Зейделя
using System;
namespace Метод_Зеделя
{
class Program
{
static void Main(string[] args)
{
double[,] N = new double[3, 4]; Console.WriteLine("Введите систему слева-направо"); for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
{
N[i, j] = double.Parse(Console.ReadLine());
}
double[,] M = new double[3, 4]
{
{1, -N[0,1]/N[0,0], -N[0,2]/N[0,0], N[0,3]/N[0,0]}, {-N[1,0]/N[1,1], 1, -N[1,2]/N[1,1], N[1,3]/N[1,1]},
{-N[2,0]/N[2,2], -N[2,1]/N[2,2], 1, N[2,3]/N[2,2]}
};
double x = 1, y = 1, z = 1, x_new = 0, y_new = 0, z_new = 0; int count = 0;
while ((Math.Abs(x_new - x) >= 0.01) || (Math.Abs(y_new - y) >= 0.01) || (Math.Abs(z_new - z) >= 0.01))
{
x = x_new; y = y_new; z = z_new;
x_new = (M[0, 1] * y + M[0, 2] * z + M[0, 3]); y_new = (M[1, 0] * x_new + M[1, 2] * z + M[1, 3]);
z_new = (M[2, 0] * x_new + M[2, 1] * y_new + M[2, 3]);
count++;
}
Console.WriteLine("Решение методом Зеделя:");
10
Console.WriteLine($"x = {x_new}"); Console.WriteLine($"y = {y_new}"); Console.WriteLine($"z = {z_new}"); Console.WriteLine($"Количество итераций {count}");
}
}
}