我正在尝试在 PHP 中使用 Newton Raphson 计算 APR。我已将这个问题的代码修改为 php
但是,此问题中的公式基于初始本金、每月定期付款和付款总数。我需要我的 APR 计算来包括初始启动费。这将被添加到第一次每月付款中,这意味着每月付款不再完全相同。我认为这会改变原始公式,从而改变它的导数。我不知道现在使用什么作为初始公式或如何修改它
这是php
$numPay = 12;
$payment = 875;
$amount = 10000;
$error = pow(10,-5);
$approx = 0.05/12; // let's start with a guess that the APR is 5%
$prev_approx;
function f($x) {
global $numPay;
global $payment;
global $amount;
global $error;
return $amount * $x * (pow(1 + $x,$numPay)/(pow(1 + $x, $numPay) - 1)) - $payment;
}
function f_prime($x) {
global $numPay;
global $payment;
global $amount;
global $error;
return $amount * (pow(1 + $x,$numPay)/(-1 + pow(1 + $x,$numPay)) - $numPay * $x * pow(1 + $x,-1 + 2*$numPay)/pow(-1 + pow(1 + $x,$numPay),2) + $numPay * $x * pow(1 + $x,-1 + $numPay)/(-1 + pow(1 + $x,$numPay)));
}
echo f($approx) . "<br/>";
echo f_prime($approx) . "<br/>";
echo "initial guess $approx" . "<br/>";
for ($k=0;$k<20; $k++) {
$prev_approx = $approx;
$approx = $prev_approx - (f($prev_approx)/f_prime($prev_approx));
$diff = abs($approx-$prev_approx);
echo "new guess $approx diff is $diff <br/>";
if ($diff < $error) break;
}
$apr = round($approx * 12 * 10000 /100, 1); // this way we get APRs like 7.5% or 6.55%
echo "apr is $apr %";
提前感谢您的帮助