PHP 牛顿法解多项式方程

首先,写一个计算多项式的函数,这里的多项式是升次排列的,以方便写程序:

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";

经过四次迭代,计算结果如下:
只需迭代四次,就得出结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值