我想在你的支持下解决这个问题。 假设有一个名为$ ar的变量数组,并且在这个数组中存在5个数字,所以我想通过Pascal或PHP编程语言计算这些数字的几何平均值。我该怎么办?
答案 0 :(得分: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
答案 1 :(得分: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.
如果您想使用动态数组,则应在Delphi
或ObjectPascal
中完成此操作。
答案 2 :(得分: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
,请尝试降低它。