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

2 лаба численые методы

.pdf
Скачиваний:
3
Добавлен:
01.12.2023
Размер:
566.21 Кб
Скачать

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

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

Кафедра комплексной информационной безопасности электронно-

вычислительных систем (КИБЭВС)

Численное решение нелинейного уравнения с одной переменной Отчет по лабораторной работе №2

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

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

_______ Е. П. Толстолес

_______

Принял:

Ст. преподаватель кафедры КИБЕВС

_______ А. Ю. Якимук

_______

Томск 2022

1 Задание

Разработать программу, реализующую методы: Дихотомии, Ньютона,

Секущих и

Простых итераций. Найти решение индивидуального уравнения с помощью полученной программы.

Вотчете для методов:

1)указать и объяснить используемую формулу;

2)привести код программы (C++, C#, Python, Sage);

3)скрины работы программы;

2

2 Ход выполнения работы

2.1 Отделение корня

Рассмотрим функцию F(x) = 1,45х2 + 7х + 4,7 и ее производную F’(x) = 2,9x+7. Найдем точки перегиба, то есть точки, где производная функции

F’(x) = 0. Точка перегиба x = 2,413. Тогда область определения можно разбить на два интервала: (-∞; x], [x;∞). Сузим интервал поиска. Для этого методом перебора будем искать такой x1, что F(x) * F(x1) < 0. Такой интервал будет содержать хотя бы один действительный корень. Возьмем конечный интервал

- [-4;2].

2.2 Метод Дихотомии

Суть метода заключается в следующем. Допустим, что на первом этапе найден отрезок [a,b], на котором есть единственный корень уравнения F(x) = 0. В качестве начальной точки возьмем середину отрезка c0 = (a+b)/2. Далее исследуем значение f(x) на концах отрезков [a, c] и [c, b], то есть в точках a, c, b. Тот отрезок, на концах которого функция принимает значения разных знаков, содержит искомый корень. Этот отрезок принимается

в качестве нового.

2.3 Метод Ньютона

Для начала нужно провести касательную к кривой F(x) в одной из границ отрезка

3

( )

[a,b], где есть один корень - это будет начальная точка. Затем нужно найти точку пересечения касательной с осью OX. Эта точка будет первым приближением для искомого корня. Далее по итерационной формуле х+1 =

( )

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

Суть метода состоит в замене исходного уравнения эквивалентному ему вида x = φ(x) и построением последовательности с помощью итерационной формулы +1= φ(x).

2.6Результаты работы программы

Втаблице 2.1 представлены данные полученные опытным путём в результате работы программы.

Таблица 2.6.1 - Результаты работы

 

Решение

 

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

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

 

 

 

 

 

Метод

-0.8047

 

a=-4

10

Дихотомии

 

 

b=2

 

 

 

 

 

 

Метод Ньютона

-0.806

 

a=-4

3

 

 

 

b=2

 

 

 

 

 

 

Метод простых

Бесконечность

 

a=-4

12

итераций

 

 

b=2

 

 

 

 

 

 

 

 

4

 

На рисунке 2.1 представлен результат работы программы.

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

5

3Заключение

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

реализующая методы: Дихотомии, Ньютона и простых итераций.

Отчет был составлен согласно ОС ТУСУР 2021.

6

Приложение А

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

Листинг программы

using System;

using System.IO.Pipes;

using System.Security.Cryptography.X509Certificates;

namespace laba_2

{

class Program

{

static void Main(string[] args)

{

double a = -4; double b = 2;

double epsilon = 0.01; //допустимая погрешность b = FindIntervals(a);

if (a == b)

{

Console.WriteLine("Корней нет");

}

else

7

{

if (b < a)

(a, b) = (b, a);

//Вычисления разными методами

MethodDichotomyCalculation(a, b, epsilon); MethodNewtonCalculation(a, b, epsilon); MethodSimpleIterationsCalculation(a, b, epsilon);

}

}

///<summary>

///Находит вторую границу интервала

///</summary>

///<param name="x0">Точка перегиба</param>

///<returns>Значение второй точки интервала</returns>

private static double FindIntervals(double x0)

{

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

{

if (Fx(x0) * Fx(i) < 0)

{

8

return i;

}

else x0++;

}

return x0;

}

///<summary>

///Вычисляет значение функции для заданного x

///</summary>

///<param name="x">Заданное значение</param>

///<returns>Значение функции F(x)</returns> static double Fx(double x)

{

return 1.45*x*x+7*x+4.7;

}

///<summary>

///Вычисляет производную функции для заданного x

///</summary>

///<param name="x">Заданное значение</param>

///<returns>Производная функции F’(x)</returns>

static double FxDerivative(double x)

{

9

double f = 2.9*x+7; return f;

}

///<summary>

///Вычисляет значение x = phi(x);

///</summary>

///<param name="x">Заданное значение x</param>

///<param name="l">Заданная лямбда</param>

///<returns>Значение phi(x)</returns>

static double P(double x, double l)

{

return Fx(x) * l + x;

}

///<summary>

///Вычисляет корень методом дихотомии

///</summary>

///<param name="a">Начальная граница интервала</param>

///<param name="b">Конечная граница интервала</param>

///<param name="epsilon">Допустимая погрешность</param>

static void MethodDichotomyCalculation(double a, double b, double epsilon)

10