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)