Funkcije

In [1]:
import platform
In [2]:
platform.platform()
Out[2]:
'Linux-4.17.19-1-MANJARO-x86_64-with-arch-Manjaro-Linux'
In [3]:
platform.python_version()
Out[3]:
'3.7.0'
In [4]:
import sympy as sp
In [5]:
sp.__version__
Out[5]:
'1.2'
In [6]:
sp.init_printing()
In [7]:
import matplotlib
In [8]:
matplotlib.__version__
Out[8]:
'2.2.3'
In [9]:
from pylab import *
In [10]:
%matplotlib inline

1. zadatak

Neka je $p$ cijena jednog proizvoda, a količina $q$ prodanih proizvoda ovisi o cijeni $p$ i dana je funkcijom $q(p)=1200-4p.$

  1. Odredite funkciju prihoda u ovisnosti o cijeni.
  2. Odredite funkciju prihoda u ovisnosti o količini prodanih proizvoda.
  3. Odredite za koju cijenu se ostvaruje maksimalni prihod.
  4. Koliko iznosi maksimalni prihod i koliko se proizvoda proda u tom slučaju?
  5. U kojim granicama cijene i količine je prihod pozitivan?

Rješenje

In [11]:
p,q = sp.symbols('p q')
In [12]:
def Q(p): 
    return 1200-4*p
a. Funkcija prihoda u ovisnosti o cijeni
In [13]:
def P1(p):
    return sp.expand(p*Q(p))
In [14]:
P1(p)
Out[14]:
$$- 4 p^{2} + 1200 p$$
b. Funkcija prihoda u ovisnosti o količini

cijena kao funkcija količine

In [15]:
def P(q):
    return sp.solve(sp.Eq(q,1200-4*p),p)[0]
In [16]:
P(q)
Out[16]:
$$- \frac{q}{4} + 300$$

funkcija prihoda

In [17]:
def P2(q):
    return sp.expand(P(q)*q)
In [18]:
P2(q)
Out[18]:
$$- \frac{q^{2}}{4} + 300 q$$
c. Cijena za koju se postiže maksimalni prihod
In [19]:
der = sp.diff(P1(p),p); der
Out[19]:
$$- 8 p + 1200$$
In [20]:
sp.solveset(der,p)
Out[20]:
$$\left\{150\right\}$$
In [21]:
der2 = sp.diff(P1(p),p,2); der2
Out[21]:
$$-8$$
d. Maksimalni prihod i broj prodanih proizvoda u tom slučaju
In [22]:
P1(150)
Out[22]:
$$90000$$
In [23]:
Q(150)
Out[23]:
$$600$$
e. Kada je prihod pozitivan?
In [24]:
sp.solve(P1(p),p)
Out[24]:
$$\left [ 0, \quad 300\right ]$$
In [25]:
sp.solve(P2(q),q)
Out[25]:
$$\left [ 0, \quad 1200\right ]$$

Prihod je pozitivan za cijene $p\in\langle0,300\rangle$ i količine $q\in\langle0,1200\rangle$.

In [26]:
figure(figsize=(10,4))
subplots_adjust(bottom=0.15, wspace=0.4)
subplot(1,2,1)
x1 = linspace(-20,320,80)
y1 = list(map(P1,x1))
grid(True)
xlabel('p')
ylabel('P')
xticks(arange(0, 310, 50))
plot(x1,y1,lw=2)
subplot(1,2,2)
x2 = linspace(-20,1220,80)
y2 = list(map(P2,x2))
grid(True)
xlabel('q')
ylabel('P')
xticks(arange(0, 1210, 200))
plot(x2,y2,lw=2,c='red');

2. zadatak

Zadana je funkcija troškova $T(x)=0.01x^2+4x+680$. Cijena $p$ jednog proizvoda u ovisnosti o broju prodanih proizvoda dana je funkcijom $p(x)=12-\frac{1}{500}x$.

  1. Odredite funkciju profita u ovisnosti o broju proizvoda.
  2. Odredite za koju količinu proizvodnje se ostvaruje maksimalni profit i koliko on iznosi.
  3. Koliki su troškovi u slučaju maksimalnog profita?
  4. Odredite za koje količine proizvodnje je profit pozitivan.

Rješenje

In [27]:
x = sp.symbols('x')
In [28]:
def p(x):
    return 12-1/500*x
In [29]:
def T(x):
    return 0.01*x**2+4*x+680

a. Funkcija profita

Prihod kao funkcija potražnje

In [30]:
def P(x):
    return sp.expand(p(x)*x)
In [31]:
P(x)
Out[31]:
$$- 0.002 x^{2} + 12 x$$

Profit

In [32]:
def D(x):
    return P(x)-T(x)
In [33]:
D(x)
Out[33]:
$$- 0.012 x^{2} + 8 x - 680$$
b. Maksimalni profit
In [34]:
der = sp.diff(D(x),x); der
Out[34]:
$$- 0.024 x + 8$$
In [35]:
sp.solveset(der,x)
Out[35]:
$$\left\{333.333333333333\right\}$$
In [36]:
der2 = sp.diff(D(x),x,2); der2
Out[36]:
$$-0.024$$

Maksimalni profit iznosi 653.33 novčane jedinice.

In [37]:
D(333.33)
Out[37]:
$$653.3333332$$
c. Troškovi kod maksimalnog profita
In [38]:
T(333.33)
Out[38]:
$$3124.408889$$
d. Kada je profit pozitivan?
In [39]:
sp.solve(D(x),x)
Out[39]:
$$\left [ 100.0, \quad 566.666666666667\right ]$$

Profit je pozitivan za količine $x\in\langle100,566.67\rangle$

In [40]:
x1 = linspace(90,577,80)
y1 = list(map(D,x1))
grid(True)
xlabel('x')
ylabel('D')
ylim(-100,900)
xticks([100,333.33,566.67],['100','333.33','566.67'])
yticks([0,200,400,653.33,800],['0','200','400','653.33','800'])
plot(x1,y1,lw=2);

3. zadatak

Da bi nešto zaradio, student kroz ljetne mjesece prodaje ogrlice na plaži. Prošlo ljeto je prodavao ogrlice po $10\,\unicode{0x20AC}$ i dnevno je prodao 20 ogrlica. Međutim, kada je povećao cijenu ogrlice za $1\,\unicode{0x20AC}$, prodaja mu se smanjila za dvije ogrlice dnevno.

  1. Pronađite funkciju potražnje za ogrlicama uz pretpostavku da se radi o linearnoj funkciji.
  2. Ako za izradu svake ogrlice student treba uložiti $6\,\unicode{0x20AC}$, po kojoj cijeni treba prodavati ogrlice da bi ostvario maksimalni profit? Koliko iznosi maksimalni profit i koliko ogrlica će prodati u tom slučaju?

Rješenje

In [41]:
p,b = sp.symbols('p b')
a. dio
In [42]:
a = -2/1; a
Out[42]:
$$-2.0$$
In [43]:
sp.solveset(sp.Eq(-2*10+b,20),b)
Out[43]:
$$\left\{40\right\}$$

Funkcija potražnje

In [44]:
def q(p):
    return -2*p+40
In [45]:
q(p)
Out[45]:
$$- 2 p + 40$$

b. dio

Prihod kao funkcija cijene

In [46]:
def P(p):
    return sp.expand(p*q(p))
In [47]:
P(p)
Out[47]:
$$- 2 p^{2} + 40 p$$

Troškovi kao funkcija cijene

In [48]:
def T(p):
    return sp.expand(6*q(p))
In [49]:
T(p)
Out[49]:
$$- 12 p + 240$$

Profit kao funkcija cijene

In [50]:
def D(p):
    return P(p)-T(p)
In [51]:
D(p)
Out[51]:
$$- 2 p^{2} + 52 p - 240$$

Maksimalni profit se postiže za cijenu $p=13$ i iznosi $98$ novčanih jedinica.

In [52]:
der = sp.diff(D(p),p); der
Out[52]:
$$- 4 p + 52$$
In [53]:
sp.solveset(der,p)
Out[53]:
$$\left\{13\right\}$$
In [54]:
der2 = sp.diff(D(p),p,2); der2
Out[54]:
$$-4$$
In [55]:
D(13)
Out[55]:
$$98$$

U tom slučaju student dnevno proda ukupno $14$ ogrlica.

In [56]:
q(13)
Out[56]:
$$14$$
Grafovi funkcija
In [57]:
x1 = linspace(-1,21,50)
x2 = linspace(-0.5,20.5,50)
x3 = linspace(5.3,20.7,50)
y1 = list(map(q,x1))
y2 = list(map(T,x1))
y3 = list(map(P,x2))
y4 = list(map(D,x3))
plot(x1,y1,lw=2,c='green',label='potražnja')
plot(x1,y2,lw=2,c='magenta',label='troškovi')
plot(x2,y3,lw=2,c='blue',label='prihod')
plot(x3,y4,lw=2,c='red',label='profit')
grid(True)
xlabel('p')
xticks([0,6,10,13,20])
yticks([0,40,98,168,200,240])
legend();

4. zadatak

Menadžer je utvrdio da je veza između prodajne cijene $p$ robe i broja komada $N$ dana s $$N(p)=\frac{1500}{p^2+100}.$$ Prosječni troškovi za $N$ komada robe jednaki su $$T_p=2+\frac{14}{N}.$$ Odredite cijenu uz koju se ostvaruje maksimalni profit i izračunajte taj profit. Odredite za koje prodajne cijene robe je profit pozitivan.

Rješenje

In [58]:
N,p = sp.symbols('N p')
In [59]:
def Tp(N):
    return 2+14/N
In [60]:
def NN(p):
    return 1500 / (p**2 + 100)
Troškovi kao funkcija količine
In [61]:
def Tn(N):
    return sp.expand(N*Tp(N))
In [62]:
Tn(N)
Out[62]:
$$2 N + 14$$
Troškovi kao funkcija cijene
In [63]:
def Tc(p):
    return sp.factor(Tn(NN(p)))
In [64]:
Tc(p)
Out[64]:
$$\frac{2 \left(7 p^{2} + 2200\right)}{p^{2} + 100}$$
Funkcija prihoda
In [65]:
def P(p):
    return p*NN(p)
In [66]:
P(p)
Out[66]:
$$\frac{1500 p}{p^{2} + 100}$$
Funkcija profita
In [67]:
def D(p):
    return sp.factor(P(p)-Tc(p))
In [68]:
D(p)
Out[68]:
$$- \frac{2 \left(7 p^{2} - 750 p + 2200\right)}{p^{2} + 100}$$
Derivacija i stacionarne točke funkcije profita
In [69]:
der = sp.diff(D(p),p); 
sp.factor(der)
Out[69]:
$$- \frac{1500 \left(p^{2} - 4 p - 100\right)}{\left(p^{2} + 100\right)^{2}}$$
In [70]:
stac = sp.solveset(der,p); stac
Out[70]:
$$\left\{2 + 2 \sqrt{26}, - 2 \sqrt{26} + 2\right\}$$

Zanima nas samo pozitivna stacionarna točka $12.2$ jer cijena ne može biti negativna.

In [71]:
sp.N(stac)
Out[71]:
$$\left\{-8.19803902718557, 12.1980390271856\right\}$$

Provjera preko druge derivacije da se radi o maksimumu.

In [72]:
der2 = sp.diff(D(p),p,2);
sp.factor(der2)
Out[72]:
$$\frac{3000 \left(p^{3} - 6 p^{2} - 300 p + 200\right)}{\left(p^{2} + 100\right)^{3}}$$
In [73]:
der2.subs({p:12.2})
Out[73]:
$$-0.493985282564497$$

Maksimalni profit iznosi $47.49$ novčanih jedinica, a ostvaruje se po cijeni od $12.2$ novčanih jedinica.

In [74]:
D(12.2)
Out[74]:
$$47.4852917537374$$
Kada je profit pozitivan?
In [75]:
nul = sp.solveset(D(p),p); nul
Out[75]:
$$\left\{- \frac{5 \sqrt{5009}}{7} + \frac{375}{7}, \frac{5 \sqrt{5009}}{7} + \frac{375}{7}\right\}$$
In [76]:
sp.N(nul)
Out[76]:
$$\left\{3.01836491651287, 104.124492226344\right\}$$

Profit je pozitivan za cijene $p\in\langle3.02,104.12\rangle$.

In [77]:
x1 = linspace(0,160,80)
y1 = list(map(D,x1))
x2 = [3.02, 104.12]
y2 = [0, 0]
grid(True)
xlabel('p')
ylabel('D')
xlim(-10,160)
xticks([0,12.2,25,40,60,80,100,120,140,160],['0','12.2','25','40','80','100','120','140','160'])
plot(x1,y1,lw=2);
plot(x2,y2,'ro');

5. zadatak

Prodaja računala u nekom poduzeću u prvom polugodištu prošle godine mijenjala se od najviše $464$ komada na početku godine do najniže $282$ komada na kraju polugodišta. Nakon toga do kraja godine zabilježen je linearni rast prodaje pri čemu je u prosincu prodano $564$ računala. Napravite sinusoidalni model prodaje za prvo polugodište te odredite koliko je računala prodano u mjesecu listopadu.

Rješenje

$P(t)=\begin{cases}A\sin{(Bt+C)}+D,& t\in[0,6]\\ \hfil Et+F,\hfil&t\in[6,12]\end{cases}$

In [78]:
M = 464
m = 282
Amplituda
In [79]:
A = (M - m) / 2
A
Out[79]:
$$91.0$$
Pomak po $y$-osi
In [80]:
D = M - A
D
Out[80]:
$$373.0$$

Ekstremi moraju biti u točkama $t=0$ i $t=6$

Treba riješiti sustav linearnih jednadžbi $$\left\{\begin{aligned}B\cdot0+C&=\frac{\pi}{2}\\[5pt] B\cdot6+C&=\frac{3}{2}\pi\end{aligned}\right.$$

In [81]:
b,c = sp.symbols('b c')
In [82]:
rj = sp.solve([b*0+c-sp.pi*sp.Rational(1,2), b*6+c-sp.Rational(3,2)*sp.pi])
rj
Out[82]:
$$\left \{ b : \frac{\pi}{6}, \quad c : \frac{\pi}{2}\right \}$$
In [83]:
B = float(rj[b])
C = float(rj[c])
B,C
Out[83]:
$$\left ( 0.5235987755982989, \quad 1.5707963267948966\right )$$

Nadalje, mora vrijediti $P(6)=282$ i $P(12)=564.$ Treba riješiti sustav linearnih jednadžbi $$\left\{\begin{aligned}6E+F&=282\\[2pt] 12E+F&=564\end{aligned}\right.$$

In [84]:
e,f = sp.symbols('e f')
In [85]:
rj2 = sp.solve([6*e+f-282, 12*e+f-564])
rj2
Out[85]:
$$\left \{ e : 47, \quad f : 0\right \}$$
In [86]:
E = rj2[e]
F = rj2[f]
E,F
Out[86]:
$$\left ( 47, \quad 0\right )$$
Graf tražene funkcije
In [87]:
x1 = linspace(0,12,80)
y1 = np.piecewise(x1, [x1 <= 6, x1 > 6], [lambda x: A*sin(B*x+C)+D, lambda x: E*x+F])
grid(True)
xlabel('t')
ylabel('P(t)')
ylim(-20,600)
yticks([0,100,200,282,370,464,564])
plot(x1,y1,lw=2);

U desetom mjesecu prodano je 470 računala.

In [88]:
E*10+F
Out[88]:
$$470$$

6. zadatak

Dijete će tijekom svoga života narasti najviše do visine od $185\,\text{cm}$. Prilikom rođenja dijete je imalo visinu od $53\,\text{cm}$, a godišnja stopa rasta je $28\%$.

  1. Pronađite logističku funkciju $$f(t)=\frac{A}{1+Be^{-kt}}$$ koja modelira djetetov godišnji rast, tj. $f(t)$ je visina djeteta u centimetrima nakon $t$ godina.
  2. Nakon koliko godina će dijete biti visoko $1.5$ metara?
  3. U kojem trenutku je najveća brzina rasta djeteta?

Rješenje

In [89]:
A,B,C,D,k = sp.symbols('A B C D k')

a. Određivanje konstanti $A,b,k$

$\lim\limits_{t\to+\infty}{f(t)}=A$

In [90]:
sp.limit(A/(1+B*sp.E**(-k*x)),x,sp.oo)
Out[90]:
$$A$$
In [91]:
a = 185

$f(0)=53\ \Rightarrow\ \frac{185}{1+B}=53$

In [92]:
b1 = sp.solve(185/(1+B*sp.E**(-k*0))-53,B)
b1
Out[92]:
$$\left [ \frac{132}{53}\right ]$$
In [93]:
b = float(b1[0]); b
Out[93]:
$$2.490566037735849$$

$p=28,\ \ q=1+\frac{p}{100}=1.28,\ \ q=e^k\ \Rightarrow\ k=\ln{q}$

In [94]:
K = log(1.28); K
Out[94]:
$$0.2468600779315258$$
b. Kada će dijete biti visoko 1.5 m, tj. kada je $f(t)=150$?
In [95]:
def f(x):
    return a/(1+b*np.e**(-K*x))
In [96]:
from scipy.optimize import fsolve

Dijete će biti visoko 1.5 m nakon 9 godina i 7 mjeseci.

In [97]:
opt = fsolve(lambda x: f(x)-150, 2); opt
Out[97]:
array([9.59165719])
In [98]:
( opt[0] - int(opt[0]) ) * 12
Out[98]:
$$7.099886290943175$$

c. U kojem trenutku dijete najbrže raste?

Brzinu rasta mjeri derivacija. Najveća brzina rasta postiže se u točki infleksije.

In [99]:
A,B,k,t = sp.symbols('A B k t')
In [100]:
def g(t):
    return A/(1+B*sp.E**(-k*t))
In [101]:
g(t)
Out[101]:
$$\frac{A}{B e^{- k t} + 1}$$
In [102]:
der = sp.diff(g(t),t); der
Out[102]:
$$\frac{A B k e^{- k t}}{\left(B e^{- k t} + 1\right)^{2}}$$
In [103]:
der2 = sp.diff(g(t),t,2)
sp.factor(der2)
Out[103]:
$$\frac{A B k^{2} \left(B - e^{k t}\right) e^{k t}}{\left(B + e^{k t}\right)^{3}}$$

Dijete najbrže raste nakon 3 godine i 8 mjeseci i u tom trenutku postiže visinu od 92.5 cm, tj. polovicu svoje maksimalne visine.

In [104]:
tmax = fsolve(lambda x: b-np.e**(K*x), 2); tmax
Out[104]:
array([3.6964665])
In [105]:
( tmax[0] - int(tmax[0]) ) * 12
Out[105]:
$$8.357598037574702$$
In [106]:
f(tmax[0])
Out[106]:
$$92.5$$
Graf dobivene funkcije
In [107]:
x1 = linspace(-18,95,80)
y1 = f(x1)
grid(True)
xlabel('t')
ylabel('f(t)')
ylim(-10,200)
yticks([0,53,100,140,185])
plot(x1,y1,lw=2)
plot([3.69647],[92.5],'ro');
annotate('(3.69647, 92.5)', xy=(5,92.5), xycoords='data',
         xytext=(50,100), textcoords='data', size=12, ha="center", va="center",
         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=0.03"),
         bbox=dict(facecolor='#FCF3CF', edgecolor='black', boxstyle='round,pad=0.5')
        );

7. zadatak

Zadana je funkcija graničnih troškova $T_G=(1+Q)e^{-Q}$.

  1. Odredite za koliko se promijene troškovi ako se proizvodnja s dva proizvoda poveća na pet proizvoda.
  2. Odredite funkciju troškova ako fiksni troškovi iznose $100$ novčanih jedinica.

Rješenje

In [108]:
Q = sp.symbols('Q')
In [109]:
def Tg(Q):
    return (1+Q)*sp.E**(-Q)
In [110]:
Tg(Q)
Out[110]:
$$\left(Q + 1\right) e^{- Q}$$

a. Kolika je promjena troškova?

Promjena je jednaka određenom integralu graničnih troškova na segmentu $[2,5],$ tj.

$$T(5)-T(2)=\int_2^5{T'(Q)\,\mathrm{d}Q}=\int_2^5{(1+Q)e^{-Q}\,\mathrm{d}Q}$$

Troškovi se promijene za približno $0.49$ novčanih jedinica.

In [111]:
delta = sp.integrate(Tg(Q),(Q,2,5))
delta
Out[111]:
$$- \frac{7}{e^{5}} + \frac{4}{e^{2}}$$
In [112]:
sp.N(delta)
Out[112]:
$$0.494175503952852$$
b. $\ T(0)=100,\quad T(Q)=\,?$
In [113]:
primf = sp.integrate(Tg(Q),Q)
primf
Out[113]:
$$\left(- Q - 2\right) e^{- Q}$$
In [114]:
br=primf.subs({Q:0})
br
Out[114]:
$$-2$$
In [115]:
sp.solveset(br+Q-100,Q)
Out[115]:
$$\left\{102\right\}$$

Funkcija troškova je $T(Q)=(-Q-2)e^{-Q}+102.$

In [116]:
figure(figsize=(7,9))
subplot(2,1,1)
a1 = linspace(0,6.2,60)
b1 = list(map(lambda x: (-x-2)*np.e**(-x)+102, a1))
a2 = [2,5]
b2 = list(map(lambda x: (-x-2)*np.e**(-x)+102, a2))
grid(True,zorder=0)
plot(a1,b1,lw=2)
plot([2,5.2],[b2[0],b2[0]],c='black',lw=1)
plot(a2,b2,'ro')
arrow(5, b2[0], 0, b2[1]-b2[0]-0.15, head_width=0.08, head_length=0.1, lw=2, fc='r', ec='r', zorder=3)
text(5.1,101.62,'$\Delta T$',fontsize=14,color='r');
yticks([100,101,102])
annotate("$T$", xy=(1.4,101.2), xycoords='data',
         xytext=(0.95,101.5), textcoords='data', size=12, ha="center", va="center",
         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=0.03"),
         bbox=dict(facecolor='#FCF3CF', edgecolor='black', boxstyle='round,pad=0.5')
        );
text(5, 100.3, "$\Delta T=T(5)-T(2)$", size=14, ha="center", va="top",
         bbox=dict(boxstyle="square", ec=(1., 0.5, 0.5), fc='#FCF3CE') );
subplot(2,1,2)
x1 = linspace(2,5,40)
x2 = linspace(5,6.2,20)
x3 = linspace(0,2,20)
y1 = list(map(lambda x: (1+x)*np.e**(-x), x1))
y2 = list(map(lambda x: (1+x)*np.e**(-x), x2))
y3 = list(map(lambda x: (1+x)*np.e**(-x), x3))
grid(True)
xlabel('Q')
fill_between(x1, y1, facecolor='yellow', interpolate=True);
plot(x1,y1,x2,y2,x3,y3, lw=2,c='#4D92C2');
text(2.5,0.07,'$\Delta T$',fontsize=14);
annotate("$T'$", xy=(0.95,0.75), xycoords='data',
         xytext=(0.5,0.6), textcoords='data', size=12, ha="center", va="center",
         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=0.03"),
         bbox=dict(facecolor='#FCF3CF', edgecolor='black', boxstyle='round,pad=0.5')
        );
text(5, 0.9, "$\Delta T=\int_2^5{T'(Q)\,\mathrm{d}Q}$", size=14, ha="center", va="top",
         bbox=dict(boxstyle="square", ec=(1., 0.5, 0.5), fc='#FCF3CE') );
In [ ]: