Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
При реализации многих численных методов точность вычислений зависит от числа шагов. Однако за какое именно число шагов будет достигнута приемлемая точность, заранее сказать трудно и желательно, чтобы программа сама определяла, когда следует остановиться.
Например, синус можно разложить в так называемый ряд Тейлора:
Чем большее количество членов ряда будет просуммировано, тем точнее будет вычислен синус. Пусть требуется вычислить до 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 последних множителей факториала».