复化求积

来源:互联网 发布:淘宝怎么找指定客服 编辑:程序博客网 时间:2024/05/23 14:05
/*sinx [0,pi/2] */#include<stdio.h> #include<math.h>#define PI acos(-1)//圆周率; int n;//区间段数; double h;//步长; double f(double x){    return sin(x);}double FT(double a,double b)//复化梯形;{       double ans,x;    int i;    for(ans=0,i=1;i<=n-1;i++)    {        x=a+i*h;        ans+=f(x);    }    ans=(ans*2+f(a)+f(b))*h/2.0;    return ans;}double FS(double a,double b)//复化辛普森; {       double ans,x,xk;    int i;    x=a;xk=x+h/2;    ans=4*f(xk);    for(i=1;i<=n-1;i++)    {        x=x+h;        ans+=2*f(x);        xk=x+h/2.0;        ans+=4*f(xk);    }    ans+=f(a)+f(b);    ans=ans*h/6;    return ans;}double FC(double a,double b)//复化柯特斯; {    double ans,x,x1,x2,x3;    int i;    x=a;    x1=x+h/4;    x2=x+h/2;    x3=x+3*h/4;    ans=32*f(x1)+12*f(x2)+32*f(x3);    for(i=1;i<=n-1;i++)    {        x=x+h; ans+=14*f(x);        x1=x+h/4;        x2=x+h/2;        x3=x+3*h/4;         ans+=32*f(x1)+12*f(x2)+32*f(x3);    }    ans+=7*f(a)+7*f(b);    ans=ans*h/90.0;    return ans;}int main() {    double a=0,b=PI/2.0;    double ft,fs,fc;    printf("输入区间划分数n:");    scanf("%d",&n);    h=(b-a)/n;    ft=FT(a,b);fs=FS(a,b);fc=FC(a,b);    printf("复化梯形求积=%lf:\n",ft);    printf("复化辛普森求积=%lf:\n",fs);    printf("复化科特斯求积=%lf:\n",fc);    return 0;}
0 0