我需要一个确定债务支付计划的公式,其中包括以下内容:支付数量,每笔支付金额和本金以及需要计算利率的条件.我正在重新分解现有代码,当前方法使用以下(复合= 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++;
}
Run Code Online (Sandbox Code Playgroud)
现在我明白了这个公式的作用,但我自己永远无法达到它.这里的实际情况是,如果知道利率,本金和支付数量,那么应该用来确定每月付款的等式.它使用暴力和循环(最多100次),直到计算的付款等于所需的付款.它通常在大约40-50个循环之后得到答案,并且可以通过减少有效数字来优化.
对我来说,如果我们刚刚解决了interestRate那么就没有循环了.尽我所能,我无法得到解决我的等式,所以这是我的主要问题.
现在,如果你能够很好地理解问题并了解财务公式和复利,那么你可能会给我一个更好的解决方案,这将是非常棒的.我自己做了大量的研究并找到了工具但不是原始的等式,或者更常见的是我找到了用于确定与兴趣相关的东西的不同公式,但我不知道根据我的需要重新调整它们.
基本上我花了太多时间在这上面,我的老板认为,因为循环工作,我需要留下它或寻求帮助.很公平,所以我.:)
这是一个更传统的公式布局,如果这有助于任何:http://i.imgur.com/BCdsV.png
对于测试数据:如果
然后
谢谢您的帮助
如果你试图解决你链接到我的利率的公式,你会发现你得到一个度数为cy + 1的多项式,即支付总数加一.很难/不可能找到高阶多项式的闭合形式解,因此近似是你能做的最好的.
你给出的算法有一些很好的属性:它很清楚它在做什么,它在合理的时间内给出了正确的答案.因此,我的态度是"如果没有破坏就不要试图解决它".
如果事实证明这个算法由于某种原因太慢了,那么有些算法可以更快地收敛到正确的答案; 你可以找出你需要找到的多项式是什么,用简单的微积分求出它的导数,然后用牛顿法更快地收敛到根.但是对于这个简单的例子,答案只需要精确到四位小数,这似乎有点过分.
归档时间: |
|
查看次数: |
2690 次 |
最近记录: |