import platform
platform.platform()
platform.python_version()
import matplotlib
matplotlib.__version__
from pylab import *
import numpy as np
np.__version__
from ipy_table import *
Funkcija amortizacija
daje amortizacijsku osnovicu za zadanu vremensku metodu amortizacije. Funkcija ima sljedeće parametre:
C
- početna vrijednost dobraS
- otpisna vrijednost dobran
- broj godina trajanja amortizacijemetoda
- vrsta vremenske amortizacije. Po defaultu je stavljeno metoda='LIN'
što znači da se radi o linearnoj amortizaciji. Ako stavimo metoda='SZ'
, tada se radi amortizacija metodom sume znamenaka. Ako stavimo metoda='KP'
, tada se radi amortizacija metodom konstantnog postotka.decimale
- Na koliko decimala želimo ispisati rezultate. Po defaultu je stavljeno decimale=2
.izlaz
- u kojem obliku želimo ispisati amortizaciju. Ako je izlaz='rjecnik'
, tada se rezultati ispisuju u obliku rječnika. Ako je izlaz='html'
, tada se rezultati ispisuju u obliku html tablice.def amortizacija(C,S,n,metoda='LIN',izlaz='html',decimale=2):
rjecnik = {0:{'R':0,'D':0,'B':C}}
if metoda == 'LIN':
Rk = round((C - S) / n, decimale) if (decimale > 0) else int((C - S) / n)
for k in range(1,n+1):
rjecnik[k] = {}
rjecnik[k]['R'] = Rk
rjecnik[k]['D'] = round(rjecnik[k-1]['D'] + Rk, decimale) if (decimale > 0) else int(rjecnik[k-1]['D'] + Rk)
rjecnik[k]['B'] = round(C - rjecnik[k]['D'], decimale) if (decimale > 0) else int(C - rjecnik[k]['D'])
elif metoda == 'SZ':
suma = sum(range(1,n+1))
for k in range(1,n+1):
rjecnik[k] = {}
Rk = round((n - k + 1) / suma * (C - S),decimale) if (decimale > 0) else int((n - k + 1) / suma * (C - S))
rjecnik[k]['R'] = Rk
rjecnik[k]['D'] = round(rjecnik[k-1]['D'] + Rk, decimale) if (decimale > 0) else int(rjecnik[k-1]['D'] + Rk)
rjecnik[k]['B'] = round(C - rjecnik[k]['D'], decimale) if (decimale > 0) else int(C - rjecnik[k]['D'])
elif metoda == 'KP':
d = 100 * (1 - (S / C)**(1/n))
for k in range(1,n+1):
rjecnik[k] = {}
Rk = round(rjecnik[k-1]['B'] * d /100, decimale) if (decimale > 0) else int(rjecnik[k-1]['B'] * d /100)
rjecnik[k]['R'] = Rk
rjecnik[k]['D'] = round(rjecnik[k-1]['D'] + Rk, decimale) if (decimale > 0) else int(rjecnik[k-1]['D'] + Rk)
rjecnik[k]['B'] = round(C - rjecnik[k]['D'], decimale) if (decimale > 0) else int(C - rjecnik[k]['D'])
else:
return "varijabla 'metoda' mora poprimiti neku od tri vrijednosti: 'LIN', 'SZ', 'KP'"
if izlaz == 'rjecnik':
return rjecnik
elif izlaz == 'html':
tablica = [['$k$','$R_k$','$D_k$','$B_k$'],[0,'$-$','$-$',C]]
for k in range(1,n+1):
tablica.append([])
tablica[-1].extend([k,rjecnik[k]['R'],rjecnik[k]['D'],rjecnik[k]['B']])
tablica = make_table(tablica)
apply_theme('basic')
set_global_style(align='center')
set_global_style(float_format='%0.{}f'.format(decimale))
return tablica
Funkcija funkcionalna_amortizacija
daje amortizacijsku osnovicu za funkcionalnu amortizaciju. Funkcija ima sljedeće parametre:
C
- početna vrijednost dobraS
- otpisna vrijednost dobran
- broj godina trajanja amortizacijepk
- lista brojeva koji opisuju intenzitet trošenja dobra u pojedinoj godini.decimale
- Na koliko decimala želimo ispisati rezultate. Po defaultu je stavljeno decimale=2
.izlaz
- u kojem obliku želimo ispisati amortizaciju. Ako je izlaz='rjecnik'
, tada se rezultati ispisuju u obliku rječnika. Ako je izlaz='html'
, tada se rezultati ispisuju u obliku html tablice.def funkcionalna_amortizacija(C,S,n,pk,izlaz='html',decimale=2):
rjecnik = {0:{'p':0,'R':0,'D':0,'B':C}}
a = (C - S) / sum(pk)
for k in range(1,n+1):
rjecnik[k] = {}
Rk = round(pk[k-1] * a, decimale) if (decimale > 0) else int(pk[k-1] * a)
rjecnik[k]['p'] = pk[k-1]
rjecnik[k]['R'] = Rk
rjecnik[k]['D'] = round(rjecnik[k-1]['D'] + Rk, decimale) if (decimale > 0) else int(rjecnik[k-1]['D'] + Rk)
rjecnik[k]['B'] = round(C - rjecnik[k]['D'], decimale) if (decimale > 0) else int(C - rjecnik[k]['D'])
if izlaz == 'rjecnik':
return rjecnik
elif izlaz == 'html':
tablica = [['$k$','$p_k$','$R_k$','$D_k$','$B_k$'],[0,'$-$','$-$','$-$',C]]
for k in range(1,n+1):
tablica.append([])
tablica[-1].extend([k,rjecnik[k]['p'],rjecnik[k]['R'],rjecnik[k]['D'],rjecnik[k]['B']])
tablica = make_table(tablica)
apply_theme('basic')
set_global_style(align='center')
set_global_style(float_format='%0.{}f'.format(decimale))
return tablica
Oprema čija je cijena $400\,000$ kuna ima životni vijek 5 godina i otpisnu vrijednost $100\,000$ kuna. Napravite amortizacijsku tablicu koristeći linearnu metodu.
amortizacija(400000,100000,5,izlaz='rjecnik')
amortizacija(400000,100000,5,izlaz='rjecnik',decimale=0)
amortizacija(400000,100000,5,metoda='LIN')
amortizacija(400000,100000,5,decimale=0)
Knjigovodstvena vrijednost kod linearne amortizacije je linearna funkcija vremena.
np.polyfit([0,1,2,3,4,5],[400000,340000,280000,220000,160000,100000],1)
figure(figsize=(10,8))
x=arange(0,5,0.01)
fx= list(map(lambda x: -60000*x+400000, x))
plot(x,fx,c='r',lw=3)
dx=[0,1,2,3,4,5]
dy=list(map(lambda x: -60000*x+400000, dx))
plot(dx,dy,c='y',ls='',marker='o',ms=10,markeredgecolor='k')
text(3.35,370000, "linearna funkcija", color='blue', fontsize=16,
bbox=dict(facecolor='#FCF3CF', edgecolor='blue', boxstyle='round,pad=0.8'))
xlabel('k',fontsize=16)
ylabel('$B_k$',fontsize=16)
grid(True)
Oprema čija je cijena $400\,000$ kuna ima životni vijek 5 godina i otpisnu vrijednost $100\,000$ kuna. Napravite amortizacijsku tablicu koristeći metodu sume znamenaka.
amortizacija(400000,100000,5,izlaz='rjecnik',metoda='SZ')
amortizacija(400000,100000,5,izlaz='rjecnik',decimale=0,metoda='SZ')
amortizacija(400000,100000,5,izlaz='html',metoda='SZ')
amortizacija(400000,100000,5,decimale=0,metoda='SZ')
Knjigovodstvena vrijednost kod amortizacije metodom sume znamenaka je kvadratna funkcija vremena.
np.polyfit([0,1,2,3,4,5],[400000,300000,220000,160000,120000,100000],2)
figure(figsize=(10,8))
x=arange(0,5,0.01)
fx= list(map(lambda x: 10000*x**2-110000*x+400000, x))
plot(x,fx,c='r',lw=3)
dx=[0,1,2,3,4,5]
dy=list(map(lambda x: 10000*x**2-110000*x+400000, dx))
plot(dx,dy,c='y',ls='',marker='o',ms=10,markeredgecolor='k')
text(3.25,370000, "kvadratna funkcija", color='blue', fontsize=16,
bbox=dict(facecolor='#FCF3CF', edgecolor='blue', boxstyle='round,pad=0.8'))
xlabel('k',fontsize=16)
ylabel('$B_k$',fontsize=16)
grid(True)
Oprema čija je cijena $400\,000$ kuna ima životni vijek 5 godina i otpisnu vrijednost $100\,000$ kuna. Napravite amortizacijsku tablicu koristeći metodu konstantnog postotka.
amortizacija(400000,100000,5,izlaz='rjecnik',metoda='KP')
amortizacija(400000,100000,5,metoda='KP')
Knjigovodstvena vrijednost kod amortizacije metodom konstantnog postotka je eksponencijalna funkcija vremena.
figure(figsize=(10,8))
x=arange(0,5,0.01)
d=100*(1-(100000/400000)**(1/5))
fx= list(map(lambda x: 400000*(1-d/100)**x, x))
plot(x,fx,c='r',lw=3)
dx=[0,1,2,3,4,5]
dy=list(map(lambda x: 400000*(1-d/100)**x, dx))
plot(dx,dy,c='y',ls='',marker='o',ms=10,markeredgecolor='k')
text(2.7,370000, "eksponencijalna funkcija", color='blue', fontsize=16,
bbox=dict(facecolor='#FCF3CF', edgecolor='blue', boxstyle='round,pad=0.8'))
xlabel('k',fontsize=16)
ylabel('$B_k$',fontsize=16)
grid(True)
Odnos knjigovodstvenih vrijednosti kod metode sume znamenaka i metode konstantnog postotka bitno ovisi i o početnim podacima.
figure(figsize=(10,8))
x=arange(0,5,0.01)
LINx= list(map(lambda x: -60000*x+400000, x))
SZx= list(map(lambda x: 10000*x**2-110000*x+400000, x))
KPx= list(map(lambda x: 400000*(1-d/100)**x, x))
plot(x,LINx,lw=3,label='linearna amortizacija')
plot(x,SZx,lw=3,label='metoda sume znamenaka')
plot(x,KPx,lw=3,label='metoda konstantnog postotka')
dx=[0,5]
dy=[400000,100000]
plot(dx,dy,c='cyan',ls='',marker='o',ms=10,markeredgecolor='k')
xlabel('k',fontsize=16)
ylabel('$B_k$',fontsize=16)
legend()
grid(True)
amortizacija(400000,50000,5,metoda='LIN')
amortizacija(400000,50000,5,metoda='SZ')
amortizacija(400000,50000,5,metoda='KP')
kl=np.polyfit([0,1,2,3,4,5],[400000,330000,260000,190000,120000,50000],1)
kl
ksz=np.polyfit([0,1,2,3,4,5],[400000,283333.33,190000,120000,73333.33,50000],2)
ksz
figure(figsize=(10,8))
x=arange(0,5,0.01)
d=100*(1-(50000/400000)**(1/5))
LINx= list(map(lambda x: kl[0]*x+kl[1], x))
SZx= list(map(lambda x: ksz[0]*x**2+ksz[1]*x+ksz[2], x))
KPx= list(map(lambda x: 400000*(1-d/100)**x, x))
plot(x,LINx,lw=3,label='linearna amortizacija')
plot(x,SZx,lw=3,label='metoda sume znamenaka')
plot(x,KPx,lw=3,label='metoda konstantnog postotka')
dx=[0,5]
dy=[400000,50000]
plot(dx,dy,c='cyan',ls='',marker='o',ms=10,markeredgecolor='k')
xlabel('k',fontsize=16)
ylabel('$B_k$',fontsize=16)
legend()
grid(True)
Izradite amortizacijsku osnovicu za stroj čija je vrijednost $60\,000$ kuna, a otpisna $8\,000$ kuna. Predviđeni vijek trajanja stroja je 4 godine, a tijekom tih godina njegov je učinak po broju proizvoda dan u donjoj tablici.
godina | 1. | 2. | 3. | 4. |
---|---|---|---|---|
broj proizvoda | 4000 | 3500 | 2900 | 2600 |
funkcionalna_amortizacija(60000,8000,4,[4000,3500,2900,2600])
funkcionalna_amortizacija(60000,8000,4,[4000,3500,2900,2600],decimale=0)
funkcionalna_amortizacija(60000,8000,4,[4000,3500,2900,2600],izlaz='rjecnik')
funkcionalna_amortizacija(60000,8000,4,[4000,3500,2900,2600],izlaz='rjecnik',decimale=0)
Funkcija knjigovodstvene vrijednosti ovisno o vremenu aproksimirana je linearnim splajnom (po dijelovima linearnom funkcijom). Naravno, možemo dobivene diskretne podatke interpolirati i nekom drugom funkcijom. Sve ovisi o konkretnom problemu i našem iskustvu s konkretnim realnim problemom na temelju kojeg biramo što je moguće precizniji model za kontinuirani slučaj.
Površina ispod linearnog splajna na segmentu $[k-1,k]$ zorno nam aproksimira intenzitet trošenja dobra u $k$-toj godini za $k\in\{1,2,3,4\}$.
figure(figsize=(10,8))
x=arange(0,4.01,0.01)
fx= list(map(lambda x: np.interp(x,[0,1,2,3,4],[60000,44000,30000,18400,8000]), x))
plot([0,4],[60000,8000],c='b',ls='--')
fill_between(x,0,fx,alpha=0.2,color='r')
plot(x,fx,c='r',lw=3)
dx=[0,1,2,3,4]
dy=[60000,44000,30000,18400,8000]
plot(dx,dy,c='y',ls='',marker='o',ms=10,markeredgecolor='k')
xlabel('k',fontsize=16)
ylabel('$B_k$',fontsize=16)
grid(True)