复合利息计算器 - 解决我或是否有更好的公式

时间:2010-04-14 18:39:30

标签: c# math finance

我需要一个确定债务支付计划的公式,其中包括以下内容:支付数量,每笔支付金额和本金以及需要计算利率的条件。我正在重新分解现有代码,当前方法使用以下内容(复合= 12;利率从.1开始):

 while (counter < 100)
    {
        intermediatePayment = (interestRate*(principal/compounded))/(1 - (1/Math.Pow(interestRate/compounded + 1,(compounded*numberOfYears))));
        interestIncrement = Math.Abs(interestRate - previousRate)/2;
        previousRate = interestRate;

        if(intermediatePayment == payment)
            break;
        if (intermediatePayment > payment)
            interestRate -= interestIncrement;
        else
            interestRate += interestIncrement;
        counter++;
    }

现在我明白了这个公式的作用,但我自己永远无法达到它。这里的实际情况是,如果知道利率,本金和支付数量,那么应该用来确定每月付款的等式。它使用暴力和循环(最多100次),直到计算的付款等于所需的付款。它通常在大约40-50个循环之后得到答案,并且可以通过减少有效数字来优化。

如果我们刚刚解决了interestRate,那么对我来说似乎没有循环。尽我所能,我无法得到解决我的等式,所以这是我的主要问题。

现在,如果你能够很好地理解问题并了解财务公式和复利,那么你可能会给我一个更好的解决方案,这将是非常棒的。我自己做了大量的研究,发现了工具,但没有找到原始的等式,或者更常见的是我找到了不同的公式来确定与兴趣相关的东西,但我不知道为了满足我的需要而重新调整它们。

基本上我花了太多时间在这上面,我的老板认为,因为循环工作,我需要留下它或寻求帮助。很公平,所以我。 :)

这是一个更传统的公式布局,如果这有助于任何:http://i.imgur.com/BCdsV.png

对于测试数据:如果

  • P = 45500
  • C = 12
  • Y = 3
  • M = 1400

然后

  • I = .0676

感谢您的帮助

2 个答案:

答案 0 :(得分:7)

如果你试图解决你为我所关联的公式(利率),你会发现你得到一个度数为cy + 1的多项式,即支付总数加一。很难/不可能找到高阶多项式的闭合形式解,因此近似是你能做到的最好的。

你给出的算法有一些很好的属性:它很清楚它在做什么,它在合理的时间内给出了正确的答案。因此,我的态度是“如果没有破坏,不要试图解决它”。

如果事实证明这个算法由于某种原因太慢了,那么有些算法可以更快地收敛到正确的答案;你可以找出你需要找到的多项式是什么,用简单的微积分求出它的导数,然后用牛顿法更快地收敛到根。但是对于这个简单的例子,答案只需要准确到四位小数,这似乎有点过分。

答案 1 :(得分:0)

I无法明确解决此公式,因此您可以停止尝试。另一方面,循环在精度上远远超出了常识。当你在支付金额的一半以内或估计的I的增量低于0.0001时,你肯定可以停止,因为无论如何在原始计算期间有一些四舍五入。