Паскаль. Основы программирования

       

Бесконечные произведения


Напомним основные понятия, относящиеся к бесконечным произведениям.

Определение. Если 

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

называют бесконечным  произведением.

Станем последовательно перемножать числа (1), составляя частичные произведения

Эту последовательность частичных произведений

 мы всегда будем сопоставлять символу (2).

Предел P частичного произведения

 при
 (конечный или бесконечный)

называют значением

произведения (2) и пишут:

Если бесконечное произведение имеет конечное значение P и притом отличное от 0, то само произведение называют сходящимся, в противном случае - расходящимся.



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

4.1. Примеры некоторых замечательных бесконечных произведений

Пример 1

Так как частичное произведение

то бесконечное произведение сходится, и его значением будет

Проверим этот факт, для чего составим программу вычисления произведе­ния: 

Составим процедуру, которая с заданной точностью вычисляет это произведение и включим ее в программу. Зачем нам нужна процедура, если можно сразу составить программу?

Ответ понятен. Нам придется составлять еще много программ, в которых не только вычисляются произведения, но и выполняется ряд других задач. Изменив только одну процедуру, мы сможем использовать новое произведение для поставленных в программе задач.


Процедура

      Procedure

Multiplication(eps : real; var Mult : real);

            var

                n     : longint;

               Mult1 : real;

            begin

               n := 2; Mult1 := 1;

               repeat

                   Mult1 := Mult1*(1 - 1/sqr(n));

                   n := n + 1;

                   Mult := Mult1*(1 - 1/sqr(n))

               until abs(Mult - Mult1) < eps

            end;

Программа

Program Multiply1;


      uses WinCrt;

      var

        Mult, eps : real;

{----------------------------------------------------------------------------------------}

{ Функция вычисления порядка - кол-во знаков после запятой }

      Function

t(eps : real) : integer;

            var

               k : integer;

            begin

               k := -1;

               repeat

                   eps := eps*10;

                   k := k + 1

               until eps > 1;

               t := k

            end;

{----------------------------------------------------------------------------------------}

      Procedure Multiplication(eps : real; var Mult : real);

            var

                n     : longint;

               Mult1 : real;

            begin

               n := 2; Mult1 := 1;

               repeat

                   Mult1 := Mult1*(1 - 1/sqr(n));

                   n := n + 1;

                   Mult := Mult1*(1 - 1/sqr(n))

               until abs(Mult - Mult1) < eps

            end;

{----------------------------------------------------------------------------------------}

      begin

         write('Введите точность вычисления '); readln(eps);

         Multiplication(eps, Mult);

         writeln('Значение произведения равно ', Mult:6:t(eps));

         writeln('С точностью до ', eps:1:t(eps))

      end.

Пример 2.

4.2. Формула Валлиса (J. Wallis)

Формула Валлиса имеет для нас не только исторический интерес, но она поможет применять методику, которая будет использоваться при вычислении числа
 с помощью этой формулы.

Итак, формула Валлиса имеет вид:


или



Этот предел равносилен разложению числа
 в бесконечное произведение



Она же приводит к формулам

 
 или
.

Но надо заметить, что для вычисления числа
 существуют методы, гораздо быстрее ведущие к цели.

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

Процедура

      Procedure

Wallis(eps : real; var Mult : real);

            var

               n     : longint;



               Mult1 : real;

            begin

               n := 1; Mult := 1;

               repeat

                  Mult := Mult*(4*sqr(n)/(4*sqr(n)-1));

                  n := n + 1;

                  Mult1 := 4*sqr(n)/(4*sqr(n)-1)

               until Mult1 < eps

            end;

Следует заметить, что оценка погрешности в этой процедуре отличается от оценки погрешности в процедуре примера 1. Такая оценка вытекает из математических соображений, n-й множитель в произведении Валлиса   
  "быстрее" стремится к нулю, чем разность между n - 1-м произведением и n-м.





Программа

Program Problem2;

      uses WinCrt;

      var

        Mult, eps : real;

{----------------------------------------------------------------------------------------}

{ Функция вычисления порядка - кол-во знаков после запятой }

      Function

t(eps : real) : integer;

            var

               k : integer;

            begin

               k := -1;

               repeat

                   eps := eps*10;

                   k := k + 1

               until eps > 1;

               t := k

            end;

{----------------------------------------------------------------------------------------}

      Procedure Wallis(eps : real; var

Mult : real);

            var

               n     : longint;

               Mult1 : real;

            begin

               n := 1; Mult := 1;

               repeat

                  Mult := Mult*(4*sqr(n)/(4*sqr(n)-1));

                  n := n + 1;

                  Mult1 := 4*sqr(n)/(4*sqr(n)-1)

               until Mult1 < eps

            end;

{----------------------------------------------------------------------------------------}

      begin

        write('Введите точность вычисления '); readln(eps);

        Wallis(eps, Mult);

        writeln('Значение числа Пи равно ', 2*Mult:6:t(eps));

        writeln('С точностью до ', eps:1:t(eps))

      end.

4.3. Полный эллиптический интеграл 1-го рода



Для полного эллиптического интеграла 1-го рода установлена формула

 

где переменная
 определяется рекуррентным соотношением:

,  (0 < k < 1).

Эта формула дает разложение K(k) в бесконечное произведение



Процедура

      Procedure

Elliptic(k, eps : real; var Kk : real);

            var

               Kk1 : real;

            begin

               Kk1 := k;

               repeat

                  k := (1 - sqrt(1 - sqr(k)))/(1 + sqrt(1 - sqr(k)));

                  Kk1 := Kk1*(1 + k);

                  k := (1 - sqrt(1 - sqr(k)))/(1 + sqrt(1 - sqr(k)));

                  Kk := Kk1*(1 + k);

               until abs(Kk1 - Kk) < eps;

               Kk := Kk*Pi/2

            end;

Программа

 

Program Problem3;

      uses WinCrt;

      var

        Kk, k, eps : real;

{----------------------------------------------------------------------------------------}

{ Функция вычисления порядка - кол-во знаков после запятой }

      Function

t(eps : real) : integer;

            var

               k : integer;

            begin

               k := -1;

               repeat

                   eps := eps*10;

                   k := k + 1

               until eps > 1;

               t := k

            end;

{----------------------------------------------------------------------------------------}

      Procedure Elliptic(k, eps : real; var

Kk : real);

            var

               Kk1 : real;

            begin

               Kk1 := k;

               repeat

                  k := (1 - sqrt(1 - sqr(k)))/(1 + sqrt(1 - sqr(k)));

                  Kk1 := Kk1*(1 + k);

                  k := (1 - sqrt(1 - sqr(k)))/(1 + sqrt(1 - sqr(k)));

                  Kk := Kk1*(1 + k);

               until abs(Kk1 - Kk) < eps;

               Kk := Kk*Pi/2

            end;

{----------------------------------------------------------------------------------------}

      begin

        write('Введите значение k (0 < k < 1) '); readln(k);



        write('Введите точность вычисления '); readln(eps);

        Elliptic(k, eps, Kk);

        writeln('Значение интеграла равно ', Kk:6:t(eps));

        writeln('С точностью до ', eps:1:t(eps))

      end.

Задание 5

Известен предел: 


Теперь мы можем записать это так:


В частности, при
 придем к разложению:



Если вспомнить, что
 то это разложение можно переписать в виде



Эта формула впервые была предложена Ф. Виетом (F. Viet) и является вместе с формулой Валлиса примерами первых бесконечных произведений.

Используя формулу (1) составьте программу вычисления числа
.

 


Содержание раздела