数值积分方法的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;
}
四 运行结果