I think I have a solution.  I would like to use a simpler example, and let you 
(Noli) work out the details for IRR.



It is well known, and your links show how, to use Newton's algorithm (aka 
Newton Raphson's algorithm) to find the IRR, since it's really find a root of a 
polynomial (see the other post by Jeffery Kantor, which also describes the fact 
that depending on the cash flows, there could be multiple solutions).



For my simpler example, suppose you wanted to find, in GLPK, the square root of 
"n".  This is the same as solving for the root of the function f(x) = x*x -n .



Newton's algorithm, in general, is where you begin with a reasonable 
approximate, say x_0 = n/2, then iterate until convergence:



                x_(k+1) = x_k - f(x_k)/f'(x_k)



In our case, f'(x) = 2x, so   x - f(x)/f'(x) = x/2 + n/(2x),



It would be nice to have, after the "solve" statement, the ability to say 
something like the following in GLPK (note that I hardcoded 10 iterations):



param n:=16;



param x := n/2;

for{k in 1..10} {

  let x := x/2 + n/(2*x);

}



printf "Sqrt of %f = %f\n", n, x;



But GLPK doesn't allow the "let" statement.  I believe that AMPL does.



So a workaround, that seems to work is:



param xx{i in 0..10} := if i=0 then n/2 else xx[i-1]/2 + n/(2*xx[i-1]);



printf "Sqrt of %f = %f\n", n, xx[10];



Again, the number of iterations is hardcoded, but hopefully you would be able 
to code the Newton's iteration exactly the above.



Lastly, because of the possibility of multiple solutions, you should start (the 
if i=0 then clause ) with a good first solution, mostly likely the interest 
rate you used for the NPV calculation.



-Marc



-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of 
Noli Sicad
Sent: Friday, September 14, 2012 11:27 AM
To: [email protected]
Subject: [Help-glpk] IRR (Internal Rate of Return) using MathProg



Hi,



I like to incorporate IRR (Internal Rate of Return) in my report (i.e.

Report Section of my LP GLPK/MathProg model). I don't how to do this using 
mathprog



Linux Journal has article in IRR and programs in Java, C and Perl. You can 
download the source here.

http://www.linuxjournal.com/article/2545



However, I have difficulties deciphering it.



Some discussions on various methods on how to calculate IRR.

http://finance.thinkanddone.com/irr.html



My LP model is maximizing Net Present Value (i.e. revenues / Cash flow). Here 
is example of the cash flow (below).



Anybody like to have a go with this problem?



Thanks in advance.



Noli



##########################

Period (Year)     Cash Flow ($)

1              39076.42996

2              21948.87949

3              21957.06148

4              21817.10073

5              22434.00213

6              25217.30759

7              28801.0362

8              33663.80729

9              39526.52516

10           47082.82071

11           52139.3562

12           55712.83969

13           54963.69578

14           54197.3533

15           53469.32228

16           52777.66322

17           52120.61624

18           51496.4058

19           50903.35207

20           50340.01419

21           49804.81457

22           49296.50083

23           48813.47914

24           48814.3007

25           48907.10984

26           49105.38398

27           49426.2852

28           49890.16458

29           50521.35707

30           51349.79884

31           52411.43084

32           53749.2502

33           54080.18986

34           53474.36278

35           53848.60448

36           54417.4497

37           55213.81919

38           56277.52781

39           57656.46566

40           57792.59562

41           56875.42409

42           57304.41377

43           56658.08866

44           55805.88753

45           55531.78289



_______________________________________________

Help-glpk mailing list

[email protected]<mailto:[email protected]>

https://lists.gnu.org/mailman/listinfo/help-glpk

________________________________
This e-mail and any attachments may be confidential or legally privileged. If 
you received this message in error or are not the intended recipient, you 
should destroy the e-mail message and any attachments or copies, and you are 
prohibited from retaining, distributing, disclosing or using any information 
contained herein. Please inform us of the erroneous delivery by return e-mail. 
Thank you for your cooperation.
_______________________________________________
Help-glpk mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-glpk

Reply via email to