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


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

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

Предел 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-й множитель в произведении Валлиса

Программа
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-го рода установлена формула

где переменная


Эта формула дает разложение 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) составьте программу вычисления числа
