Тогда 0 = √21 = 0.178268.
2
Проведем вычисление корня функций ( ), ′( ) при помощи программы,
приведенной в приложении А. Программа вычисляет корень уравнения методом Ньютона. На вход ей подаются следующие параметры: X – начальное приближение корня, eps – требуемая точность вычисления корня, delta –
погрешность вычисления значений функции, a, b – отрезок [ , ], локализующий корень. В табл. 1 приведены расчеты корня при различных значениях eps, и
представлены значения количества итераций.
Таблица 1 – Расчет корня методом Ньютона с варьированием значения eps
Значение |
Значение |
Значение |
Значение |
Значение |
Значение |
|
|
|
|||||
|
|
|
|
|||
|
|
|
|
|
|
|
0.1 |
0.00001 |
0.5 |
1 |
0.872045 |
2 |
|
|
|
|
|
|
|
|
0.01 |
0.00001 |
0.5 |
1 |
0.867107 |
3 |
|
|
|
|
|
|
|
|
0.001 |
0.00001 |
0.5 |
1 |
0.867107 |
3 |
|
|
|
|
|
|
|
|
0.0001 |
0.00001 |
0.5 |
1 |
0.867107 |
3 |
|
|
|
|
|
|
|
|
0.00001 |
0.00001 |
0.5 |
1 |
0.867086 |
4 |
|
|
|
|
|
|
|
Имея экспериментальное значение скорость сходимости метода видим, что скорость сходимости метода хорд выше линейной. Действительно, согласно теории порядок сходимости метода равен 2, т.е. квадратичный.
Теперь, имея приближение корня, примем ≈ 0.867086. С помощью
данного приближения вычислим = | − |, и оценим с |
его помощью |
чувствительность метода к ошибкам в исходных данных. При |
≤ будем |
считать, что задача хорошо обусловлена – хор., иначе пл. – плохо. Результаты эксперимента занесены в табл. 2. Теперь, имея значение количества итераций,
необходимое для локализации корня, сравним метод Ньютона с методом бисекции и методом хорд. Из проведенного ранее исследования известно, что порядок сходимости метода бисекции и метода хорд линейны
6
Таблица 2 – Обусловленность задачи при различных и
Значение |
Значение |
|
|
Значение |
Значение |
Значение |
|
|
|
Значение |
|
k |
|
≥ |
|
|
|
||||||
|
|
|
|
|
|
|
|
0.1 |
0.01 |
0.87243 |
|
2 |
0.005344 |
хор. |
|
|
|
|
|
|
|
|
|
0.01 |
0.01 |
0.866566 |
|
3 |
0.00052 |
хор. |
|
|
|
|
|
|
|
|
|
0.001 |
0.01 |
0.866566 |
|
3 |
0.00052 |
хор. |
|
|
|
|
|
|
|
|
|
0.0001 |
0.01 |
0.866566 |
|
3 |
0.00052 |
пл. |
|
|
|
|
|
|
|
|
|
0.00001 |
0.01 |
0.866566 |
|
3 |
0.00052 |
пл. |
|
|
|
|
|
|
|
|
|
0.000001 |
0.01 |
0.866566 |
|
3 |
0.00052 |
пл. |
|
|
|
|
|
|
|
|
|
0.1 |
0.001 |
0.872102 |
|
2 |
0.005016 |
хор. |
|
|
|
|
|
|
|
|
|
0.01 |
0.001 |
0.867114 |
|
3 |
0.000028 |
хор. |
|
|
|
|
|
|
|
|
|
0.001 |
0.001 |
0.867114 |
|
3 |
0.000028 |
хор. |
|
|
|
|
|
|
|
|
|
0.0001 |
0.001 |
0.867114 |
|
3 |
0.000028 |
хор. |
|
|
|
|
|
|
|
|
|
0.00001 |
0.001 |
0.867114 |
|
3 |
0.000028 |
пл. |
|
|
|
|
|
|
|
|
|
0.000001 |
0.001 |
0.867114 |
|
3 |
0.000028 |
пл. |
|
|
|
|
|
|
|
|
|
0.1 |
0.0001 |
0.872037 |
|
2 |
0.004951 |
хор. |
|
|
|
|
|
|
|
|
|
0.01 |
0.0001 |
0.867108 |
|
3 |
0.000022 |
хор. |
|
|
|
|
|
|
|
|
|
0.001 |
0.0001 |
0.867108 |
|
3 |
0.000022 |
хор. |
|
|
|
|
|
|
|
|
|
0.0001 |
0.0001 |
0.867108 |
|
3 |
0.000022 |
хор. |
|
|
|
|
|
|
|
|
|
0.00001 |
0.0001 |
0.867078 |
|
4 |
0.000008 |
хор. |
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
|
|
|
В табл. 3 приведено сравнение методов хорд, бисекции и метода Ньютона для расчета корня. - корень, высчитанный по методу ‘*’, – количество итераций, затраченное на приближение корня методом ‘*’, где ‘*’ принимает значения: H – метод хорд, B – метод бисекции и N – метод Ньютона.
Выводы.
Проанализировав результаты применения метода Ньютона, можно сказать,
что при расчете данной функции он дает очень хорошие результаты, и сходится за минимальное среди рассмотренных методов число итераций, которое соответствует теоретическому значению порядка.
По результатам эксперимента по определению обусловленности метода Ньютона можно оценить абсолютную обусловленность как значение примерно равное 0.1, что говорит об очень хорошей обусловленности метода.
Проанализировав данные вычислительного эксперимента по трем методам: Ньютона, хорд и бисекции, можно сделать вывод, что для данной функции метод Ньютона сходится наиболее быстрым образом и имеет преимущество перед рассмотренными в сравнении методами. Из недостатков метода можно выделить необходимость расчета аналитической формулы первой производной функции, и значения второй производной.
8
Таблица 3 – Сравнение методов Ньютона, хорд и бисекции
Значение |
Значение |
Значение |
Значение |
Значение |
Значение |
Значение |
Значение |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.1 |
0.001 |
0.875 |
0.858529 |
0.872102 |
2 |
3 |
2 |
|
|
|
|
|
|
|
|
0.01 |
0.001 |
0.863281 |
0.865001 |
0.867114 |
6 |
4 |
3 |
|
|
|
|
|
|
|
|
0.001 |
0.001 |
0.867676 |
0.867002 |
0.867114 |
9 |
5 |
3 |
|
|
|
|
|
|
|
|
0.0001 |
0.001 |
0.866943 |
0.867002 |
0.867114 |
9 |
5 |
3 |
|
|
|
|
|
|
|
|
0.00001 |
0.001 |
0.866943 |
0.867002 |
0.867114 |
9 |
5 |
3 |
|
|
|
|
|
|
|
|
0.000001 |
0.001 |
0.866943 |
0.867002 |
0.867114 |
9 |
5 |
3 |
|
|
|
|
|
|
|
|
0.1 |
0.0001 |
0.875 |
0.858435 |
0.872037 |
2 |
3 |
2 |
|
|
|
|
|
|
|
|
0.01 |
0.0001 |
0.863281 |
0.864908 |
0.867108 |
6 |
4 |
3 |
|
|
|
|
|
|
|
|
0.001 |
0.0001 |
0.867676 |
0.866953 |
0.867108 |
9 |
6 |
3 |
|
|
|
|
|
|
|
|
0.0001 |
0.0001 |
0.867126 |
0.867086 |
0.867108 |
12 |
8 |
3 |
|
|
|
|
|
|
|
|
0.00001 |
0.0001 |
0.867081 |
0.867086 |
0.867078 |
13 |
8 |
4 |
|
|
|
|
|
|
|
|
0.000001 |
0.0001 |
0.876081 |
0.867086 |
0.867078 |
13 |
8 |
4 |
|
|
|
|
|
|
|
|
0.1 |
0.00001 |
0.875 |
0.858425 |
0.872045 |
2 |
3 |
2 |
|
|
|
|
|
|
|
|
0.01 |
0.00001 |
0.863281 |
0.864907 |
0.867107 |
6 |
4 |
3 |
|
|
|
|
|
|
|
|
0.001 |
0.00001 |
0.867676 |
0.866949 |
0.867107 |
9 |
6 |
3 |
|
|
|
|
|
|
|
|
0.0001 |
0.00001 |
0.867126 |
0.867075 |
0.867107 |
12 |
8 |
3 |
|
|
|
|
|
|
|
|
0.00001 |
0.0001 |
0.867092 |
0.867084 |
0.86786 |
16 |
9 |
4 |
|
|
|
|
|
|
|
|
0.000001 |
0.0001 |
0.867084 |
0.867084 |
0.86786 |
17 |
9 |
4 |
|
|
|
|
|
|
|
|
9
ПРИЛОЖЕНИЕ А
ИСХОДНЫЙ КОД ПРОГРАММЫ
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <iostream> #include <conio.h>
double delta;
#ifndef __NEWTON #define __NEWTON #endif
#ifndef M_PI
#define M_PI 3.14159265358979323846 #endif // !M_PI
#ifndef FF(x)
#define FF(x) ( (M_PI * pow(x, M_PI + 7) + 2 * M_PI*pow(x, M_PI + 3) + M_PI * pow(x, M_PI - 1) + 4 * pow(x, 3)) / (pow(x, 8) + 2 * pow(x, 4) + 1) )
#define FFF(x) ( (PI2*pow(x, M_PI + 10) - M_PI * pow(x, M_PI + 10) + 3 * PI2*pow(x, M_PI + 6) - 3 * M_PI*pow(x, M_PI + 6) + 3 * PI2*pow(x, M_PI + 2) - 3 * M_PI*pow(x, M_PI + 2) - 20 * pow(x, 6) + PI2 * pow(x, M_PI - 2) - M_PI*pow(x,M_PI-2) + 12 * pow(x, 2)) / (pow(x, 12) + 3 * pow(x, 8) + 3 * pow(x, 4) + 1) )
#endif
extern double F(double); /******************************************************************/
/* Функция F(X) , задаваемая пользователем */
/******************************************************************/
#ifdef __NEWTON
extern double F1(double); /******************************************************************/
/* Производная функции F(X) , задаваемая пользователем */
/******************************************************************/
#endif
#ifdef __ITER
extern double PHI(double); /******************************************************************/
10