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として宣言したので、それにdouble(1/3)を追加すると、切り捨てられて同じ値が保持されます。

iをdoubleに変更します。

実際、すべてを2倍にする必要があります。

于 2013-03-26T01:49:05.590 に答える
1

コードに型キャスト、特にループインクリメント式i +=hに問題があります。

あなたの場合、hが値0.2のdoubleで、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 に答える