Sa函数在全时域积分怎么算

如题所述

第1个回答  2010-08-17
理论解 3.141592653589793238.....

计算机 只能算到有限区段,因为计算机有最大数值限制。
下面用辛普森公式积分。

#include<stdio.h>
#include<stdlib.h>
#include <math.h>

double fsimpf(double x)
{
if ( fabs(x) < 1e-10) return 1.0;
return sin(x) /x ;
}

double fsimp(double a,double b,double eps)
{
int n,k;
double h,t1,t2,s1,s2,ep,p,x;
n=1; h=b-a;
t1=h*(fsimpf(a)+fsimpf(b))/2.0;
s1=t1;
ep=eps+1.0;
while (ep>=eps)
{
p=0.0;
for (k=0;k<=n-1;k++)
{
x=a+(k+0.5)*h;
p=p+fsimpf(x);
}
t2=(t1+h*p)/2.0;
s2=(4.0*t2-t1)/3.0;
ep=fabs(s2-s1);
t1=t2; s1=s2; n=n+n; h=h/2.0;
}
return(s2);
}
void main()
{
double a,b,eps,t;
a= -4000.0; b= 4000.0; eps= 1e-10;
t=fsimp(a,b,eps);
printf("%e\n",t);
printf("\n Press any key to quit...");
getch();
}
得 3.141958
你可以加大 a,b 区间范围,得更精确的解。本回答被提问者采纳
第2个回答  2010-08-17
Sa是1×1方波的傅立叶变换, 所以它的积分就是1咯

上面说那个好像只是系数有点不同, 我记得Sa(x) = sin(pi x)/ (pi x)