2017-03-03 3 views
2

私はJavaでRiemann Sum(Midpoint)を見つけ出しました。私の問題は、私はいつも間違った答えを得るということです。Riemann Sum Midpoint Javaとの統合

例えば:608.9107812499999(しかし、私は得る:535.0809101562498)

= -5、B = 12、N = 40、結果があるべきである

= -5、B = 12 、N = 200、結果べきこと:609.1564312500013(しかし、私は得る:555.8486222812485)

機能は次のとおりです。^ 2 - + 3

ここに私のコードです:

public static double intReiman(double a, double b, double n){ 
    double width = (b - a)/n; 
    double sum = 0.0; 


    for (int i = 0; i <= n; i++) { 
     double first_mid_p=a + width/2.0; 
     sum = sum + (first_mid_p*first_mid_p-first_mid_p+3); 
    } 

    return sum * width; 
} 


public static void main(String[] args){ 

    System.out.println(
      intReiman(-5.0,12.0,40.0) 

      ); 
} 

お返事ありがとうございます!

+0

を積分を計算する? – DVT

+1

デバッガをステップバイステップで実行し、各ステップですべてが等しくなることをすべて確認していますか?デバッグを学ぶことはプログラムの学習の重要な部分です。 – yshavit

+1

あなたのループで 'i'を使用していない場合、まったく同じことをn回実行しています:(myThing)*(n + 1)だからあまり役に立たないです – azro

答えて

2

これを試してください。また、それはReimanではなく、Reemannです。最後に、nは整数でなければならず、倍数でなければなりません。

(一部別名「+ iの幅*」)

Rextesterリンクあなたは正しい場所にfirst_mid_pの更新の一部を逃した:あなたがしようとしている機能は何http://rextester.com/FMI50088

public static double intRiemann(double a, double b, double n){ 
    double width = (b - a)/n; 
    double sum = 0.0; 

    for (int i = 0; i < n; i++) { 
     double first_mid_p=a + (width/2.0) + i * width; 
     sum = sum + (first_mid_p*first_mid_p-first_mid_p+3); 
    } 

    return sum * width; 
} 


public static void main(String[] args){ 
    System.out.println(intRiemann(-5.0,12.0,40.0)); 
} 
+0

@yshavit OPコードに何が間違っていたかについての説明を追加しました。ありがとう。 – DVT