首先,写一个计算多项式的函数,这里的多项式是升次排列的,以方便写程序:
function polynomial($x, $parameters)
{
$n = sizeof($parameters);
$s = 0.00;
foreach (range(0, $n-1) as $i):
$s += $parameters[$i] * pow($x, $i);
endforeach;
return $s;
}
再写一个计算多项式导数的函数:
function derivative_poly($x, $parameters)
{
$n = sizeof($parameters);
$s = 0.00;
foreach (range(1, $n-1) as $i):
$s += $parameters[$i] * $i * pow($x, $i-1);
endforeach;
return $s;
}
php支持递归,所以写这种迭代计算非常简单:
function solve_poly($x, $y, $parameters, $err_limit)
{
$z = polynomial($x, $parameters) - $y;
echo $z, "\n";
if (abs($z) <= $err_limit):
echo "\n";
return $x;
//echo $x, "\n";
else:
$x1 = $x - ($z / derivative_poly($x, $parameters));
return solve_poly($x1, $y, $parameters, $err_limit);
endif;
}
输入参数,然后指定初始值,目标值,以及误差最低限,开始计算一下:
$p = array(
1.82913,
0.00268,
-2.02117E-10,
4.25935E-17
);
echo solve_poly(10000, 3000, $p, 0.01), "\n";
经过四次迭代,计算结果如下: