Корень уравнения
Рассмотрим уравнение, которое не имеет явной формулы для корня:
С помощью компьютера можно найти положительный корень этого уравнения с точностью до 10 знаков
после запятой, то есть с погрешностью не более
.
Вот решение этой задачи:


/* Вычисление корня трансцендентного уравнения */ #include <stdio.h> #include <math.h> #define EPS 1e-10 double f(double x) { return exp(x) - 2 - x; } void main() { double l = 0, r = 2, c; while( r - l > EPS ) { c = ( l + r ) / 2; if( f(c) * f(r) < 0 ) l = c; else r = c; } printf ("%.10lf\n", (l + r)/2 ); }
mlib
с математическими функциями:
bash$ gcc -lm root.c -o root
mlib
, в частности, определена функция exp
, вычисляющая экспоненту, а также многие другие математические функции: тригонометричекие, корень, степень, логарифм, ...
Директива #define EPS 1e-10
означает: везде, где встречается комбинация EPS
заменить её на число 1e-10
, то есть 
EPS
это погрешность,
с которой мы хотим найти корень.
Алгоритм вычисления корня основан не методе деления пополам.
А именно, пусть мы значем, что корень функции находится между
l=0
и r=2
. Найдем середину c
отрезка [l, r)
.
Корень находится на одном из промежутков: либо на [l,c)
,
либо на [с, r)
, а именно на том, значение функции на концах которого
имеет разные знаки (вспомните теорему Ролля из курса мат. анализа).
Выберем нужный из двух отрезков и применим к нему те же рассуждения.
Будем заниматься делением попалам, пока размер отрезка не станет меньше
необходимой точности.
Вопросы и задачи
- За один шаг длина отрезка
[l, r)
уменьшается в два раза. Сколько нужно шагов, чтобы уменьшить отрезок в более чем 1000 раз? - Сколько требуется шагов, чтобы начиная с отрезка длины
дойти до отрезка длины меньше
? Сколько требуется шагов, чтобы найти корень с точностью до 100 знаков после запятой?
- В случае деления попалам у нас есть нижняя и верхняя граница для значения корня. С каждым шагом эти границы сближаются. В методе Ньютона нахождения корня уравнения у нас имеется одно число x текущее приближение корня. И следующее приближение получается по следующему алгоритму: находим точку на графике с абциссой x и проводим из неё касательную к графику; абcцисса точки пересечения касательной с осью абцисс будет новым значением x. Так делается до тех пор, пока новое x отличается от старого на число меньше, чем
. Реализуйте этот алгоритм. Для этого вам понадобится определить еще одну функцию, которая возвращает значение производной
.