2

我正在尝试在 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 %";

提前感谢您的帮助

4

1 回答 1

4

如果它只是作为常数添加到第一个月付款中,那么……好吧,从计算中将它添加到第一个月的期限。毕竟还款时间和利息应该是一样的,只是第一期的附加款而已。它不会影响任何其他付款或随着时间的推移要偿还的总金额,因为它只是一种费用。

于 2013-12-30T19:49:42.177 回答