跪求C++大神帮忙编个程序!急需!!!感激不尽!!!

编制程序实现任意函数的面积计算。面积计算使用梯形求和近似。
1、编制通用梯形面积计算函数,积分函数、面积精度和积分上、
下作为参数传递。
2、计算函数e^x和sin2x在区间[0,2]上的积分值。要求计算面积
精度到10^-7。

说实话,比较简单。 我这会想休息一下,就简单给你写个框子吧。

typedef double (*Func) (double x);  //定义一个函数指针,注意我只简单写一个参数的函数指针。

double e_pow_x(double x) //e^x
{
    return ......;// 自己找数学库中的函数
}

double sin_2_x(double x) //sin2x
{
    return ...;//自己找数学库中的函数
}

//积分框架
double integral(Func f, double precision, double low, double high)
{
    double step = 0.0000000001, result = 0;
    for(double x = low; x < high; x += step){
        result += f(x)
    }
    return result;
}

//注意上面的积分框架并没有考虑传入的精度precision问题,这是因为精度本身是由step的大小来确定的。 积分从本质上来说是极限的求和。上面的求面积本质上可以转换为一个个的小的四边形的面积和。 step越小,越接近积分值。 至于这个接近到10^-7,就比较尴尬了。因为你并不知道step达到多小的时候,能达到这样的精度。 一个简单的方法是在外部包装一个函数。它给出一个积分的精确值,并比较这个精确值与我们积分框架得到的估计值做差。 如果精度达不到要求的精度,就继续减小step,直到达到精度为止。

double integral_real(Func f, double low, double high)
{
 //根据函数的的不同,返回积分的真实值。 
 //这个需要调用积分公式,然后带入low和high得到积分的结果
     return ....;
}

//积分框架,需要外部传入step
double integral(Func f, double step, double low, double high)
{
    double result = 0;
    for(double x = low; x < high; x += step){
        result += f(x)
    }
    return result;
}
//此函数用循环减小step的方式不断的逼近真实值,直到达到要求的精度
double approachReal(Func f, double precision, double low, double high)
{
    double step = 0.0001, real = 0.0, estimate = 0.0;
    do
    {
        step /= 2; //每次step缩小一杯
        real = integral_real(f, low, high); //真实值
        estimate = integral(f, step, low, high); //估计值
    }
    while(fabs(real, estimate) > pow(10, -7)) ; //如果真实值与估计的差距比较大的时候,进一步缩小step。
    return estimate;
}

最后的最后,作为一个程序员,一定要重申, 纸上得来终觉浅,绝知此事要躬行!!!

祝所有的程序员们happy。

追问

很感谢你的回答!真大神啊!话说可以写出完整可以运行出来的程序么?真的是急需,只要能解决就会采纳你的回答的,谢谢你!麻烦了!

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-12-01
这也太复杂了吧
第2个回答  2017-12-01
简单是简单,但是大神肯定不愿意做如此无聊的事啊。
相似回答