首页 > 解决方案 > 简单矩形法算法问题

问题描述

我被要求编写一个矩形方法算法来计算函数的估计面积,但是,我的讲师将我的代码发回并要求我更正它,因为结束条件是错误的?

double prostokaty(double( *f)(double))
{
    double krok, p, suma = 0;
    krok = (c_do - c_od) / lp;
    for (p = c_od + krok; p < c_do; p += krok) {
        suma += (*f)(p);
    }
    return suma * krok;      
}

我花了将近两个小时,弄清楚出了什么问题,但我失败了。

标签: calgorithmintegral

解决方案


最好使用c_od + krok/2矩形的中间而不是右边缘c_od + krok

double prostokaty(double( *f)(double)) {
  double p, suma = 0;
  double krok = (c_do - c_od) / lp;
  // for (p = c_od + krok; p < c_do; p += krok) {
  for (p = c_od + krok/2; p < c_do; p += krok) {
    suma += (*f)(p);
  }
  return suma * krok;      
}

如果lp是整数类型,最好避免累积增量错误。

  double suma = 0;
  double krok = (c_do - c_od) / lp;
  for (int i = 0; i < lp; i++) {
    double p = c_od + (i + 0.5)*krok;
    suma += f(p);
  }
  return suma * krok;      

推荐阅读