十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
思路就是将区间无限细分
创新互联专注于开江企业网站建设,响应式网站开发,商城网站建设。开江网站建设公司,为开江等地区提供建站服务。全流程按需设计,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
小区间梯形就可以看成矩形,小矩形所有面积相加,就是定积分
#include "stdio.h"
#include "math.h"
double f(double x)//被积函数
{
return x*x;
}
double fun(double p,double q,int n)//p,q分别表示积分下上限,n为细分的区间数,越大值越精确
{
int i;
double sum=0,h=(q-p)/n;
for (i=1;i=n;i++) //f(p+i*h)*h就是小矩形的面积,加到sum上去。
sum+=f(p+i*h)*h;
return sum;
}
int main()
{
printf("(x*x)在(0,1)上定积分为%lf\n",fun(0,1,1000000));//区间数自己设越大值越精确
}
结果:
数学分析:
f(x)=x^2=x*x;
定积分:x*x*x/3+c(常数)
在区间(0,1)上定积分:1/3=0.333333
结果正确。
#includestdio.h
#includemath.h
float f1(float x)
{
return(1.0+x);
}
float f2(float x)
{
return(2.0*x+3.0);
}
float f3(float x)
{
return(exp(x)+1);
}
float f4(float x)
{
return(pow(1+x,2));
}
float f5(float x)
{
return(pow(x,3));
}
float fsimp(float a,float b,float (*p)(float))
{
float c,s;
c=(a+b)/2;
s=(b-a)/6*(p(a)+4*p(c)+p(b));
return s;
}
int main()
{
float a,b;
printf("请输入积分下限a的值:");
scanf("%f",a);
printf("请输入积分上限b的值:");
scanf("%f",b);
printf("%f\n",fsimp(a,b,f1));
printf("%f\n",fsimp(a,b,f2));
printf("%f\n",fsimp(a,b,f3));
printf("%f\n",fsimp(a,b,f4));
printf("%f\n",fsimp(a,b,f5));
}
实际问题描述:
求定积分近似值
程序代码如下:
#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.\n",s1);
printf("梯形法算得积分值:%f.\n",s2);
}
程序运行结果如下:
矩形法算得积分值:0.855821
梯形法算得积分值:0.855624
由上面的比较可知,梯形法的精度要高于矩形法。