Приближенное вычисление интегралов с помощью рядов
С помощью почленного интегрирования рядов получаются разложения в бесконечные степенные ряды для некоторых интегралов, не выражающихся в конечном виде через элементарные функции. Эти разложения могут быть использованы для приближенных вычислений.
Так, исходя из разложения
![](image/image865.gif)
найдем значение интеграла
![](image/image866.gif)
Вначале разложим в ряд функцию
![](image/image867.gif)
![](image/image868.gif)
Интегрируем почленно этот ряд, получим:
![](image/image869.gif)
который сходится на множестве всех действительных чисел.
Чтобы составить программу, найдем рекуррентную формулу для вычисления суммы ряда.
![](image/image870.gif)
![](image/image871.gif)
![](image/image872.gif)
отсюда получаем:
![](image/image873.gif)
Так как ряд знакочередующийся, то оценить точность вычисления можно по абсолютной величине последнего "отброшенного" члена, т. е. по значению
![](image/image874.gif)
Программа
Program Problem1;
uses WinCrt;
var
n : longint;
u, I, x, 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;
{----------------------------------------------------------------------------------------}
begin
write('Введите значение аргумента x '); readln(x);
write('Введите точность вычисления '); readln(eps);
u := x; n := 0; I := 0;
repeat
I := I + u;
n := n + 1;
u := -(u*x*x*(2*n - 1))/(2*n*(2*n + 1))
until abs(u) < eps;
writeln('Значение интеграла равно ', I:6:t(eps))
end.
В теории вероятностей нам придется иметь дело с функцией - интегралом вероятностей
![](image/image875.gif)
Надо лишь заметить, что значение этой функции при
![](image/image876.gif)
![](image/image353.gif)
Для составления программы вычисления значений этого интеграла и большего удобства использования в других программах, создадим функцию:
{ Рекуррентная функция вычисления интеграла вероятностей }
Function FF(x : real) : real;
var
n : integer;
u, I : real;
begin
if x >= 5
then FF := 1
else if x <= -5
then FF := -1
else
begin
u := x; n := 0; I := 0;
repeat
I := I + u;
n := n + 1;
u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))
until abs(u) < 0.00001;
FF := 2*I/sqrt(2*Pi)
end
end;
Использование ее в программе приводится ниже.
Program Problem2;
uses WinCrt;
var
x, 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;
{----------------------------------------------------------------------------------------}
{ Рекуррентная функция вычисления интеграла вероятностей }
Function FF(x, eps : real) : real;
var
n : integer;
u, I : real;
begin
if x >= 5
then FF := 1
else if x <= -5
then FF := -1
else
begin
u := x; n := 0; I := 0;
repeat
I := I + u; n := n + 1;
u := -u*(x*x*(2*n - 1)/(2*n*(2*n + 1)))
until
abs(u) < eps;
FF := 2*I/sqrt(2*Pi)
end
end;
{-----------------------------------------------------------------------------------------}
begin
write('Введите значение аргумента x '); readln(x);
write('Введите точность вычисления '); readln(eps);
writeln('Значение интеграла вероятностей равно ', FF(x, eps):6:t(eps))
end.
Аналогично предыдущему примеру вычислим интеграл
![](image/image877.gif)
Для этого надо вспомнить ряд, в который разлагается функция sinx
![](image/image786.gif)
при всех
![](image/image878.gif)
Разложим в ряд
![](image/image879.gif)
![](image/image880.gif)
Интегрируя его, получим:
![](image/image881.gif)
Найдем рекуррентную формулу для составления программы.
![](image/image882.gif)
![](image/image883.gif)
![](image/image884.gif)
Оценить точность можно по абсолютной величине n-го члена, т. е. по величине
![](image/image885.gif)
Составим процедуру вычисления этого интеграла.
Procedure
Integral(x, eps : real; var I : real);
var
n : integer;
u : real;
begin
u := x; n := 1; I := 0;
repeat
I := I + u;
n := n + 1;
u := -(u*x*x*(2*n - 3))/((2*n - 2)*sqr(2*n - 1))
until abs(u) < eps
end;
Программа
Program Problem2;
uses WinCrt;
var
I, x, eps : real;
{----------------------------------------------------------------------------------------}
Procedure
Integral(x, eps : real; var I : real);
var
n : integer;
u : real;
begin
u := x; n := 1; I := 0;
repeat
I := I + u;
n := n + 1;
u := -(u*x*x*(2*n - 3))/((2*n - 2)*sqr(2*n - 1))
until abs(u) < eps
end;
{----------------------------------------------------------------------------------------}
{ Функция вычисления порядка - кол-во знаков после запятой }
Function
t(eps : real) : integer;
var
k : integer;
begin
k := -1;
repeat
eps := eps*10;
k := k + 1
until eps > 1;
t := k
end;
{----------------------------------------------------------------------------------------}
begin
write('Введите значение аргумента x '); readln(x);
write('Введите точность вычисления '); readln(eps);
Integral(x, eps, I);
writeln('Значение интеграла равно ', I:6:t(eps))
end.
Задание 6
Вычислить с помощью разложения в ряд интеграл
![](image/image886.gif)
5.1. Полный эллиптический интеграл 2-го рода
Полный эллиптический интеграл 1-го рода
![](image/image887.gif)
Полный эллиптический интеграл 2-го рода
![](image/image888.gif)
Поставим задачу разложить эти интегралы по степеням модуля k (0 < k < 1). Для этого, положим в формуле интеграла 1-го рода
![](image/image889.gif)
![](image/image890.gif)
![](image/image891.gif)
Этот ряд сходится равномерно относительно
![](image/image892.gif)
![](image/image892.gif)
![](image/image893.gif)
следовательно, допустимо почленное интегрирование, получим:
![](image/image894.gif)
Аналогично, исходя из формулы
![](image/image895.gif)
найдем
![](image/image896.gif)
Ряды (1) и (2) являются частными случаями биномиального ряда при
![](image/image897.gif)
![](image/image898.gif)
Найдем рекуррентную формулу для вычисления суммы
![](image/image899.gif)
![](image/image900.gif)
![](image/image901.gif)
Процедура
Procedure Elliptic2(k, eps : real; var
Ek : real);
var
n : integer;
u : real;
begin
u := k*k/4; n := 1; Ek := 0;
repeat
Ek := Ek + u;
n := n + 1;
u := (u*k*k*(2*n - 1)*(2*n - 3))/(4*n*n);
until abs(u) < eps;
Ek := Pi*(1 - Ek)/2
end;
Программа
Program Problem3;
uses WinCrt;
var
Ek, k, eps : real;
{----------------------------------------------------------------------------------------}
Procedure
Elliptic2(k, eps : real; var Ek : real);
var
n : integer;
u : real;
begin
u := k*k/4; n := 1; Ek := 0;
repeat
Ek := Ek + u;
n := n + 1;
u := (u*k*k*(2*n - 1)*(2*n - 3))/(4*n*n);
until abs(u) < eps;
Ek := Pi*(1 - Ek)/2
end;
{----------------------------------------------------------------------------------------}
{ Функция вычисления порядка - кол-во знаков после запятой }
Function
t(eps : real) : integer;
var
k : integer;
begin
k := -1;
repeat
eps := eps*10;
k := k + 1
until eps > 1;
t := k
end;
{----------------------------------------------------------------------------------------}
begin
write('Введите значение аргумента 0 < k < 1 '); readln(k);
write('Введите точность вычисления '); readln(eps);
Elliptic2(k, eps, Ek);
writeln('Значение интеграла равно ', Ek:6:t(eps));
writeln('С точностью до ', eps:1:t(eps))
end.
Задание 7
Составить программу вычисления эллиптического интеграла 1-го рода и сравнить результат с результатом, полученным с помощью бесконечных произведений.