Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Пример выполнения задания на составление рекурсивной подпрограммы

Читайте также:
  1. I Пример слияния в MS WORD 2003. Изучите материал и выполните пример на компьютере.
  2. I. Задания для самостоятельной работы
  3. I. Задания для самостоятельной работы
  4. I. Задания для самостоятельной работы
  5. I. Задания для самостоятельной работы
  6. I. Задания для самостоятельной работы
  7. I. Задания для самостоятельной работы

Вычислить значение определенного интеграла, если соответствующий неопределенный интеграл и первообразная функция имеют следующий вид [10]:

Вычисление определённого интеграла произвести двумя способами:1) с использованием приведенных выражений, вычисляемых рекурсивными подпрограммами (точное значение) и 2) с помощью численных методов (приближенно).

В основной программе необходимо осуществить ввод исходных данных – параметров p, q, m, пределов интегрирования a, b и точности ε, с которой будет вычисляться интеграл численными методами. Сравнить полученные результаты.

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

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

 

program PrimerRecPodp;

{$APPTYPE CONSOLE}

uses

SysUtils,Math;

var

p,q,a,b,int1,int2,eps:Real;

m,l,k:Integer;

 

//Рекурсивная функция вычисления второго интеграла

function Integ1(p,q:Real;m:Integer;x:Real):Real;

begin

if m>=2 then

Integ1:=x/(2*(m-1) *Power((p*p-q*q*x*x),m-1))*p*p

+(2*m-3)/(2*(m-1)*p*p)*Integ1(p,q,m-1,x)

else if m=1 then

Integ1:=Ln(Abs((p+q*x)/(p-q*x)))/(2*p*q);

end;

 

//Рекурсивная функция исходного интеграла

function Integ(p,q:Real;m:Integer;x:Real):Real;

begin

if m>=2 then

Integ:=x/(2*(m-1)*q*q*Power((p*p-q*q*x*x),m-1))

-1/(2*(m-1)*q*q)*Integ1(p,q,m-1,x)

else if m=1 then

Integ:=-x/(q*q)+p/(2*q*q*q)*Ln(Abs((p+q*x)/(p-q*x)));

end;

 

//Функция вычисления интеграла по методу парабол (Симпсона)

function SimpsonMod(a,b,eps,p,q:Real;m:Integer):Real;

var

n,i:Integer;

x,dx,sch,snch,s1,s2,i1,i2:Real;

begin

n:=Trunc((b-a)/Sqrt(Sqrt(eps)))+1;

if Odd(n) then n:=n+1;

s1:=a*a/Power((p*p-q*q*a*a),m);

s2:=b*b/Power((p*p-q*q*b*b),m);

sch:=0;

snch:=0;

dx:=(b-a)/n;

for i:=1 to n div 2 do

begin

x:=a+2*i*dx;

sch:=sch+x*x/Power((p*p-q*q*x*x),m);

x:=a+(2*i-1)*dx;

snch:=snch+x*x/Power((p*p-q*q*x*x),m);

end;

sch:=sch-s2;

i2:=(s1+s2+4*snch+2*sch)*dx/3;

repeat

i1:=i2;

n:=n*2;

dx:=(b-a)/n;

sch:=snch+sch;

snch:=0;

for i:=1 to n div 2 do

begin

x:=a+(2*i-1)*dx;

snch:=snch+x*x/Power((p*p-q*q*x*x),m);

end;

i2:=(s1+s2+4*snch+2*sch)*dx/3;

until Abs(i2-i1)/3<eps;

Result:=i2;

end;

 

begin // РАЗДЕЛ ОПЕРАТОРОВ ПРОГРАММЫ

Writeln('Введите значения параметров p,q,m');

ReadLn(p,q,m);

Writeln('Введите пределы интегрирования a,b'

+' и точность eps ');

ReadLn(a,b,eps);

int1:=Integ(p,q,m,b)-Integ(p,q,m,a);

l:=Trunc(-Log10(eps))+2;

k:=Trunc(Log10(Abs(int1)))+m+3;

Writeln('Значение интеграла по рекурсивной функции ='

,int1:k:l);

int2:= SimpsonMod(a,b,eps,p,q,m);

Writeln('Значение интеграла по методу Симпсона ='

,int2:k:l);

ReadLn;

end.


Дата добавления: 2015-07-26; просмотров: 110 | Нарушение авторских прав


Читайте в этой же книге: Процедуры | Список формальных параметров | Задания 5.1 для самостоятельной проработки | Обращение к функции | Пример 5.2 выполнения задания | Задания 5.2 для самостоятельной проработки | Динамические массивы | Примеры программ с подпрограммами |
<== предыдущая страница | следующая страница ==>
Рекурсивные подпрограммы| Параметры - открытые массивы

mybiblioteka.su - 2015-2024 год. (0.008 сек.)