2014-02-21 83 views
0

試圖找出如何實現左總和。一直在這工作幾個小時,並不知道,請幫助。我從左邊總和得到0.0middleSum是好的,我用它來檢查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

如果沒有你正在傳遞有什麼樣的參數的任何細節(特別是什麼'fct'確實......)我們無法真正幫助你。 –

+0

對不起。 fct是一個函數(x * x)a = 0 b = 2和n是矩形的數量是100 – FancyPants

回答

1

我得到0.0從左邊和

我想這是因爲在這裏:

x=(i-1)/n; 

你在這裏執行整數除法。將一側更改爲雙重執行浮點計算。

x=(i-1.0)/n; 
+0

好吧..但是當middleSum給出結果2.666600000000003時,我得到0.6371000000000003 – FancyPants

+0

@FancyPants然後現在是另一個問題..當然你的邏輯:) –

+0

你可能其實是指:x = a + i * deltax/n – hivert

0

我不明白爲什麼你的左代碼看起來與右圖不一樣。硅的右邊,你可以說:

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而不是轉移。

這裏writen代碼返回:

Java Main2Integrate 
2.666600000000003 
2.666600000000003 

在我的機器。

+0

我從老師那裏拿到了第一個,所以我沒有編輯它並保持原樣。 – FancyPants

+0

所以第二個是非常相似的bu,'x'被'-deltax/2.0'移動。如果你想正確的總和開始'x = a + deltaX'。畫一幅畫,它應該變得清晰。 – hivert

+0

是不是剩下的一個x-i? – FancyPants

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; 
} 
+0

因此得到131.34。 middleSum給出2.666600000000003 – FancyPants

+0

@FancyPants:不與代碼寫在這裏。請注意,不要混合兩個建議的解決方案! – hivert

+0

@hivert對不起,剛開始第二學期的java。再次感謝! – FancyPants