如果您需要更高维的对角线长度(范数),您可以利用 sqrt(x*x+y*y+z*z) == sqrt(x*x+sqrt(y*y+z*z)) 的事实。换句话说,hypot(x, y, z)==hypot(x, hypot(y, z))。
为了通用性,...
<?php
function norm(...$args)
{
return array_reduce($args, 'hypot', 0);
}
?>
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
hypot — 计算直角三角形的斜边长度
hypot() 返回具有长度为 x
和 y
的边的直角三角形的斜边长度,或点 (x
, y
) 到原点的距离。这等效于 sqrt($x*$x + $y*$y)
。
x
第一条边的长度
y
第二条边的长度
计算出的斜边长度
如果您需要更高维的对角线长度(范数),您可以利用 sqrt(x*x+y*y+z*z) == sqrt(x*x+sqrt(y*y+z*z)) 的事实。换句话说,hypot(x, y, z)==hypot(x, hypot(y, z))。
为了通用性,...
<?php
function norm(...$args)
{
return array_reduce($args, 'hypot', 0);
}
?>
一个更简单的方法是允许任意数量的参数。这将允许您想要的任意数量的维度 *并且* 它将与当前实现向后兼容。
<?php
function hypo()
{
$sum = 0;
foreach (func_get_args() as $dimension) {
if (!is_numeric($dimension)) return -1;
$sum += pow($dimension, 2);
}
return sqrt($sum);
}
print hypo(); // 0 维向量,大小 = 0。
print hypo(1); // 1 维向量,大小 = 1。
print hypo(3, 4); // 2 维向量,大小 = 5。
print hypo(2, 3, 6); // 3 维向量,大小 = 7。
?>