Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
При реализации многих численных методов точность вычислений зависит от числа шагов. Однако за какое именно число шагов будет достигнута приемлемая точность, заранее сказать трудно и желательно, чтобы программа сама определяла, когда следует остановиться.
Например, синус можно разложить в так называемый ряд Тейлора:
Чем большее количество членов ряда будет просуммировано, тем точнее будет вычислен синус. Пусть требуется вычислить до 5-го знака после запятой. То есть приемлемая погрешность . Для этого достаточно суммировать члены ряда до тех пор, пока очередной член ряда не окажется меньше 10-5.
eps:=1e-5;
readln(x);
p:=x;
s:=x;
n:=2;
while abs(p)>eps do {Условие выхода: очередной член ряда по модулю меньше eps}
begin
p:=-p*x*x/(n*(n+1)); {Вычисление очередного члена ряда}
s:=s+p;
n:=n+2;
end;
writeln('sin(x) = ', s);
Если вычисления производятся в соответствии с рекуррентными соотношениями, то еще один способ поставить связанное с точностью условие прекращения вычислений заключается в следующем. Вычисления прекращаются, если изменение вычисляемой величины на очередном шаге меньше заданной величины:
Также условие можно наложить на относительное изменение:
Следующий раздел:
Предыдущий раздел:
Тарас Викторович, в строке «while p<=eps do {Условие выхода: очередной член ряда меньше eps}" ошибка, цикл ни разу не выполнится, там другой знак нужен.
Спасибо, исправил.
Эту ошибку забыли исправить в книге. Кстати, и на сайте тоже не до конца верный вариант: нужно модуль поставить.
Кстати, книжку напечатали. Ждём, пока сброшюруют. Обложка будет жёлтого цвета.
Снова исправил. Еще одно спасибо :)
Книжку ждем.
Извините, а о какой книге идет речь??
Для студентов нашего факультета этот курс издали небольшим тиражом в бумажном виде. Об этом и речь.
прошу заранее извинить за примитивщину, но никак понять не могу: в первом примере в знаменателе факториал, а в алгоритме вычисляется только произведение 2 последних множителей факториала.ошибка? или, простите, туплю?
>> …, а в алгоритме вычисляется только произведение 2 последних множителей факториала
Отнюдь. В знаменателе n*(n+1), причем n на каждом шаге цикла разное (n := n +2;).
Все таки Ольга права. «…в алгоритме вычисляется только произведение 2 последних множителей факториала».