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:[EMAIL PROTECTED] 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:[EMAIL PROTECTED] > 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:[EMAIL PROTECTED] >> 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: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
