import platform
platform.platform()
platform.python_version()
import sympy as sp
sp.__version__
sp.init_printing()
import matplotlib
matplotlib.__version__
from pylab import *
%matplotlib inline
Neka je $p$ cijena jednog proizvoda, a količina $q$ prodanih proizvoda ovisi o cijeni $p$ i dana je funkcijom $q(p)=1200-4p.$
p,q = sp.symbols('p q')
def Q(p):
return 1200-4*p
def P1(p):
return sp.expand(p*Q(p))
P1(p)
cijena kao funkcija količine
def P(q):
return sp.solve(sp.Eq(q,1200-4*p),p)[0]
P(q)
funkcija prihoda
def P2(q):
return sp.expand(P(q)*q)
P2(q)
der = sp.diff(P1(p),p); der
sp.solveset(der,p)
der2 = sp.diff(P1(p),p,2); der2
P1(150)
Q(150)
sp.solve(P1(p),p)
sp.solve(P2(q),q)
Prihod je pozitivan za cijene $p\in\langle0,300\rangle$ i količine $q\in\langle0,1200\rangle$.
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');
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$.
x = sp.symbols('x')
def p(x):
return 12-1/500*x
def T(x):
return 0.01*x**2+4*x+680
Prihod kao funkcija potražnje
def P(x):
return sp.expand(p(x)*x)
P(x)
Profit
def D(x):
return P(x)-T(x)
D(x)
der = sp.diff(D(x),x); der
sp.solveset(der,x)
der2 = sp.diff(D(x),x,2); der2
Maksimalni profit iznosi 653.33 novčane jedinice.
D(333.33)
T(333.33)
sp.solve(D(x),x)
Profit je pozitivan za količine $x\in\langle100,566.67\rangle$
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);
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.
p,b = sp.symbols('p b')
a = -2/1; a
sp.solveset(sp.Eq(-2*10+b,20),b)
Funkcija potražnje
def q(p):
return -2*p+40
q(p)
Prihod kao funkcija cijene
def P(p):
return sp.expand(p*q(p))
P(p)
Troškovi kao funkcija cijene
def T(p):
return sp.expand(6*q(p))
T(p)
Profit kao funkcija cijene
def D(p):
return P(p)-T(p)
D(p)
Maksimalni profit se postiže za cijenu $p=13$ i iznosi $98$ novčanih jedinica.
der = sp.diff(D(p),p); der
sp.solveset(der,p)
der2 = sp.diff(D(p),p,2); der2
D(13)
U tom slučaju student dnevno proda ukupno $14$ ogrlica.
q(13)
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();
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.
N,p = sp.symbols('N p')
def Tp(N):
return 2+14/N
def NN(p):
return 1500 / (p**2 + 100)
def Tn(N):
return sp.expand(N*Tp(N))
Tn(N)
def Tc(p):
return sp.factor(Tn(NN(p)))
Tc(p)
def P(p):
return p*NN(p)
P(p)
def D(p):
return sp.factor(P(p)-Tc(p))
D(p)
der = sp.diff(D(p),p);
sp.factor(der)
stac = sp.solveset(der,p); stac
Zanima nas samo pozitivna stacionarna točka $12.2$ jer cijena ne može biti negativna.
sp.N(stac)
Provjera preko druge derivacije da se radi o maksimumu.
der2 = sp.diff(D(p),p,2);
sp.factor(der2)
der2.subs({p:12.2})
Maksimalni profit iznosi $47.49$ novčanih jedinica, a ostvaruje se po cijeni od $12.2$ novčanih jedinica.
D(12.2)
nul = sp.solveset(D(p),p); nul
sp.N(nul)
Profit je pozitivan za cijene $p\in\langle3.02,104.12\rangle$.
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');
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.
$P(t)=\begin{cases}A\sin{(Bt+C)}+D,& t\in[0,6]\\ \hfil Et+F,\hfil&t\in[6,12]\end{cases}$
M = 464
m = 282
A = (M - m) / 2
A
D = M - A
D
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.$$
b,c = sp.symbols('b c')
rj = sp.solve([b*0+c-sp.pi*sp.Rational(1,2), b*6+c-sp.Rational(3,2)*sp.pi])
rj
B = float(rj[b])
C = float(rj[c])
B,C
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.$$
e,f = sp.symbols('e f')
rj2 = sp.solve([6*e+f-282, 12*e+f-564])
rj2
E = rj2[e]
F = rj2[f]
E,F
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.
E*10+F
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\%$.
A,B,C,D,k = sp.symbols('A B C D k')
$\lim\limits_{t\to+\infty}{f(t)}=A$
sp.limit(A/(1+B*sp.E**(-k*x)),x,sp.oo)
a = 185
$f(0)=53\ \Rightarrow\ \frac{185}{1+B}=53$
b1 = sp.solve(185/(1+B*sp.E**(-k*0))-53,B)
b1
b = float(b1[0]); b
$p=28,\ \ q=1+\frac{p}{100}=1.28,\ \ q=e^k\ \Rightarrow\ k=\ln{q}$
K = log(1.28); K
def f(x):
return a/(1+b*np.e**(-K*x))
from scipy.optimize import fsolve
Dijete će biti visoko 1.5 m nakon 9 godina i 7 mjeseci.
opt = fsolve(lambda x: f(x)-150, 2); opt
( opt[0] - int(opt[0]) ) * 12
Brzinu rasta mjeri derivacija. Najveća brzina rasta postiže se u točki infleksije.
A,B,k,t = sp.symbols('A B k t')
def g(t):
return A/(1+B*sp.E**(-k*t))
g(t)
der = sp.diff(g(t),t); der
der2 = sp.diff(g(t),t,2)
sp.factor(der2)
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.
tmax = fsolve(lambda x: b-np.e**(K*x), 2); tmax
( tmax[0] - int(tmax[0]) ) * 12
f(tmax[0])
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')
);
Zadana je funkcija graničnih troškova $T_G=(1+Q)e^{-Q}$.
Q = sp.symbols('Q')
def Tg(Q):
return (1+Q)*sp.E**(-Q)
Tg(Q)
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.
delta = sp.integrate(Tg(Q),(Q,2,5))
delta
sp.N(delta)
primf = sp.integrate(Tg(Q),Q)
primf
br=primf.subs({Q:0})
br
sp.solveset(br+Q-100,Q)
Funkcija troškova je $T(Q)=(-Q-2)e^{-Q}+102.$
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') );