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

ЧислМетодЛаб2

.docx
Скачиваний:
9
Добавлен:
27.11.2022
Размер:
91.24 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Факультет безопасности (ФБ)

Кафедра безопасности информационных систем (БИС)

ЧИСЛЕННОЕ РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ

Отчёт по лабораторной работе 2

по дисциплине «Численные методы»

Студент гр.731-2

__________ Батаев А.С.

28.10.2022

Руководитель:

Доцент кафедры КИБЭВС

__________ __________ Якимук А.Ю.

28.10.2022

Томск 2022

Оглавление

Y

1 Введение 3

После была экспериментально вычислена начальная граница промежутка. Для тестовой системы начальной точкой была выбрана точка со значением 0, потому что при этом значении количество итераций всех методов минимально. 3

2 Ход работы 4

2.1 Этап отделения 4

Производная функции: 4

Также была экспериментально вычислена начальная граница промежутка. Для тестовой системы начальной точкой была выбрана точка с значением -1, потому что при этом значении количество итераций всех методов минимально. 4

2.2 Нахождение корня 5

Листинг программы представлен в Приложении А. 5

2.3 Таблица результатов 5

3 Заключение 6

1 Введение

Цель работы: получить навыки решения нелинейного уравнения с одной переменной методом ньютона, простых итераций и методом дихотомии.

Для тестирования использовать систему уравнений:

x2 + 4x 5 = 0

Найдем производную функции:

2x + 4

После была экспериментально вычислена начальная граница промежутка. Для тестовой системы начальной точкой была выбрана точка со значением 0, потому что при этом значении количество итераций всех методов минимально.

Рисунок 1 – Работа программы с тестовой системой

Решения: x1 = 5; x2 = 1.

2 Ход работы

2.1 Этап отделения

Первым шагом была найдена производная индивидуальной функции. Индивидуальная функция:

0.13x2 + 0.28x + 0.1;

Производная функции:

0.26x + 0.28;

Также была экспериментально вычислена начальная граница промежутка. Для тестовой системы начальной точкой была выбрана точка с значением -1, потому что при этом значении количество итераций всех методов минимально.

Конечная граница интервала была найдена программным методом LastPoint.

2.2 Нахождение корня

Листинг программы представлен в Приложении А.

Рисунок 2 – Работа программы с реальной системой

2.3 Таблица результатов

Таблица 1 – Значения корней

Метод

Начальная точка

Число итераций

Корень

Дихотомии

-1

13

-0,4525

Ньютона

-1

4

-0,4482

Простых итераций

-1

18

-0,4585

3 Заключение

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

Приложение A

(Обязательное)

Код приложения

using System;

namespace chislmethods3

{

class Program

{

static double Function(double x)

{

return 0.13 * x * x + 0.28 * x + 0.1;

}

static double FunctionDerivative(double x)

{

return 0.13 * x + 0.28;

}

static double SupportFunction(double x, double l)

{

return Function(x) * l + x;

}

private static double LastPoint(double lastpont)

{

for (double i = lastpont; i <= Math.PI; i++)

{

if (Function(lastpont) * Function(i) < 0)

{

return i;

}

else lastpont++;

}

return lastpont;

}

static void MethodDichotomy(double firstpoint, double lastpoint)

{

int step = 0;

double x = 0;

double medium = (firstpoint + lastpoint) / 2;

while (lastpoint - firstpoint > 0.001 || Function(medium) > 0.001)

{

medium = (firstpoint + lastpoint) / 2;

if (Function(lastpoint) * Function(medium) < 0)

{

firstpoint = medium;

x = Math.Round(firstpoint, 4);

step++;

}

else

{

lastpoint = medium;

x = Math.Round(lastpoint, 4);

step++;

}

}

Console.WriteLine("Method Dichotomy");

Console.WriteLine($"step: {step}");

Console.WriteLine($"x: {x}\n");

}

static void MethodNewton(double firstpoint, double lastpoint)

{

int step = 0;

double medium = (firstpoint + lastpoint) / 2;

if (Math.Abs(Function(medium)) >= 0.001)

{

while (Math.Abs(Function(medium)) >= 0.001)

{

medium = medium - Function(medium) / FunctionDerivative(medium);

step++;

}

}

else

{

step++;

}

Console.WriteLine("Method Newton");

Console.WriteLine($"step: {step}");

Console.WriteLine($"x: {Math.Round(medium, 4)}\n");

}

static void SimpleIterations(double firstpoint, double lastpoint)

{

double x0, l, x;

x0 = lastpoint;

l = -2 / FunctionDerivative(x0);

int step = 0;

do

{

x = x0;

x0 = SupportFunction(x, l);

step++;

}

while (Math.Abs(x0 - x) > 0.001);

Console.WriteLine("Simple Iterations");

Console.WriteLine($"step: {step}");

Console.WriteLine($"x: {Math.Round(x0, 4)}\n");

}

static void Main(string[] args)

{

double firstpoint = -1, lastpoint;

lastpoint = LastPoint(firstpoint);

if (firstpoint == lastpoint)

{

Console.WriteLine("The equation has no roots");

}

else

{

if (lastpoint < firstpoint)

(firstpoint, lastpoint) = (lastpoint, firstpoint);

MethodDichotomy(firstpoint, lastpoint);

MethodNewton(firstpoint, lastpoint);

SimpleIterations(firstpoint, lastpoint);

}

}

}

}

Соседние файлы в предмете Численные методы