2010-04-14 3 views
4

Мне нужна формула для определения плана выплаты долга, где известны: количество платежей, сумма за платеж и основная сумма и необходимо выяснить, что представляет интерес ставка будет от этого. Я рефакторинг существующего кода и текущий метод использует следующие (усугубляются = 12; процентная ставка начинается .1):Compund interest calculator - Решите для I или есть лучшая формула

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 циклов и может быть оптимизирован за счет уменьшения значительных цифр.

Мне кажется, если мы просто решили для интереса, это не было бы циклом. Попытайтесь, как я мог, я не могу заставить уравнение решить для меня, так что это мой главный вопрос.

Теперь, если вы хорошо понимаете проблему и знаете финансовые формулы и усугубляете интерес, вы можете предоставить мне еще лучшее решение, которое было бы потрясающе. Я сам провел значительные исследования и нашел инструменты, но не сырое уравнение, или чаще всего я нахожу разные формулы для определения интересующих интересов вещей, но я не осведомлен о том, чтобы перенастроить их для моих нужд.

В принципе, я потратил слишком много времени на это, и мой босс думает, так как цикл работает, мне нужно оставить его или попросить о помощи. Достаточно справедливо, так что я. :)

Вот более традиционное расположение формулы, если это помогает любому: http://i.imgur.com/BCdsV.png

И для данных испытаний: если

  • P = 45500
  • с = 12
  • у = 3
  • м = 1400

затем

  • I = .0676

Спасибо за помощь

ответ

7

Если вы попытаетесь решить формулу, с которой вы связаны, для процентной ставки I вы обнаружите, что вы получаете полином степени cy + 1, то есть общее количество платежей плюс один. Трудно/невозможно найти решения замкнутой формы для многочленов высокой степени, поэтому наилучшим может быть аппроксимация.

Алгоритм, который вы указали, обладает некоторыми хорошими свойствами: это довольно ясно, что он делает, и дает правильный ответ в разумные сроки. Поэтому мое отношение было бы «если оно не сломано, не пытайтесь его исправить».

Если выяснилось, что по какой-то причине этот алгоритм был слишком медленным, то есть алгоритмы, которые быстрее сходятся к правильному ответу; вы могли бы выяснить, какой полином вам нужно найти корни, выработать его производную с помощью простого исчисления, а затем использовать метод Ньютона, чтобы быстрее сходиться к корням. Но для этого простого примера, где ответ должен быть точным до четырех знаков после запятой, так или иначе, это похоже на излишний.

+0

В стороне, есть несколько достаточно хороших библиотек финансовых функций C#, одним из наиболее популярных является QuantLib (http://quantlib.org/index.shtml). Также есть хороший порт функций Excel (включая финансовые), доступные по адресу: (http://code.msdn.microsoft.com/FinancialFunctions). – LBushkin

+0

Для тех, кто заинтересован, но может и не знать, доказательство того, что полиномы более высокого порядка не имеют решений замкнутой формы в терминах конечного числа дополнений, вычитаний, делений и т. Д. (За исключением некоторых особых обстоятельств) Теорема невозможности Абеля. Подробное доказательство не для слабонервных: http://en.wikipedia.org/wiki/Abel%E2%80%93Ruffini_theorem – LBushkin

0

Эта формула не может быть решена явно для I, так что вы можете прекратить попытки. С другой стороны, петля выходит за рамки здравого смысла в точности. Вы можете, конечно, остановиться, когда вы находитесь в пределах полутора процентов от суммы платежа, или когда приращение в оценке I становится ниже 0,0001, так как во время исходных расчетов было какое-то округление.