2017-03-03 45 views
2

我找到了Riemann Sum(Midpoint)的Java語言。我的問題是,我總是得到一個錯誤的答案,應該是。與Riemann Sum中點Java的集成

例如:

一個= -5,B = 12,N = 40,結果應該是:608.9107812499999(但是我得到:535.0809101562498)

一個= -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

試試這個。此外,它是黎曼,而不是雷曼。最後,n應該是一個整數,而不是一個整數。

你錯過了更新first_mid_p到正確的位置的部分(又名部分「+ I *寬」)

Rextester鏈接: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