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

ЧМ3

.pdf
Скачиваний:
2
Добавлен:
29.06.2023
Размер:
183.29 Кб
Скачать

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

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

Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

Решение нелинейного уравнения с одной переменной

Отчет по лабораторной работе №3 по дисциплине "Численные методы"

Студент гр. 739-1 Климанов М.Д.

. .2020

Ст. преподаватель кафедры КИБЭВС Якимук А.Ю.

. .2020

Томск 2020

2

1Введение

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

Задание:Необходимо найти корни индивидуального уравнения вида f(x) = 0 в два этапа – отделе-

ние и уточнение корня:

1.Этап отделения корня – выполнить с помощью графического анализа или анализа поведения производной функции.Нужно получить в результате хотя бы один отрезок [a b;], на котором функция монотонна и имеет ровно один корень, и выписать в отчет полученные границы отрезка.

2.Этап уточнения корня – составить программу, выполняющую уточнение корня четырьмя способами (Метод дихотомии,метод Ньютона, метод секущих, метод простых итераций).

Индивидуальное задание:

xe x + sin3x + 5 = 0

3

2Ход работы

Для выполнения практической работы был выбран язык программирования C#. На рисунке 2.1 представлен график функции, согласно индивидуальному заданию.

Рисунок 2.1 - График заданной функции

По графику видно, что в точках -1,42 и 5,17 находятся решение данного уравнения. Для вычислений будем использовать точку -1,42, исходя из этого, зададим интервал [a,b]. За a возьмем точку -1,4, а за b - точку -1,5.

Далее, реализуем метод дихотомии, используя взятый интервал.

Листинг программы в которой реализован метод дихотомии на языке C# представлена в приложении А.

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

Рисунок 2.2 - Результат работы программы "Метод дихометрии"

Суть метода заключается в вычислении каждого последующего приближения по формуле x=(left+right)/2, где left - это левая граница интервала, а right - правая граница интервала. Далее, если заданная функция от х больше нуля, то присваивается значению конца отрезка значение х, иначе значению начала интервала присваиваевается значение х. Этот процесс повторяется, пока не выполнится условие останова.

Далее реализуем метод Ньютона.

Листинг программы в которой реализован метод Ньютона на языке C# представлен в приложении

А.

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

Рисунок 2.3 - Результат работы программы "Метод Ньютона"

4

Суть метода заключается в вычислении каждого последующего приближения с помощью деления основной функции на её производную.Процесс происходит до тех пор, пока не выполнится условие останова.

Далее реализуем метод секущих.

Листинг программы в которой реализован метод секущих на языке C# представлен в приложении

А.

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

Рисунок 2.4 - Результат работы программы "Метод секущих"

Суть метода заключается в вычислении каждого последующего приближения по формуле right = right - (right - left) / (F(right) - F(left)) * F(right). Процесс происходит до тех пор, пока не выполнится условие останова.

Далее реализуем метод простых итераций.

Листинг программы в которой реализован метод простых итераций на языке C# представлен в приложении А.

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

Рисунок 2.5 - Результат работы программы "Метод простых итераций"

Суть метода заключается в вычислении каждого последующего приближения c помощью начального преобразования функции. Выражается x из начального уравнения и используется получившееся выражение для дальнейшей работы. Характер сходимости и сам факт сходимости метода зависит от выбора начального приближения решения.

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

5

Таблица 2.1 - Результаты применения каждого метода

 

 

Решение

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

Число

 

 

 

 

итераций

 

 

 

 

 

Метод

ди-

-1,4

x0=-1,4

20000

хотомии

 

 

 

 

 

 

 

 

Метод

 

-2,67931998410326

x0=-1,4

13

Ньютона

 

 

 

 

 

 

 

 

Метод

cе-

-2,69989436939846

x0=-1,5,x1=-1,4

5

кущих

 

 

 

 

 

 

 

 

 

Метод

 

-2.6801

x0=-1,4

4

простых

 

 

 

итераций

 

 

 

 

 

 

 

 

6

3Заключение

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

Отчет написан согласно ОС ТУСУР.

7

Приложение А

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

Исходный код программы

using System;

namespace Чм_3

{

class Program

{

static void Main(string[] args)

{

double left, right, eps; //границы интервала left = -1,4;

right = -1,5; //точность eps = 0.01;

Console.WriteLine($"Точность: {eps}");

Console.WriteLine("Метод дихотомии:");

Dihotomiya(left, right, eps);

Console.WriteLine("Метод Ньютона:");

Newton(left, right, eps);

Console.WriteLine("Метод секущих:");

Secu(left, right, eps);

Console.WriteLine("Метод простых итераций:");

Iter(left, right, eps);

}

//функция, в которой будет исходное уравнение public static double F(double x)

{

return -Math.Pow(2,-x) + 10 - 0.5 * Math.Pow(x,2);

}

//произодная

public static double FPr(double x)

{

return x + Math.Pow(2,-x) + Math.Log(2);

}

//Метод дихотомии

public static void Dihotomiya(double left, double right, double eps)

{

double x, f; int iter = 0;

8

Console.WriteLine($"Начало интервала = {left}, Конец интервала = {right}"); do

{

x = (left + right) / 2; f = F(x);

if (f > 0) right = x; else left = x; iter++;

}

while (Math.Abs(f) > eps && iter < 20000); Console.WriteLine($"Решение методом Дихотомии: х = {x}"); Console.WriteLine($"Кол-во итераций: {iter}");

Console.WriteLine("************************************************");

}

//метод Ньютона

public static void Newton(double left, double right, double eps)

{

double f, df, middle; int iter = 0; middle = (left + right) / 2;

Console.WriteLine($"Начало интервала = {left}, Конец интервала = {right}"); do

{

f = F(middle); df = FPr(middle);

middle = middle - f / df; iter++;

}

while (Math.Abs(f) > eps && iter < 20000); Console.WriteLine($"Решение методом Дихотомии: х = {middle}"); Console.WriteLine($"Кол-во итераций: {iter}");

Console.WriteLine("************************************************");

}

//Метод секущих

public static void Secu(double left, double right, double eps)

{

double f; int iter = 0;

Console.WriteLine($"Начало интервала = {left}, Конец интервала = {right}"); do

{

f = F(left);

right = right - (right - left) / (F(right) - F(left)) * F(right); iter++;

}

while (Math.Abs(f) > eps && iter < 5); Console.WriteLine($"Решение методом секущих: х = {right}"); Console.WriteLine($"Кол-во итераций: {iter}");

9

Console.WriteLine("************************************************");

}

//Метод простых итераций

public static void Iter(double left, double right, double eps)

{

double a = left, b = right; double c = b + a / 2;

int iter = 0;

Console.WriteLine($"Начало интервала = {left}, Конец интервала = {right}"); do

{

b = F(a); iter++; a = b;

}

while (Math.Abs(a - F(a)) > eps);

Console.WriteLine($"Решение методом простых итераций: х = {a}"); Console.WriteLine($"Кол-во итераций: {iter}"); Console.WriteLine("************************************************"); Console.ReadKey();

}

}

}

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