黎曼留下了总和

时间:2014-02-21 21:53:33

标签: java math

试图弄清楚如何实现左和。已经工作了好几个小时,不知道,请帮忙。我从左边的总和中得到0.0middleSum没问题,我用它来检查leftSum是否有效。但它没有。 *编辑 leftSum方法不正确,我仍在搞清楚,如果有人会帮忙并解释如何做leftSum那将会很好

public static double middleSum(Function fct, double a, double b, int n) {
    double deltaX = (b - a) / n;
    double x = a + deltaX / 2.0;
    double sum = 0.0;

    for (int i = 0; i < n; i++) {
        sum = sum + fct.f(x);
        x = x + deltaX;
    }

    return sum * deltaX;
}

public static double lefSum(Function fct, double a, double b, int n) {
    double deltaX = (b - a) / n;
    double x=0.0;
    double sum = 0.0;
    for (int i = 0; i < n; i++) {
        x=(i-1)/n;

        sum += fct.f(x) * deltaX;
    }

    return sum;
}

3 个答案:

答案 0 :(得分:1)

  

我从左边的总和得到0.0

我想这是因为在这里:

x=(i-1)/n;

你在这里进行整数除法。将一侧更改为double以执行浮点计算。

x=(i-1.0)/n;

答案 1 :(得分:0)

我不明白为什么你的左侧代码与正确的代码有所不同。 Si为你所写的权利:

double x = a + deltaX / 2.0;
for (int i = 0; i < n; i++)
{
   sum = sum + fct.f(x);
   x = x + deltaX;
}
return sum * deltaX;

你为什么不写

public static double lefSum(Function fct, double a, double b, int n)
{
   double deltaX = (b - a) / n;
   double x=a + deltaX / 2.0;
   double sum = 0.0;
   for (int i = 0; i < n; i++)
   {
      sum = sum + fct.f(x);
      x = x + deltaX;
   }
   return sum*deltaX;
}

左边的总和? 我从x=a开始而不是转移,这是相同的代码。

这里写的代码返回:

Java Main2Integrate 
2.666600000000003
2.666600000000003

在我的机器上。

答案 2 :(得分:0)

左黎曼和

对于左黎曼和,通过其在左端点的值来近似函数给出具有基数Δx和高度f(a +iΔx)的多个矩形。对i = 0,1,...,n - 1执行此操作,并将结果区域相加得出

http://en.wikipedia.org/wiki/Riemann_sum#Left_Riemann_Sum

public static double lefSum(Function fct, double a, double b, int n)
{
   double deltaX = (b - a) / n;
   double x=0.0;
  double sum = 0.0;
  for (int i = 0; i < n; i++)
  {


     x = a + i * deltaX;

     sum += fct.f(x) * deltaX;

  }

  return sum;
}