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

cm3

.pdf
Скачиваний:
27
Добавлен:
24.11.2021
Размер:
189.17 Кб
Скачать

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

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

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

ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНОГО УРАВНЕНИЯ С ОДНОЙ ПЕРЕМЕННОЙ

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

Студент гр. 730-2 Подойницын К.В. 01.11.2021

Доцент каф.КИБЭВС Якимук А.Ю. 01.11.2021

Томск 2021

2

1 Введение

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

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

x2 + 4x 5 = 0

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

3

2 Ход работы

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

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

3:97x2 + 8:02x + 1:22;

Была найдена производная функции:

7:94x + 8:02;

Далее была вычислена начальная граница промежутка:

7:94x + 8:02 = 0; x= -1.010;

Конечная граница интервала была найдена програмным методом Intervals. Листинг прграммы представлен в приложении А.

4

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

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

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

5

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

Метод

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

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

Корень

 

 

 

 

Дихотомии

-1.010

13

-0,1659

 

 

 

 

Ньютона

-1.010

4

-0,1657

 

 

 

 

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

-1.010

18

-0,1671

 

 

 

 

6

3Заключение

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

7

Приложение А

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

using System; namespace laba3_cm

{

class Program

{

static void Main(string[] args)

{

double a = -1.010, b; b = Intervals(a);

if (a == b)

{

Console.WriteLine("Уравнение не имеет корней");

}

else

{

if (b < a)

(a, b) = (b, a); Dichotomy(a, b); Newton(a, b); SimpleI(a, b);

}

}

private static double Intervals(double b) //поиск второй грани

{

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

{

if (F(b) * F(i) < 0)

{

return i;

8

}

else b++;

}

return b;

}

static double F(double x) //функция

{

return 3.97 * x * x + 8.02 * x + 1.22;

}

static double FProizvodnaya(double x) //производная функции

{

return 7.94 * x + 8.02;

}

static double Phi(double x, double L) //функция фи

{

return F(x) * L + x;

}

static void Dichotomy(double a, double b) //Дихотомия

{

int k = 0; double koren = 0;

double d = (a + b) / 2;

while (b - a > 0.001 || F(d) > 0.001)

{

d = (a + b) / 2;

if (F(b) * F(d) < 0)

{

a = d;

koren = Math.Round(a, 4); k++;

}

else

9

{

b = d;

koren = Math.Round(b, 4); k++;

}

}

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

Console.WriteLine($"Кол-во итераций: {k}");

Console.WriteLine($"Корень: {koren}\n");

}

static void Newton(double a, double b) //Ньютон

{

int k = 0;

double d = (a + b) / 2;

if (Math.Abs(F(d)) >= 0.001)

{

while (Math.Abs(F(d)) >= 0.001)

{

d = d - F(d) / FProizvodnaya(d); k++;

}

}

else

{

k++;

}

Console.WriteLine("Метод Ньютона:"); Console.WriteLine($"Кол-во итераций: {k}"); Console.WriteLine($"Корень: {Math.Round(d, 4)}\n");

}

static void SimpleI(double a, double b) //Простые итерации

{

10

double X0, L, Xi; X0 = b;

L = -2 / FProizvodnaya(X0);

X0 = b;

int k = 0; do

{

Xi = X0;

X0 = Phi(Xi, L); k++;

}

while (Math.Abs(X0 - Xi) > 0.001); Console.WriteLine("Метод простых итераций:"); Console.WriteLine($"Кол-во итераций: {k}"); Console.WriteLine($"Корень: {Math.Round(X0, 4)}\n");

}

}

}

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