Язык Си в примерах/Корень уравнения: различия между версиями

Содержимое удалено Содержимое добавлено
дополнение
промежуток - это интервал, а метод деления отрезка, а не интервала
Строка 36:
 
Директива <tt>#define EPS 1e-10</tt> означает: в тексте программы идентификатор EPS
заменить на число <tt>1e-10</tt>, то есть <math>1\cdot 10^{-10}\,\!</math>. Число <tt>EPS</tt> &mdash; это погрешность по оси <math>x</math>,
с которой мы хотим найти корень.
 
Алгоритм вычисления корня основан на [[:w:Метод бисекции|методе деления пополам]]:
Предположим, что искомый корень находится между
<tt>l = 0</tt> и <tt>r = 2</tt>. Найдем середину <tt>c</tt> промежуткаотрезка <tt>[l, r)</tt>.
Корень находится на одном из промежутковотрезков: либо на <tt>[l, c)</tt>,
либо на <tt>[с, r)</tt>, а именно, на том, значение функции на концах которого
имеет разные знаки (вспомните [[w:Теорема Ролля|теорему Ролля]] про непрерывную функцию из курса мат. анализа).
Выберем нужный из двух промежутковотрезков и применим к нему такие же рассуждения.
Будем осуществлять деление пополам, пока размер промежуткаотрезка не станет меньше необходимой точности.
 
 
== Вопросы и задачи ==
 
* За один шаг длина промежуткаотрезка <tt>[l, r)</tt> уменьшается в два раза. Сколько нужно шагов, чтобы уменьшить отрезок более, чем в 1000 раз?
* Сколько требуется шагов, чтобы начиная с отрезка длины <math>r-l=2\,\!</math> дойти до отрезка длины меньше <math>10^{-10}\,\!</math>? Сколько требуется шагов, чтобы найти корень с точностью до 100 знаков после запятой?
* В случае деления пополам у нас есть нижняя и верхняя граница для значения корня. С каждым шагом эти границы сближаются. В методе Ньютона нахождения корня уравнения у нас имеется одно число ''x'' &mdash; текущее приближение корня. И следующее приближение получается по следующему алгоритму: находим точку на графике с абсциссой x и проводим из неё касательную к графику; абсцисса точки пересечения касательной с осью абсцисс будет новым значением ''x''. Так делается до тех пор, пока новое ''x'' отличается от старого на число меньше, чем <math>10^{-10}/2\,\!</math>. Реализуйте этот алгоритм. Для этого вам понадобится определить еще одну функцию, которая возвращает значение производной <math>f'(x) = (e^x-x-2)' = e^x-1\,\!</math>.