📄 1008.cpp
字号:
#include <stdio.h>
#include <math.h>
double f0( double x, double l, double t )
{
return sqrt(1.0+l*l*t*t*cos(t*x)*cos(t*x));
// return l*sin(t*x);
}
double Integral(double a, double b, double (*f)(double x, double y, double z),
double eps, double l, double t);
int main()
{
double a=0.0, b, eps=0.005, l, t;
while (scanf("%lf %lf %lf", &l, &b, &t) != EOF)
printf("%f\n", Integral(a, b, f0, eps, l, t));
return 0;
}
/* Your function will be put here */
#define MaxNum 100
#define PI 3.14159265358979
double SubIntegral(double a, double b, double (*f)(double x, double y, double z), double eps, double l, double t)
{
double R1[MaxNum];
double R2[MaxNum];
double h;
double tmpSum, tmp;
double err;
int i,j,k;
int power2=1;
int power4;
bool accurate=false;
h=b-a;
R1[1]=h*(f(a,l,t)+f(b,l,t))/2.0;
for( i=2; i<MaxNum; i++, power2=power2*2 )
{
tmpSum=0.0;
for ( k=1; k<=power2; k++ )
{
tmp=a+((double)k-0.5)*h;
tmpSum+=f(tmp,l,t);
}
tmpSum=tmpSum*h;
R2[1]=(R1[1]+tmpSum)/2.0;
power4=1;
for ( j=2; j<=i; j++ )
{
power4=power4*4;
R2[j]=R2[j-1]+(R2[j-1]-R1[j-1])/(power4-1);
}
// printf("R2:\n");
// for ( j=2; j<=i; j++ )
// {
// printf("%d: %f\n",j,R2[j]);
// }
h=h/2.0;
err=fabs(R1[i-1]-R2[i]);
if ( err<eps/100&&h<1.0&&i>2)
{
if ( accurate )
break;
else
accurate=true;
}
else
accurate=false;
for ( j=1; j<=i; j++ )
R1[j]=R2[j];
}
return R2[i];
}
double Integral(double a, double b, double (*f)(double x, double y, double z), double eps, double l, double t)
{
int N;
double T;
double subInt;
double extraInt;
double result;
t = fabs(t);
b = fabs(b);
T=PI*2.0/t;
N=(b-a)/T;
if ( N==0 )
{
result=SubIntegral( a, b, f0, eps, l, t);
}
else
{
subInt=SubIntegral( a, T+a, f0, eps, l, t)*N;
if( a+T*N==b )
extraInt=0.0;
else
extraInt=SubIntegral( a+T*N, b, f0, eps, l, t);
result=subInt+extraInt;
}
return result/100.0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -