2 лаба численые методы
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронно-
вычислительных систем (КИБЭВС)
Численное решение нелинейного уравнения с одной переменной Отчет по лабораторной работе №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