import platform
platform.platform()
platform.python_version()
Funkcija IRR_regula_falsi
određuje IRR projekta metodom regule falsi. Funkcija ima sljedeće parametre:
novac
- lista novčanih tokova $F_0,F_1,F_2,\dotsc$ tijekom godina.a
- donja granica za IRR. Unosi se kamatna stopa bez znaka postotka.b
- gornja granica za IRR. Unosi se kamatna stopa bez znaka postotka.delta
- preciznost na koju želimo izračunati IRR. Po defaultu je stavljeno delta=10e-5
.niter
- Maksimalni dozvoljeni broj iteracija. Po defaultu je stavljeno niter=100
. Nakon što vrijednosti susjednih dviju iteracija za IRR budu na udaljenosti manjoj od delta
ili broj iteracija prijeđe vrijednost niter
, tada se prekida izvođenje funkcije. Zadnju vrijednost možemo uzeti za aproksimacuiju IRR-a projekta.decimale
- Na koliko decimala želimo ispisati rezultate. Po defaultu je stavljeno decimale=5
.izlaz
- u kojem obliku želimo ispisati korake algoritma. Ako je izlaz='rjecnik'
, tada se rezultati ispisuju u obliku rječnika. Ako je izlaz='html'
, tada se rezultati ispisuju u obliku html tablice. Dakle, funkcija na izlazu vraća svaki korak provedene iteracije.import numpy as np
from ipy_table import *
def fun(p,novac):
return np.npv(p/100,novac)
def IRR_regula_falsi(novac,a,b,delta=10e-5,niter=100,decimale=5,izlaz='rjecnik'):
if fun(a,novac)*fun(b,novac) > 0:
return "Error: f(a)*f(b)>0"
broj_iteracija = 0
A = []
B = []
C = [a,b]
F = [fun(a,novac),fun(b,novac)]
while ((abs(C[-1]-C[-2]) > delta)) and (broj_iteracija <= niter):
broj_iteracija += 1
A.append(a)
B.append(b)
C.append((a*fun(b,novac)-b*fun(a,novac))/(fun(b,novac)-fun(a,novac)))
F.append(fun(C[-1],novac))
if fun(a,novac) * fun(C[-1],novac) < 0:
b = C[-1]
else:
a = C[-1]
if izlaz == 'rjecnik':
np.set_printoptions(suppress=True,precision=decimale)
return {'a':np.around(A,decimale), 'b':np.around(B,decimale), 'c':np.around(C,decimale), 'NPV':np.around(F,decimale)}
elif izlaz == 'html':
tablica = list(zip(range(-1,broj_iteracija+1),[' ',' '] + A,[' ',' '] + B,C,F))
tablica = [[' ','a','b','c<sub>i</sub','NPV']] + tablica
tablica=make_table(tablica)
apply_theme('basic_both')
set_global_style(align='center')
set_global_style(float_format='%0.{}f'.format(decimale))
return tablica
Banka mora odlučiti između dviju investicija u iznosu od 200 000 € čiji novčani tokovi su procijenjeni u sljedećoj tablici.
projekt | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
A | -200 000 | 80 000 | 60 000 | 70 000 | 100 000 | 100 000 |
B | -200 000 | 30 000 | 85 000 | 95 000 | 90 000 | 85 000 |
projektA=[-200000,80000,60000,70000,100000,100000]
projektB=[-200000,30000,85000,95000,90000,85000]
IRR_regula_falsi(projektA,25,30,niter=10,izlaz='html')
IRR_regula_falsi(projektA,25,30,niter=10)
IRR_regula_falsi(projektA,25,30,niter=10,izlaz='html',decimale=12)
IRR_regula_falsi(projektA,25,30,niter=10,decimale=12)
IRR_regula_falsi(projektB,20,25,niter=10,izlaz='html')
IRR_regula_falsi(projektB,20,25,niter=10)
IRR_regula_falsi(projektB,20,25,niter=10,izlaz='html',decimale=12)
IRR_regula_falsi(projektB,20,25,niter=10,decimale=12)