试图弄清楚如何实现左和。已经工作了好几个小时,不知道,请帮忙。我从左边的总和中得到0.0
。 middleSum
没问题,我用它来检查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;
}
答案 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;
}