Язык Си в примерах/Корень уравнения: различия между версиями
Содержимое удалено Содержимое добавлено
Karagota (обсуждение | вклад) Нет описания правки |
Greck (обсуждение | вклад) мНет описания правки |
||
Строка 1:
Рассмотрим уравнение, которое не имеет явной формулы для корня:
<math>e^x = x - 2.</math>
Строка 12 ⟶ 11 :
#include <math.h>
#define EPS 1e-10
double f(double x) {
return exp(x) - 2 - x;
}
double l = 0, r = 2, c;
while( r - l > EPS ) {
c = ( l + r ) / 2;
if( f(c) * f(r) < 0 )
else
r = c;
}
printf ("%.10lf\n", (l + r)/2 );
Строка 33 ⟶ 31 :
bash$ gcc -lm root.c -o root
В библиотеке <tt>mlib</tt>, в частности, определена функция <tt>exp</tt>, вычисляющая экспоненту, а также многие другие математические функции: тригонометричекие (<tt>sin</tt>, <tt>cos</tt>, <tt>asin</tt>, <tt>acos</tt>, <tt>tan</tt>, ...), корень (<tt>sqrt</tt>), степень (<tt>pow</tt>), логарифм (<tt>log</tt>), ...
Директива <tt>#define EPS 1e-10</tt> означает: везде, где встречается комбинация EPS
Строка 39 ⟶ 37 :
с которой мы хотим найти корень.
Алгоритм вычисления корня основан
А именно, пусть мы
<tt>l=0</tt> и <tt>r=2</tt>. Найдем середину <tt>c</tt>
Корень находится на одном из промежутков: либо на <tt>[l,c)</tt>,
либо на <tt>[с, r)</tt>, а именно на том, значение функции на концах которого
имеет разные знаки (вспомните теорему Ролля про непрерывную функцию из курса мат. анализа).
Выберем нужный из двух отрезков и применим к нему
Будем
|