我正在尝试使用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 %";
提前感谢您提供任何帮助
答案 0 :(得分:3)
如果它只是作为常量添加到第一个月付款,只需..好吧,将其添加到计算的第一个月度期限。毕竟,付款时间表和利息应该是相同的,这只是第一个期限的额外付款。它不会影响任何其他付款或随时间退还的总金额,因为它只是一笔费用。