0

我正在尝试编写一个 Integrate 类,它将使用梯形规则为我提供函数的积分。出于某种原因,我从未解析为值的代码并停留在“sum + =”步骤中:

public static double Trap(int exponent, int a, int b, int n) {
    double h = (double) (b-a)/n;

    double sum = 0;
    for(int i = a; i <= b; i+=h)
        sum += (Math.pow(i, exponent) + Math.pow(i+1, exponent))/2; //trouble!

    return h * sum;
}

public static void main(String[] args) {
    System.out.println(Trap(3,1,3,10)); //integral of x^3 from 1 to 3, 
    divided into 10 parts
}
4

2 回答 2

4

您将 i 声明为 int,因此当您向其添加双精度 (1/3) 时,它会向下舍入并保持相同的值。

将 i 更改为 double。

事实上,你应该把所有东西都翻倍。

于 2013-03-26T01:49:05.590 回答
1

您的代码在类型转换方面存在问题,特别是在循环增量表达式 i+=h 上。

在您的情况下,如果 h 是值为 0.2 的双精度数,并且 i 是整数,则 0.2 将被强制转换为 0。

为了说明这一点,请尝试运行以下代码示例:

public static void main(String[] args) {

    int i = 1;
    i += 0.2;

    System.out.println(i); // will always output 1
}
于 2013-03-26T01:52:37.323 回答