数值积分方法的C语言实现和验证(数值计算方法)

一  复合梯形公式

数值积分方法的C语言实现和验证(数值计算方法)

二  复合辛普森公式

数值积分方法的C语言实现和验证(数值计算方法)

三  C语言程序实现

#include <stdio.h>
#include <math.h>
typedef float (*funType)(float x);
float fun(float x)       //测试算例函数
{
    return x*x;
}
float SnFun(funType fp,float a,float b,int n)  //辛普森求积公式子函数
{
    float S1=0,S2=0,Sn=0,h;
    int k=0,m;
    h=(b-a)/n;
    while(k<n)
    {
        S1=S1+4*fp(a+(k+0.5)*h);
        k++;
        printf("k=%d S1=%f\n",k,S1);
    }
    k=1;
    while(k<n)
    {
        S2=S2+2*fp(a+k*h);
        k++;
        printf("k=%d S2=%f\n",k,S2);
    }
    Sn=h/6*(S1+S2+fp(a)+fp(b));    
    printf("k=%d Sn=%f\n",k,Sn);
    
    return Sn;
}
float TnFun(float (*fun)(float x),float a,float b,int n) //梯形求积公式子函数
{
    float Tn,h;
    int k=1;
    funType fp;
    h=(b-a)/n;
    while(k<n)
    {
        Tn=Tn+h*(*fun)(a+k*h);    
        printf("k=%d Tn=%f\n",k,Tn);
        ++k;
    }
    Tn=Tn+0.5*h*(fp(a)+fp(b));    
    return Tn;
}


int main(int argc, char *argv[])
{
    int n=30;
    float a=0,b=1;
    printf("Sn=%f\n",SnFun(fun,a,b,n));
    //printf("Tn=%f\n",TnFun(fun,a,b,n));
    printf("end!\n");
    getchar();
    
    return 0;
}

四 运行结果

数值积分方法的C语言实现和验证(数值计算方法)