Калькулятор процентных ставок - Решите для меня или есть лучшая формула - PullRequest
4 голосов
/ 14 апреля 2010

Мне нужна формула для определения плана погашения долга, в котором известны следующие данные: количество платежей, сумма платежа и основная сумма, и мне необходимо выяснить, какая процентная ставка будет из этого. Я перефакторинг существующего кода, и текущий метод использует следующее (составлено = 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 циклов, и его можно оптимизировать, уменьшив значащие цифры.

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

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

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

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

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

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

тогда

  • I = .0676

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

Ответы [ 2 ]

7 голосов
/ 14 апреля 2010

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

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

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

0 голосов
/ 14 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...