如题所述
思路就是将区间无限细分
小区间梯形就可以看成矩形,小矩形所有面积相加,就是定积分
#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
结果正确。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2013-04-15
积分的实质就是求面积。
0-1区间可知y是正数,也就是这部分面积都在第一区间。
那么面积就等于底乘以高除以二
即
(1*2)/2
所以很简单了
代码不用给了。
区间是变动的话才有可能输入一个参数,然后算积分吧。
0-1区间可知y是正数,也就是这部分面积都在第一区间。
那么面积就等于底乘以高除以二
即
(1*2)/2
所以很简单了
代码不用给了。
区间是变动的话才有可能输入一个参数,然后算积分吧。
第2个回答 2013-04-15
1、将[0, 1]等分成n份,在每一个小区间上直接计算梯形面积(上下底为(x^3)/3.0),并合并求和;
2、将闭区间[0, 1]等分成(2 * n)份,重复上述操作;
3、上述两步的结果做差,如果小于,如: 1e-6,那么输出第二步的结果;否则继续加倍等分区间重复操作本回答被提问者采纳
2、将闭区间[0, 1]等分成(2 * n)份,重复上述操作;
3、上述两步的结果做差,如果小于,如: 1e-6,那么输出第二步的结果;否则继续加倍等分区间重复操作本回答被提问者采纳