2011-09-28 896 views
6

我试图找到基于计算APR(年利率)编程方式

  • 贷款总额
  • 付款金额
  • 支付数
  • 还款频率
  • 的方式来编程计算APR

没有必要考虑任何费用。

可以假定固定利率,剩余的任何金额都可以计入最后一笔付款。

以下公式基于信用协议,信用额度为€6000欧元,每24个月分期偿还274.11欧元。

enter image description here

(实际年利率为上面的例子是9.4%)

我要寻找一个在任何编程语言的算法,我可以适应C.

任何帮助将是非常赞赏。

+0

我要成为在目标c中实现它,但我会很高兴用任何语言的答案。 – Ben

+0

另一个问题:APR方法可能会根据完整的要求而大不相同。一件简单的事情就是你是否需要考虑气球支付。另外,剩下的便士会发生什么?他们是折合成最后一笔还是以某种方式分散在最后一对?你是否必须考虑浮动利率(如ARM贷款)?各项费用是如何处理的?简而言之,您的全部要求是什么?您尝试了什么? – NotMe

+2

http://en.wikipedia.org/wiki/Annual_percentage_rate – pmg

回答

3

我想你想从你的公式计算X。这个方程可以写成

f(y) = y + y**2 + y**3 + ... + y**N - L/P = 0 

其中

X = APR 
L = Loan (6000) 
P = Individual Payment (274.11) 
N = Number of payments (24) 
F = Frequency (12 per year) 
y = 1/((1 + X)**(1/F)) (substitution to simplify the equation) 

现在,你需要解决的方程f(y) = 0得到y。这可以通过例如使用牛顿迭代(伪代码):

y = 1 (some plausible initial value) 
repeat 
    dy = - f(y)/f'(y) 
    y += dy 
until abs(dy) < eps 

的衍生物是:

f'(y) = 1 + 2*y + 3*y**2 + ... + N*y**(N-1) 

你会使用霍纳规则多项式避免幂计算f(y)f'(y)。该衍生物可能会接近几个第一项。你发现y后,你会得到x

x = y**(-F) - 1 
+0

看起来很棒 - eps代表什么? – Ben

+0

eps是少量的,例如1E-6。该解与最大绝对误差eps近似。你需要尝试一下你的情况是一个合适的eps。 – Jiri

1

下面是Objective C的代码片段,我想出了(这似乎是正确的),如果有人有兴趣:

float x = 1; 
do{ 
    fx = initialPaymentAmt+paymentAmt *(pow(x, numPayments+1)-x)/(x-1)+0*pow(x,numPayments)-totalLoanAmt; 
    dx = paymentAmt *(numPayments * pow(x , numPayments + 1) - (numPayments + 1)* pow(x,numPayments)+1)/pow(x-1,2)+numPayments * 0 * pow(x,numPayments-1); 
    z = fx/dx; 
    x=x-z; 
} while (fabs(z)>1e-9); 

apr=100*(pow(1/x,ppa)-1); 
+0

嗨本我正在寻找相同的公式。什么是ppa在这里? –

+0

Hi Nilesh,自从我写这篇文章以来已经有一段时间了!但我认为ppa是每年付款的数量。 – Ben