Задача: Вычисление определенного интеграла

  • Автор темы Tural
  • Дата начала
T

Tural

#1
Кто нибудь может подробно обяснит мне ету прогу?К сведению, ето не моя прога. Дла получения за4ета я должен сдать ету прогу. Программа наxодит x по заданному альфа. Вот исxодниый код
C++:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double I(double x,double y,double (*f)(double));
double f(double t);
double func(double (*f)(double),double eps,double alfa);
double F(double g,double (*f)(double),double alfa);

int main(void)
{
double eps, alfa, m;
printf("vvedite epsilon: ");
scanf("%lg", &eps);
printf("vvedite alfa: ");
scanf("%lg", &alfa);
m=func(f, eps, alfa);
printf("otvet %.20lf \n", m*m);
return 0;
}
double func(double (*f)(double),double eps,double alfa)
{
double dgar=0.,j,k,h=0.5,hnew,z=0,x,d,kappa,dx,dy,s=0.,func=0;
double i1,i12,i22,i2;
int found=0;
//h-wag
// dgar - delta garantiruyuwee . . . . . . 
// j - leviy konec otrezka ....
// k - praviy konec otrezka ....
x=0;
while( 1==1 )
{
i1=I(x,x+h,f);
i12=I(x,x+h/2.,f);
i22=I(x+h/2.,x+h,f);
i2=i12+i22;
d=(i2-i1)/63.;
//d-pogrewnost
if(fabs(d)<eps) 
{ 
if( fabs(s+i2-(alfa)) <= 1.e-12) { found=1; z=x+h; break; }
//s-integr. summa
if(s+i2>(alfa)) { j=x; k=x+h; break; }
dgar+=fabs(d); 
s+=i2;
x+=h;
} else {
kappa=fabs(d)/eps;
if(kappa>1.e5)kappa=1.e5;
if(kappa<1.e-5)kappa=1.e-5;
hnew=h*0.95/pow(kappa,0.2);
h=hnew;
}
}

if(found==0)
{
while(1==1)
{
z=j+fabs(F(j,f,alfa))*(k-j)/fabs(F(k,f,alfa)-F(j,f,alfa));
if((F(z,f,alfa)<0 && F(k,f,alfa)<0) || (F(z,f,alfa)>0 && F(k,f,alfa)>0))
{ k=z; }
else { j=z; }
if((func=fabs(F(z,f,alfa)))<eps) break; 
}
}
dy=dgar+func;
dx=dy/fabs(f(z)-0.5*pow(z,0.5));
printf("dx = %lg \n",dx);
return z;
}

double f(double t)
{
double d,u;
u=sqrt(fabs(t));
d=2*(u*u*u*u-1)/(u*u*u*u+1);
return d;
}

double F(double g,double (*f)(double),double alfa)
{
double o,i;
i=(5.*f((g)/2. - sqrt(3./5.)*(g)/2.)/9. + 8.*f((g)/2.)/9. + 5.*f((g)/2. + sqrt(3./5.)*(g)/2.)/9.)*g/2.;
o=i-alfa;
return o;
}

double I(double x,double y,double (*f)(double))
{
double i,h;h=y-x;
i=(5.*f((x+y)/2. - sqrt(3./5.)*(y-x)/2.)/9. + 8.*f((x+y)/2.)/9. + 5.*f((x+y)/2. + sqrt(3./5.)*(y-x)/2.)/9.)*h/2.;
return i;
}
функцию тоже выложил. Та функция которая написано на проге упрошенная версия етой функции
 

Вложения

lazybiz

Well-known member
03.11.2010
1 339
0
#2
Транслит не приемлем! Подумай еще раз и напиши правильно.
 

DarkKnight

Well-known member
01.08.2010
653
0
#3
Кто нибудь может подробно обяснит мне ету прогу?К сведению, ето не моя прога. Дла получения за4ета я должен сдать ету прогу. Программа наxодит x по заданному альфа. Вот исxодниый код
Это не ваша программа????
Тогда полное задание пожалуйста выложите, то "находит x по заданному альфа" не говорит не о чем.
ункцию тоже выложил. Та функция которая написано на проге упрошенная версия етой функции
Упрощенная версия функции???? ;-)