标题:计算积分
取消只看楼主
夜泊
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-10-20
结帖率:100%
 问题点数:0 回复次数:1 
计算积分
高等数学中的微积分实际为函数在区间[x0,x1]上与坐标轴x形成的阴影面积大小,可以通过离散化为微小矩形逐渐逼近的方式去计算。试编程计算函数f(x)=ax4+bx3+cx2+dx+e 在区间[x0,x1]上的积分值。提示计算时将[x0,x1]区间等分为N个区间。从键盘输入参数a,b,c,d,e以及区间起点x0和终点x1,计算不同N=10,100,1000,10000…时的积分值,直到最后的积分值变化不超过前一个积分值的1%,输出最终积分值即可。

要求:键盘输入数据顺序依次为:a,b,c,d,e,x0,x1;   输出格式为精确到小数点后4位。
2016-12-21 17:56
夜泊
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-10-20
得分:0 
#include"stdio.h"
#include"stdlib.h"
#include"math.h"
double f(double x,double a,double b,double c,double d,double e)
{
    return a*x*x*x*x+b*x*x*x+c*x*x+d*x+e;
}
double integ(long n,double x0,double x1,double a,double b,double c,double d,double e)
{
    double len=x1-x0,sum;
    long i;
    for(i=0;i<n;i++) sum=sum+f(x0+i/n*len,a,b,c,d,e);
    printf("%lf\n",sum*len/n);
    return sum*len/n;
}
main()
{
    double reslt,prev,x1,x0,a,b,c,d,e;
    long n=10;
    scanf("%lf,%lf,%lf,%lf,%lf,%lf,%lf",&a,&b,&c,&d,&e,&x0,&x1);
    reslt=(x1-x0)*f(x0,a,b,c,d,e);
    do{
        prev=reslt;
        reslt=integ(n,x0,x1,a,b,c,d,e);
        n=n*10;
    }while((fabs(reslt-prev)/prev)>0.01);
    printf("%.4lf\n",reslt);
}
输入0,0,0,1,0,10,12
标准答案是21.9800,但我的答案是22.2000

[此贴子已经被作者于2016-12-21 18:38编辑过]

2016-12-21 18:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-472728-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.166771 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved