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

Лабораторная работа №1

.pdf
Скачиваний:
8
Добавлен:
24.01.2025
Размер:
785.78 Кб
Скачать

Заключение

В ходе выполнения лабораторной работы были освоены методы решения систем линейных алгебраических уравнений и решения нелинейных уравнений с одной переменной.

Отчет был написан согласно ОС ТУСУР 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