2012-05-19 66 views
0

我想用您的支持來解決這個問題。 假設變量中有一個名爲$ ar的數組,並且在該數組中存在5個數字,所以我想通過Pascal或PHP編程語言計算這些數字的幾何平均值。我能怎麼做 ?如何計算幾何平均值(pascal或php)

回答

1

這裏是PHP版本:

function geometric_average($a) { 
    foreach($a as $i=>$n) $mul = $i == 0 ? $n : $mul*$n; 
    return pow($mul,1/count($a)); 
} 

//usage 
echo geometric_average(array(2,8)); //Output-> 4 
+0

非常感謝,這對我來說很有用,誰能在pascal上做到這一點? – xaal

+0

@ user1405203:如果您瞭解該算法,則可以使用支持浮點數學的任何語言來實現該算法。你有沒有嘗試自己寫一個帕斯卡版本? –

+0

請注意,'N'數字的幾何平均值只是所有數字乘積的第N個根。 –

1

在 「標準」 Pascal可能的解決辦法:

program GeometricAvarage; 

const SIZE = 5; 

function GeoAvg(A:array of real):real; 
var 
    avg: real; 
    i: integer; 

begin 
avg := 1; 
for i:=0 to (SIZE) do 
    avg := avg * A[i]; 
avg :=Exp(1/SIZE*Ln(avg)); 
Result:=avg; 
end; 

begin 

var 
ar: array [1..SIZE] of real :=(1,2,3,4,5); 

writeln('Geometric Avarage = ', GeoAvg(ar)); {Output should be =~2.605} 
readln; 
end. 

如果你想使用動態數組這應該在DelphiObjectPascal例如來完成。

0

對於有問題的人,正如我在PHP答案的評論中指出的那樣,這個答案可能不適合每個人,特別是那些希望找到大數或大數的幾何平均數/平均數的人因爲PHP不會存儲它。

很容易的解決辦法是初始陣列分成塊,計算平均值,然後乘以他們:

function geometricMean(array $array) 
{ 
    if (!count($array)) { 
     return 0; 
    } 

    $total = count($array); 
    $power = 1/$total; 

    $chunkProducts = array(); 
    $chunks = array_chunk($array, 10); 

    foreach ($chunks as $chunk) { 
     $chunkProducts[] = pow(array_product($chunk), $power); 
    } 

    $result = array_product($chunkProducts); 
    return $result; 
} 

10 - 這是一個塊元素的數量,你可能會改變,如果你需要這樣做。如果您因此得到INF,請嘗試降低該值。