Лабораторная работа №1
.pdfЗаключение
В ходе выполнения лабораторной работы были освоены методы решения систем линейных алгебраических уравнений и решения нелинейных уравнений с одной переменной.
Отчет был написан согласно ОС ТУСУР 01-2021.
11
Приложение А
using System; namespace zeidl
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Метод Зейделя "); int n = 3;
double[,] coef = new double[3, 3] { { -16.7, -9.78, -3.07 }, { -9.12, - 15.22, -5.4 }, { -3.07, 7.69, -11.1 } };
double[] answer = new double[3] { -1.73, 6.27, 1.75 }; 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(coef[i, j] + "\t");
}
Console.Write(" | " + answer[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] = answer[0] / coef[0, 0] - (X[1] * coef[0, 1]) / coef[0, 0] - (X[2] * coef[0, 2]) / coef[0, 0];
XAdd[1] = answer[1] / coef[1, 1] - (XAdd[0] * coef[1, 0]) / coef[1, 1] - (X[2] * coef[1, 2] / coef[1, 1]);
XAdd[2] = answer[2] / coef[2, 2] - (XAdd[0] * coef[2, 0]) / coef[2, 2] - (XAdd[1] * coef[2, 1]) / coef[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+1} = {XAdd[i]}");
}
Console.WriteLine($"Итерачии {iteracionale}");
}
}
}
12
Приложение Б
using System;
namespace chislmethods3
{
class Program
{
static double Function1(double x) // Функчия, возвращающая знацение функчии
F(x)
{
return 0.36 * x * x + 0.52 * x + 0.11;
}
static double Function2(double x) // Функчия, возвращающая знацение производной функчии F'(x)
{
return 0.72 * x + 0.52;
}
static double Function3(double x, double l) // Функчия, возвращающая знацение функчии-помощника для метода простых итерачий
{
return Function1(x) * l + x;
}
private static double Function4(double lastpoint) // Функчия для нахождения последней тоцки, где функчия меняет знак
{
for (double i = lastpoint; i <= Math.PI; i++)
{
if (Function1(lastpoint) * Function1(i) < 0)
{
return i;
}
else lastpoint++;
}
return lastpoint;
}
static void MethodNewton(double firstpoint, double lastpoint) // Метод
Ньютона
{
int iteracionale = 0;
double medium = (firstpoint + lastpoint) / 2; if (Math.Abs(Function1(medium)) >= 0.001)
{
while (Math.Abs(Function1(medium)) >= 0.001)
{
medium = medium - Function1(medium) / Function2(medium); iteracionale++;
}
}
else
{
iteracionale++;
}
Console.WriteLine("Метод Ньютона"); Console.WriteLine($"Итерачии: {iteracionale}"); Console.WriteLine($"x: {Math.Round(medium, 4)}\n");
}
static void SimpleIterations(double firstpoint, double lastpoint) // Метод простых итерачий
{
double x0, l, x; x0 = lastpoint;
l = -2 / Function2(x0); int step = 0;
do
13
{
x = x0;
x0 = Function3(x, l); step++;
}
while (Math.Abs(x0 - x) > 0.001); Console.WriteLine("Метод простых итерачий"); Console.WriteLine($"Итерачии: {step}"); Console.WriteLine($"x: {Math.Round(x0, 4)}\n");
}
static void Main(string[] args) // Главная функчия программы
{
double firstpoint = -1, lastpoint; lastpoint = Function4(firstpoint); if (firstpoint == lastpoint)
{
Console.WriteLine("У уравнения нет корней");
}
else
{
if (lastpoint < firstpoint)
{
(firstpoint, lastpoint) = (lastpoint, firstpoint);
}
MethodNewton(firstpoint, lastpoint); SimpleIterations(firstpoint, lastpoint);
}
}
}
}
14
