使用Newton Raphson在PHP中进行APR计算

时间:2013-12-30 19:47:08

标签: php apr

我正在尝试使用Newton Raphson在PHP中计算APR。我已将此问题的代码修改为php

Calculating annual percentage rate (need some help with inherited code)

然而,此问题中的公式基于初始本金,经常性每月付款和付款总数。我需要我的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 %";

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:3)

如果它只是作为常量添加到第一个月付款,只需..好吧,将其添加到计算的第一个月度期限。毕竟,付款时间表和利息应该是相同的,这只是第一个期限的额外付款。它不会影响任何其他付款或随时间退还的总金额,因为它只是一笔费用。