Well I am getting close with your suggestions.
It seems to be calculating values just a little low. Perhaps my formula is
not quite right. Just to be clear, why did you drop the denominator?
As an example of current results, if the output should be 5% and then get
higher as loanExpenses goes up, it is calculating about 4.7% and then gets
higher as loanExpenses go up (but it stays low).
-Dave
-----Original Message-----
From: Luc Maisonobe [mailto:Luc.Maisonobe@free.fr]
Sent: Saturday, August 16, 2008 4:14 PM
To: Commons Users List
Subject: Re: commons-math usage to calculate APR?
David Hoffer a écrit :
> Hum, simple I'm sure but perhaps calculating APR is not quite that simple;
> you have to factor in loan expenses (that's why APR is not the same as
> interest rate).
>
> I think it is something like:
>
> P' = (P+E)I(1+i)^n/(1+i)^n
>
> Then you solve for APR with the non-linear function which is something
like:
>
> ((a(1+a)^n)-(P'/P))/((1+a)^n-1) = 0
>
> Where a=ARR/12
In order to solve this, you can first drop the denominator (which is non
null if a is non null). You end up with:
a(1+a)^n - P'/P = 0
Solving this using for any commons-math solver (for example BrentSolver)
could probably be done as follows:
final double p = ...;
final double pPrime = ...;
final int n = ...;
UnivariateRealFunction equation = new UnivariateRealFunction() {
public double value(double x) {
return x * Math.pow(1 + x, n) - pPrime / p;
}
};
UnivariateRealSolver solver = new BrentSolver(equation);
double apr = solver.solve(0.001, 0.999);
Using final variables for p, pPrime and n allow to refer to them
directly in the anonymous class defined by the new
UnivariateRealFunction call. If you prefer a more elegant solution, you
can create a dedicated class implementing the UnivariateRealFunction and
that would use private fields to hold these values.
Luc
>
> Calculating P' is straightforward. Solving for a is where I'm not clear,
> plus I'm not certain of the math above.
>
> -Dave
>
> -----Original Message-----
> From: Bear Giles [mailto:bgiles@coyotesong.com]
> Sent: Saturday, August 16, 2008 3:40 PM
> To: Commons Users List
> Subject: Re: commons-math usage to calculate APR?
>
> There are closed-form expressions for that, although I don't have them
> off the top of my head. Something like
>
> m = P / (1 - i)^n
>
> or maybe
>
> m = P / ((1 + i)^n - 1)
>
> where m is monthly payment, P is principal, i is monthly interest, n is
> number of months. It's definitely not very complex for a simple
> fixed-term, fixed-rate loan.
>
> Bear
>
> David Hoffer wrote:
>> My usage is for USA only at this point.
>>
>> I have inputs of loanAmount, monthlyInterestRate, numberMonths, loanFees;
> so
>> this would be for fixed monthly payments.
>>
>> I understand that commons-math doesn't have specific finance methods
> however
>> I think the APR formula is a non-linear equation that I was hoping
>> commons-math could help solve.
>>
>> -Dave
>>
>> -----Original Message-----
>> From: Luc Maisonobe [mailto:Luc.Maisonobe@free.fr]
>> Sent: Saturday, August 16, 2008 2:45 PM
>> To: Commons Users List
>> Subject: Re: commons-math usage to calculate APR?
>>
>> David Hoffer a écrit :
>>
>>> Can anyone point me to an example of how to use commons-math to
calculate
>>> APR (Annual Percentage Rate)?
>>>
>> There are no specific finance related algorithm in commons-math.
>>
>>
>>> I think this is solvable using either the NewtonSolver or
BisectionSolver
>>> but I am not sure how to accomplish this. Perhaps a different way is
>>> better.
>>>
>> I think so, but it depends on what you really need. APR computation
>> seems to be slightly different depending on local regulations (for
>> example USA or EU). It also depends on the assumptions you do and the
>> input data. For example you can compute it one way for fixed monthly
>> payments and another way for varying monthly payments.
>>
>>
>>> Any help would be greatly appreciated.
>>>
>> Could you explain your needs more precisely ?
>>
>> Luc
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org