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

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

.pdf
Скачиваний:
6
Добавлен:
27.11.2022
Размер:
587.4 Кб
Скачать

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

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

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

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

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

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

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

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

__________ Батаев А.С. 28.10.2022

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

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

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

Томск 2022

2

Оглавление

1

Введение................................................................................................................

3

2

Ход работы ...........................................................................................................

4

 

2.1

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

4

 

2.2

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

5

 

2.3

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

5

3

Заключение...........................................................................................................

6

3

1 Введение

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

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

x2 + 4x − 5 = 0

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

2x + 4

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

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

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

4

2 Ход работы

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

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

Индивидуальная функция:

0.13x2 + 0.28x + 0.1;

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

0.26x + 0.28;

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

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

LastPoint.

5

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

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

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

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

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

Метод

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

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

Корень

 

 

 

 

Дихотомии

-1

13

-0,4525

 

 

 

 

Ньютона

-1

4

-0,4482

 

 

 

 

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

-1

18

-0,4585

 

 

 

 

6

3Заключение

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

7

Приложение 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");

8

}

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);

}

}

}

}

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