Отправляет email-рассылки с помощью сервиса Sendsay

Всё о работе в Интернет

  Все выпуски  

Занятие 55. Вычисление числа ? с заданной точностью с помощью разложения в степенной ряд функции arctgx.


Сегодня, уважаемые подписчики, мы с вами начинаем изучение ряда популярных вычислительных алгоритмов, связанных с суммированием членов убывающих числовых последовательностей.

Прописные истины. Если программист в девять утра уже на работе, значит, он еще на работе.

ВЫЧИСЛЕНИЕ ЧИСЛА π

Для начала процитирую материалы занятия №41 “Общие представления о циклических алгоритмах”.

“Особый интерес представляют числовые последовательности, значения членов которых с ростом их порядкового номера убывают по абсолютной величине. Для таких последовательностей возможна организация специфического процесса обработки. Критерием его окончания является достижение члена, значение которого не превышает некоторой минимальной величины.”

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

Известно, что многие математические функции могут быть представлены в виде бесконечных сумм, составленных из некоторых более простых функций. Например, разложение элементарной функции f (x) по степеням x называется рядом Маклорена. Полезность таких разложений определяется возможностью сводить вычисления значений функции f (x) к выполнению последовательностей обычных арифметических операций.

Так, разложение обратной тригонометрической функции arctg x в бесконечный убывающий степенной ряд имеет вид

.

Этот ряд можно использовать для вычисления значений функции arctg x при |x| <= 1.

Известно, что arctg 1 = π /4. После подстановки значения x = 1 в ряд получаем:

.

А теперь сформулируем нашу сегодняшнюю задачу.

Задача C.2.2. “Число π”. Бесконечная убывающая числовая последовательность задана формулой общего члена . Построить подпрограмму вычисления суммы членов этой последовательности с точностью ε. Определить также, сколько слагаемых для этого потребовалось.

Таким образом, члены бесконечной знакочередующейся числовой последовательности, представленной в условии задачи, есть ни что иное, как члены разложения в степенной ряд значения π /4. Вычислив приближённое значение суммы такого ряда и умножив его на 4, можно получить приближённое значение числа π.

Разумеется, путём последовательного выполнения арифметических операций сумму бесконечного ряда вычислить невозможно, поскольку рано или поздно реальный процесс вычислений придётся остановить. Поэтому практический интерес представляет ответ на следующий вопрос: на сколько полученная частичная сумма, полученная к моменту прекращения вычислений, будет отличаться от её точного значения? При этом предполагается, что точное значение суммы бесконечного ряда оценено каким-то иным путём.

Пусть S – точное значение суммы убывающего ряда, SN – частичная сумма, полученная в результате суммирования первых N членов ряда. Тогда S = SN + RN, где RN – остаток ряда. Говорят, что сумма ряда S найдена с заданной точностью ε > 0, если число слагаемых N выбрано столь большим, что имеет место неравенство  |RN| <= ε. При этом частичная сумма SN приближённо принимается в качестве точной суммы ряда S. Проблема оценки RN достаточно просто решается для знакочередующихся рядов.

Известно, что если ряд – знакочередующийся, и если модули его членов убывают, то модуль остатка ряда RN не превышает модуля первого из отброшенных членов ряда, то есть |RN| <= |AN+1|. В этом случае для вычисления суммы членов ряда с точностью ε > 0 достаточно просуммировать те его члены Ai, модуль которых |Ai| > ε. Все остальные члены ряда можно отбросить.

Математическая модель решаемой задачи определена. На базе представленной  математической модели реализована подпрограмма C.2.2 (процедура Number_Pi).

   Procedure Number_Pi ( Eps: Real; Var S: Real; Var N: LongInt );
      Var A: Real; Znak, i: LongInt;
   Begin
      S := 0; i := 1;
      Znak := 1; A := 1;
      While Abs(A) > Eps Do
         Begin S := S + A; i := i + 1;
               Znak := –Znak; A := Znak / (2*i–1) End;
      N := i – 1
   End;

Суммирование членов последовательности Ai должно выполняться, пока остаётся справедливым неравенство |Ai| > ε. Поэтому для построения соответствующего цикла в подпрограмме C.2.2 использован оператор цикла с предусловием. При этом, поскольку члены последовательности убывают по модулю, завершение цикла гарантировано. Заметим, что выполнение такого цикла начинается сразу с проверки первого члена |A1| > ε. Поэтому самый первый член последовательности должен быть вычислен отдельно перед циклом. Подставив в формулу общего члена значение i = 1, получим A1 = 1.

Для организации знакочередования членов последовательности в подпрограмме использовано искусственное рекуррентное соотношение с помощью целочисленной переменной    Как показывает формула общего члена, первый член последовательности положителен. Поэтому и для переменной Znak перед циклом установлено единичное значение. В дальнейшем все члены последовательности с нечётными порядковыми номерами будут положительны, с чётными – отрицательны.

Переменной i, выполняющей роль порядкового номера члена последовательности, перед циклом присваивается начальное значение i=1, поскольку и сам первый член последовательности также вычисляется перед циклом. Переменная S, используемая для накапливания суммы членов последовательности, также перед циклом инициализируется нулевым значением.

В самом цикле в первую очередь (поскольку член последовательности уже вычислен) вычисляется текущее значение частичной суммы S. Затем подготавливается вычисление очередного члена последовательности, то есть в соответствии с рекуррентным соотношением изменяется значение переменной Znak, а также увеличивается на единицу значение порядкового номера члена последовательности i. В последнюю очередь вычисляется значение очередного члена последовательности A, которое будет анализироваться на следующем шаге цикла в составе его условия Abs(A)>Eps.

Для контроля скорости сходимости процесса суммирования используется результирующий параметр подпрограммы N, представляющий собой количество слагаемых в составе окончательной частичной суммы. Нумерация членов последовательности начинается с единицы, поэтому общее число слагаемых должно совпадать с порядковым номером того из них, которое вошло в состав суммы последним. После завершения цикла значение порядкового номера i соответствует тому слагаемому, которое не вошло в состав суммы, следовательно N=i–1.

По определению понятия точности, ε > 0. Кроме того, по смыслу задачи e должно быть достаточно малым, так как оно определяет допустимое отличие точного значения суммы от приближённого. На практике в таких случаях обычно вибирают значения в пределах от 0.0000001 до 0.01.

Тестирование подпрограммы C.2.2 показало плохую сходимость реализованного метода вычислений. Это значит, что для получения каждой очередной правильной цифры результата требуется на порядок увеличивать задаваемую точность результата. И при этом, также на порядок, увеличивается число слагаемых.

Именно поэтому, уважаемые подписчики, на следующем занятии нам придётся остановится на вопросах сходимости более подробно.

Уважаемые подписчики! При необходимости задать вопрос, проконсультироваться, уточнить или обсудить что-либо обращайтесь через Гостевую книгу моего персонального сайта http://a-morgun.narod.ru. При этом настоятельно рекомендую пользоваться браузером Internet Explorer.

С уважением, Александр.

 


В избранное