0

我想在您的支持下解决这个问题。假设变量 $ar 中有一个数组,并且这个数组中存在 5 个数字,所以我想通过 Pascal 或 PHP 编程语言计算这些数字的几何平均值。我能怎么做 ?

4

3 回答 3

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例如完成。

于 2012-05-25T09:29:26.280 回答
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
于 2012-05-19T16:05:43.803 回答
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结果,请尝试降低它。

于 2015-10-14T12:16:09.543 回答