4

我需要一个公式来确定债务偿还计划,其中已知以下内容:付款次数、每次付款金额和本金,并且需要从中计算出利率。我正在重构现有代码,当前方法使用以下(复合 = 12;利率从 0.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
  • 米=1400

然后

  • 我 = .0676

谢谢您的帮助

4

2 回答 2

7

如果您尝试求解与 I 相关的公式,即利率,您会发现您得到一个 cy+1 次的多项式,即付款总数加一。很难/不可能找到高次多项式的封闭形式解决方案,因此近似值是您能做的最好的。

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

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

于 2010-04-14T19:57:44.897 回答
0

这个公式不能明确求解I,所以你可以停止尝试。另一方面,循环的精度远远超出了常识。当您在付款金额的一半以内或估计的增量I低于 0.0001 时,您当然可以停止,因为无论如何在原始计算过程中都有一些舍入。

于 2010-04-14T18:54:55.923 回答