Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
102
Добавлен:
14.04.2015
Размер:
678.91 Кб
Скачать

Рекуррентная формула

При суммировании ряда необходимо решить следующие задачи:

      1. свести вычисления к простейшим арифметическим операциям;

      2. уменьшить число этих операций и время расчета;

      3. уменьшить погрешность округления.

Рассмотрим вычисление функции sin x. Разложение этой функции в ряд Тейлора имеет следующий вид

.

Область сходимости ряда определяется неравенством ,то есть ряд сходится при любом значении x.

Величина n! называется “n-факториал” и вычисляется по формуле:

n! = 1×2×3×…×(n– 1)×n= (n– 1)!×nили

Принято считать, что 0! = 1.

Суммирование ряда последовательным вычислением слагаемых и добавлением их к сумме, как на приведенной выше блок-схеме, сводит вычисления к простейшим арифметическим операциям, то есть первая задача при этом решается. Что касается второй задачи – уменьшения количества этих операций, – то многократноеперемножение чисел в числителе (степени x) и в знаменателе (n!) вряд ли можно считать рациональным. При этом (третья задача) погрешность вычислений возрастает с увеличением номера члена ряда – слишком велики становятся и числитель, и знаменатель.

Задачи сокращения количества операций и уменьшения погрешности вычислений решает рекуррентная формула, позволяющая вычислить значение очередного члена ряда, используя уже найденное значение предыдущего. Рекуррентная формула имеет вид:

an+1 = an × Tn, где Tn – коэффициент рекурсии.

В нашем примере произвольный член ряда определяется формулой:

, где n = 0, 1, 2, ...

Номер начального члена ряда n = 0, его значение a0 = x.

Для расчета коэффициента рекурсии

определим значение следующего (n+1)-го члена ряда.

В формулу общего члена ряда

вместо n подставим (n+1), получим

Вычисляя коэффициент рекурсии, сокращаем дробь:

Чтобы сократить факториалы, рассмотрим числитель и знаменатель отдельно:

(2n + 1)! = 1 × 2 × 3 × … × (2n + 1)

(2n + 3)! = 1 × 2 × 3 × … × (2n + 1) × (2n + 2) × (2n + 3)

Окончательная формула коэффициента рекурсии

Отсюда получаем рекуррентную формулу для вычисления членов ряда

Проверка полученной формулы убережет Вас от ошибок в алгоритме и, возможно, сэкономит усилия при отладке программы.

Подставив n = 0 в формулу общего члена ряда , получаем a0 = x.

Далее определим по рекуррентной формуле a1 и a2, сверяя результаты с соответствующими членами ряда:

при n = 0

при n = 1

Совпадение полученных значений с членами ряда показывает, что коэффициент рекурсии рассчитан правильно.

Блок-схема алгоритма

В приведенную выше блок-схему подставим данные для расчета функции sin x, добавив вывод данных для графиков и защиту от зацикливания. Расчет текущего члена ряда на каждой итерации цикла осуществляется по полученной рекуррентной формуле.

Пояснения.

  1. В переменной F хранится эталонное значение функции, вычисленное по стандартной программе, для последующего сравнения этого значения с полученной суммой ряда (|FSn|).

  2. В процессе суммирования ряда формируются файлы с расширением .txt, содержащие таблицы зависимости значений членов ряда и частичных сумм от номера члена ряда (Блок вывода *). Таблицы состоят из строк, в которых через пробел записаны значения функции и аргумента.

!Открыть три файла

open(1, file=‘An.txt’); open(1, file=‘Sn.txt’)

open(1, file=‘F.txt’)

!Вывод данных для графика

write(1, *) N, An; write(2, *) N, Sn

write(3, *) N, F

Эталонное значение функции F не зависит от номера члена ряда N, на графике ему соответствует линия, параллельная горизонтальной оси.

Для построения графика воспользуйтесь пакетом AGrapher.

  1. Для предотвращения зацикливания программы из-за возможных ошибок, количество членов ряда N ограничено значением Nmax (например, 100). При N > Nmax суммирование прекращается и выдается аварийное сообщение с дополнительной информацией.

  2. Для вывода результатов суммирования и аварийного сообщения в отладке удобно использовать оператор namelist.

  3. В цикле do while переменная N служит для хранения номера последнего члена ряда, вошедшего в сумму. Поскольку в нашем примере члены ряда в разложении функции нумеруются с 0, то количество просуммированных членов ряда равно N+1 . Единица добавляется к N после выхода из цикла (Блок **).

Соседние файлы в папке Фортран_Лекции