c语言函数定积分
‘壹’ c语言 求定积分的通用函数
对于一重定积分来说其求解可以使用梯形法进行求解,计算公式如下所示:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//功能:返回f(x)在积分区间[a,b]的值
//参数:FunCallBack指向用于计算f(x)的函数
//a积分区间的起始值
//b积分区间的结束值
//dx横坐标的间隔数,越小计算结果越准确
doubleCalculate(double(*FunCallBack)(doublex),
doublea,doubleb,doubledx)
{
doubledoui;
doubletotal=0;//保存最后的计算结果
for(doui=a;doui<=b;doui+=dx)
{
total+=FunCallBack(doui)*dx;
}
returntotal;
}
doublef2(doublex)
{
returnx*x;
}
doublef(doublex)
{
returnx;
}
doublef3(doublex)
{
returnx*x*x;
}
intmain()
{
doubletotal;
total=(Calculate(f,2,3,0.000001));
printf("total=%lf
",total);
total=(Calculate(f2,2,3,0.000001));
printf("total=%lf
",total);
total=(Calculate(f3,2,3,0.000001));
printf("total=%lf
",total);
return0;
}
其中,函数f,f2,f3为自行编写的关于x的被积函数。
运行结果:
total=2.500000
total=6.333331
total=16.249991
‘贰’ 用C语言求定积分
实际问题描述:
求定积分近似值
程序代码如下:
#include
#include
void main()
{
int i,n=1000;
float a,b,h,t1,t2,s1,s2,x;
printf("请输入积分限a,b:");
scanf("%f,%f",&a,&b);
h=(b-a)/n;
for(s1=0,s2=0,i=1;i<=n;i++)
{
x=a+(i-1)*h;
t1=(float)exp(-x*x/2);t2(float)=exp(-(x+h)*(x+h)/2);
s1=s1+t1*h; /*矩形面积累加*/
s2=s2+(t1+t2)*h/2; /*梯形面积累加*/
}
printf("矩形法算得积分值:%f.
",s1);
printf("梯形法算得积分值:%f.
",s2);
}
程序运行结果如下:
矩形法算得积分值:0.855821
梯形法算得积分值:0.855624
由上面的比较可知,梯形法的精度要高于矩形法。
‘叁’ C语言求定积分的问题。
根据梯形法求积分的原理,设间隔h= (b-a)/n,则积分近似计算公式为:
s = h/2 *[f(a)+f(a+h)] +h/2 *[f(a+h)+f(a+2h)] +...+h/2 *[f(b-h)+f(b)]
=h/2 *[f(a)+f(b)] + h*[ f(a+h) + f(a+2h) +f(a+3h) + ... +f(b -h)]
令积分s初始值为h/2 *[f(a)+f(b)] ,后面令i=1,...,n-1来迭代s = s+h*f(a+ih)。