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



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

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

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

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

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

#include "stdafx.h"

#include "stdio.h"

#include "conio.h"

#include "math.h"

double integ1(double p,double q,int m,double x);

double integ(double p,double q,int m,double x);

double simpsonmod(double a,double b,double eps,double p,double q,int m);

int _tmain(int argc, _TCHAR* argv[])

{ double p,q,a,b,int1,int2,eps;

int m;

printf("wwedite snachenia parametrow p,q,m\n");

scanf("%lf%lf%d",&p,&q,&m);

printf("\nwwedite predeli integrirowania i tochnost\n");

scanf("%lf%lf%lf",&a,&b,&eps);

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

  

printf("\nsnachenie integrala po recursiwnoi funkcii=%8.4f",int1);

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

printf("\nsnachenie integrala po metodu Simpsona=%8.4f",int2);

getch();

return 0;

}

 

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

double integ1(double p,double q,int m,double x)

{ double intg1;

if (m>=2) 

intg1=x/(2*(m-1)*pow((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)

intg1=log(fabs((p+q*x)/(p-q*x)))/(2*p*q);

return intg1;

}

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

double integ(double p,double q,int m,double x)

{ double intg;

if (m>=2) 

intg=x/(2*(m-1)*q*q*pow((p*p-q*q*x*x),m-1))

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

else if (m==1)

intg=-x/(q*q)+p/(2*q*q*q)

       *log(fabs((p+q*x)/(p-q*x)));

return intg;

}

 

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

 //по методу парабол (Симпсона)

double simpsonmod(double a,double b,double eps,double p,double q,int m)

{ int n,i;

double x,dx,sch,snch,s1,s2,i1,i2;

n=(b-a)/sqrt(sqrt(eps))+1;

if (n%2==1)n++;

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

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

sch=0;

snch=0;

dx=(b-a)/n;

for (i=1; i<=n/2; i++)

{

x=a+2*i*dx;

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

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

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

}

sch-=s2;

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

do

{

i1=i2;

n*=2;

dx=(b-a)/n;

sch+=snch;

snch=0;

for (i=1; i<=n/2;i++)

 {

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

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

 }

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

}

while (fabs(i2-i1)/3>eps);

return i2;

}

 

Задания для самостоятельной работы

Составить программу для вычисления определенного интеграла с помощью рекурсивной подпрограммы. В основной программе осуществить: ввод исходных данных - пределов интегрирования, параметра n и, в случае необходимости, параметров p (варианты 1-3, 5-8,16, 17, 19, 24-26), a (варианты 13, 14, 16-18), b (вариант 18); вычисление интеграла с помощью подпрограммы; вывод исходных данных и полученного результата с поясняющим текстом. Вычислить интеграл приближенно с точностью ε и сравнить полученные результаты. В заданиях приведены выражения для неопределенных интегралов и первообразных.

1.

 

2.         

3.  

 

4.

 

5.

 

6.  

 

7.

 

8.

 

9.

 

10.

 

11.

 

12.

 

13.

 

14.

 

15.

 

16.

 

17.

 

18.

 

19.

 

20.

 

21.

 

22.

 

23.

 

24.

 

25.

 

26.

 


Дата добавления: 2018-10-27; просмотров: 275; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!