Funkcije više varijabli u pythonu

In [1]:
import platform
In [2]:
platform.platform()
Out[2]:
'Linux-5.4.143-1-MANJARO-x86_64-with-glibc2.33'
In [3]:
platform.python_version()
Out[3]:
'3.9.6'
In [4]:
import sympy as sp
In [5]:
sp.init_printing()
In [6]:
sp.__version__
Out[6]:
'1.8'
In [7]:
x,y,z,t,u,v=sp.symbols('x y z t u v',real=True)
In [8]:
import matplotlib.pyplot as plt
In [9]:
%pylab inline
from mpl_toolkits.mplot3d import Axes3D
Populating the interactive namespace from numpy and matplotlib

Parcijalne derivacije

$f(x,y)=(x^2+y)\cos{\big(x^3y^2\big)}$

In [10]:
f=(x**2+y)*sp.cos(x**3*y**2)
f
Out[10]:
$\displaystyle \left(x^{2} + y\right) \cos{\left(x^{3} y^{2} \right)}$

Računanje vrijednosti funkcije u točki

In [11]:
f.evalf(subs={x:2,y:3})
Out[11]:
$\displaystyle -6.77075411791718$

$\dfrac{\partial f}{\partial x}$

In [12]:
f.diff(x)
Out[12]:
$\displaystyle - 3 x^{2} y^{2} \left(x^{2} + y\right) \sin{\left(x^{3} y^{2} \right)} + 2 x \cos{\left(x^{3} y^{2} \right)}$
In [13]:
sp.diff(f,x)
Out[13]:
$\displaystyle - 3 x^{2} y^{2} \left(x^{2} + y\right) \sin{\left(x^{3} y^{2} \right)} + 2 x \cos{\left(x^{3} y^{2} \right)}$

Ako je moguće, možemo faktorizirati izraz.

In [14]:
f.diff(x).factor()
Out[14]:
$\displaystyle - x \left(3 x^{3} y^{2} \sin{\left(x^{3} y^{2} \right)} + 3 x y^{3} \sin{\left(x^{3} y^{2} \right)} - 2 \cos{\left(x^{3} y^{2} \right)}\right)$

$\dfrac{\partial f}{\partial y}$

In [15]:
f.diff(y)
Out[15]:
$\displaystyle - 2 x^{3} y \left(x^{2} + y\right) \sin{\left(x^{3} y^{2} \right)} + \cos{\left(x^{3} y^{2} \right)}$
In [16]:
sp.diff(f,y)
Out[16]:
$\displaystyle - 2 x^{3} y \left(x^{2} + y\right) \sin{\left(x^{3} y^{2} \right)} + \cos{\left(x^{3} y^{2} \right)}$

$\dfrac{\partial f}{\partial y}(2,3)$

In [17]:
fy=f.diff(y)
fy.evalf(subs={x:2,y:3})
Out[17]:
$\displaystyle -86.2519004763181$

$\dfrac{\partial^2 f}{\partial x^2}$

In [18]:
f.diff(x,2)
Out[18]:
$\displaystyle - 12 x^{3} y^{2} \sin{\left(x^{3} y^{2} \right)} - 3 x y^{2} \left(x^{2} + y\right) \left(3 x^{3} y^{2} \cos{\left(x^{3} y^{2} \right)} + 2 \sin{\left(x^{3} y^{2} \right)}\right) + 2 \cos{\left(x^{3} y^{2} \right)}$

Možemo probati malo pojednostavniti izraz

In [19]:
f.diff(x,2).simplify()
Out[19]:
$\displaystyle - 12 x^{3} y^{2} \sin{\left(x^{3} y^{2} \right)} - 3 x y^{2} \left(x^{2} + y\right) \left(3 x^{3} y^{2} \cos{\left(x^{3} y^{2} \right)} + 2 \sin{\left(x^{3} y^{2} \right)}\right) + 2 \cos{\left(x^{3} y^{2} \right)}$
In [20]:
f.diff(x,2).expand()
Out[20]:
$\displaystyle - 9 x^{6} y^{4} \cos{\left(x^{3} y^{2} \right)} - 9 x^{4} y^{5} \cos{\left(x^{3} y^{2} \right)} - 18 x^{3} y^{2} \sin{\left(x^{3} y^{2} \right)} - 6 x y^{3} \sin{\left(x^{3} y^{2} \right)} + 2 \cos{\left(x^{3} y^{2} \right)}$

$\dfrac{\partial^2 f}{\partial y^2}$

In [21]:
f.diff(y,2)
Out[21]:
$\displaystyle - 2 x^{3} \left(2 y \sin{\left(x^{3} y^{2} \right)} + \left(x^{2} + y\right) \left(2 x^{3} y^{2} \cos{\left(x^{3} y^{2} \right)} + \sin{\left(x^{3} y^{2} \right)}\right)\right)$

Možemo se opet igrati s pojednostavljivanjem izraza

In [22]:
f.diff(y,2).expand()
Out[22]:
$\displaystyle - 4 x^{8} y^{2} \cos{\left(x^{3} y^{2} \right)} - 4 x^{6} y^{3} \cos{\left(x^{3} y^{2} \right)} - 2 x^{5} \sin{\left(x^{3} y^{2} \right)} - 6 x^{3} y \sin{\left(x^{3} y^{2} \right)}$
In [23]:
f.diff(y,2).expand().factor()
Out[23]:
$\displaystyle - 2 x^{3} \left(2 x^{5} y^{2} \cos{\left(x^{3} y^{2} \right)} + 2 x^{3} y^{3} \cos{\left(x^{3} y^{2} \right)} + x^{2} \sin{\left(x^{3} y^{2} \right)} + 3 y \sin{\left(x^{3} y^{2} \right)}\right)$

$\dfrac{\partial^2 f}{\partial x\partial y}$

In [24]:
fxy=f.diff(x,1,y,1)
fxy
Out[24]:
$\displaystyle - x^{2} y \left(6 x^{3} y^{2} \left(x^{2} + y\right) \cos{\left(x^{3} y^{2} \right)} + 4 x^{2} \sin{\left(x^{3} y^{2} \right)} + 3 y \sin{\left(x^{3} y^{2} \right)} + 6 \left(x^{2} + y\right) \sin{\left(x^{3} y^{2} \right)}\right)$
In [25]:
fxy.expand()
Out[25]:
$\displaystyle - 6 x^{7} y^{3} \cos{\left(x^{3} y^{2} \right)} - 6 x^{5} y^{4} \cos{\left(x^{3} y^{2} \right)} - 10 x^{4} y \sin{\left(x^{3} y^{2} \right)} - 9 x^{2} y^{2} \sin{\left(x^{3} y^{2} \right)}$
In [26]:
fxy.expand().factor()
Out[26]:
$\displaystyle - x^{2} y \left(6 x^{5} y^{2} \cos{\left(x^{3} y^{2} \right)} + 6 x^{3} y^{3} \cos{\left(x^{3} y^{2} \right)} + 10 x^{2} \sin{\left(x^{3} y^{2} \right)} + 9 y \sin{\left(x^{3} y^{2} \right)}\right)$

Hesseova matrica

In [27]:
hess_f=sp.hessian(f,[x,y])
hess_f
Out[27]:
$\displaystyle \left[\begin{matrix}- 9 x^{4} y^{4} \left(x^{2} + y\right) \cos{\left(x^{3} y^{2} \right)} - 12 x^{3} y^{2} \sin{\left(x^{3} y^{2} \right)} - 6 x y^{2} \left(x^{2} + y\right) \sin{\left(x^{3} y^{2} \right)} + 2 \cos{\left(x^{3} y^{2} \right)} & - 6 x^{5} y^{3} \left(x^{2} + y\right) \cos{\left(x^{3} y^{2} \right)} - 4 x^{4} y \sin{\left(x^{3} y^{2} \right)} - 3 x^{2} y^{2} \sin{\left(x^{3} y^{2} \right)} - 6 x^{2} y \left(x^{2} + y\right) \sin{\left(x^{3} y^{2} \right)}\\- 6 x^{5} y^{3} \left(x^{2} + y\right) \cos{\left(x^{3} y^{2} \right)} - 4 x^{4} y \sin{\left(x^{3} y^{2} \right)} - 3 x^{2} y^{2} \sin{\left(x^{3} y^{2} \right)} - 6 x^{2} y \left(x^{2} + y\right) \sin{\left(x^{3} y^{2} \right)} & - 4 x^{6} y^{2} \left(x^{2} + y\right) \cos{\left(x^{3} y^{2} \right)} - 4 x^{3} y \sin{\left(x^{3} y^{2} \right)} - 2 x^{3} \left(x^{2} + y\right) \sin{\left(x^{3} y^{2} \right)}\end{matrix}\right]$

Hesseova matrica funkcije $f$ u točki $(2,3)$

In [28]:
mat23=hess_f.evalf(subs={x:2,y:3})
mat23
Out[28]:
$\displaystyle \left[\begin{matrix}78560.9476825349 & 34895.515363622\\34895.515363622 & 15547.0222282267\end{matrix}\right]$

Hesseova determinanta

In [29]:
hess_f.det()
Out[29]:
$\displaystyle - 30 x^{11} y^{4} \sin{\left(x^{3} y^{2} \right)} \cos{\left(x^{3} y^{2} \right)} - 60 x^{9} y^{5} \sin{\left(x^{3} y^{2} \right)} \cos{\left(x^{3} y^{2} \right)} - 64 x^{8} y^{2} \sin^{2}{\left(x^{3} y^{2} \right)} - 8 x^{8} y^{2} \cos^{2}{\left(x^{3} y^{2} \right)} - 30 x^{7} y^{6} \sin{\left(x^{3} y^{2} \right)} \cos{\left(x^{3} y^{2} \right)} - 60 x^{6} y^{3} \sin^{2}{\left(x^{3} y^{2} \right)} - 8 x^{6} y^{3} \cos^{2}{\left(x^{3} y^{2} \right)} - 4 x^{5} \sin{\left(x^{3} y^{2} \right)} \cos{\left(x^{3} y^{2} \right)} - 45 x^{4} y^{4} \sin^{2}{\left(x^{3} y^{2} \right)} - 12 x^{3} y \sin{\left(x^{3} y^{2} \right)} \cos{\left(x^{3} y^{2} \right)}$
In [30]:
hess_f.det().simplify()
Out[30]:
$\displaystyle x^{3} \left(- 15 x^{8} y^{4} \sin{\left(2 x^{3} y^{2} \right)} - 30 x^{6} y^{5} \sin{\left(2 x^{3} y^{2} \right)} + 28 x^{5} y^{2} \cos{\left(2 x^{3} y^{2} \right)} - 36 x^{5} y^{2} - 15 x^{4} y^{6} \sin{\left(2 x^{3} y^{2} \right)} + 26 x^{3} y^{3} \cos{\left(2 x^{3} y^{2} \right)} - 34 x^{3} y^{3} - 2 x^{2} \sin{\left(2 x^{3} y^{2} \right)} + \frac{45 x y^{4} \cos{\left(2 x^{3} y^{2} \right)}}{2} - \frac{45 x y^{4}}{2} - 6 y \sin{\left(2 x^{3} y^{2} \right)}\right)$

Hesseova determinanta u točki $(2,3)$

In [31]:
mat23.det()
Out[31]:
$\displaystyle 3691807.39814615$

$\dfrac{\partial^3 f}{\partial x^2\partial y}$

In [32]:
f_x2y=f.diff(x,2,y,1)
f_x2y
Out[32]:
$\displaystyle x y \left(- 24 x^{5} y^{2} \cos{\left(x^{3} y^{2} \right)} + 6 x^{3} y^{2} \left(x^{2} + y\right) \left(3 x^{3} y^{2} \sin{\left(x^{3} y^{2} \right)} - 5 \cos{\left(x^{3} y^{2} \right)}\right) - 28 x^{2} \sin{\left(x^{3} y^{2} \right)} - 3 y \left(3 x^{3} y^{2} \cos{\left(x^{3} y^{2} \right)} + 2 \sin{\left(x^{3} y^{2} \right)}\right) - 6 \left(x^{2} + y\right) \left(3 x^{3} y^{2} \cos{\left(x^{3} y^{2} \right)} + 2 \sin{\left(x^{3} y^{2} \right)}\right)\right)$
In [33]:
f_x2y=f_x2y.simplify()
f_x2y
Out[33]:
$\displaystyle x y \left(18 x^{8} y^{4} \sin{\left(x^{3} y^{2} \right)} + 18 x^{6} y^{5} \sin{\left(x^{3} y^{2} \right)} - 72 x^{5} y^{2} \cos{\left(x^{3} y^{2} \right)} - 57 x^{3} y^{3} \cos{\left(x^{3} y^{2} \right)} - 40 x^{2} \sin{\left(x^{3} y^{2} \right)} - 18 y \sin{\left(x^{3} y^{2} \right)}\right)$

$\dfrac{\partial^3 f}{\partial x^2\partial y}(2,3)$

In [34]:
f_x2y.evalf(subs={x:2,y:3})
Out[34]:
$\displaystyle 1186228.43174401$

na više znamenaka

In [35]:
f_x2y.evalf(n=30,subs={x:2,y:3})
Out[35]:
$\displaystyle 1186228.43174401256199541146793$

Funkcija tri varijable

$g(x,y,z)=x\log_2{\big(3x+z^4\big)}+5xyz$

In [36]:
g=x*sp.log(3*x+z**4,2)+5*x*y*z
g
Out[36]:
$\displaystyle 5 x y z + \frac{x \log{\left(3 x + z^{4} \right)}}{\log{\left(2 \right)}}$

parcijalne derivacije

In [37]:
g.diff(x)
Out[37]:
$\displaystyle \frac{3 x}{\left(3 x + z^{4}\right) \log{\left(2 \right)}} + 5 y z + \frac{\log{\left(3 x + z^{4} \right)}}{\log{\left(2 \right)}}$
In [38]:
g.diff(y)
Out[38]:
$\displaystyle 5 x z$
In [39]:
g.diff(z)
Out[39]:
$\displaystyle 5 x y + \frac{4 x z^{3}}{\left(3 x + z^{4}\right) \log{\left(2 \right)}}$

$\dfrac{\partial g}{\partial x}(1,-2,2.14)$

In [40]:
g.diff(x).evalf(subs={x:1,y:-2,z:2.14})
Out[40]:
$\displaystyle -16.6361353482274$

$\dfrac{\partial^2 g}{\partial x\partial z}$

In [41]:
g.diff(x,1,z,1)
Out[41]:
$\displaystyle - \frac{12 x z^{3}}{\left(3 x + z^{4}\right)^{2} \log{\left(2 \right)}} + 5 y + \frac{4 z^{3}}{\left(3 x + z^{4}\right) \log{\left(2 \right)}}$

Hesseova matrica

In [42]:
hess_g=sp.hessian(g,[x,y,z])
hess_g
Out[42]:
$\displaystyle \left[\begin{matrix}- \frac{9 x}{\left(3 x + z^{4}\right)^{2} \log{\left(2 \right)}} + \frac{6}{\left(3 x + z^{4}\right) \log{\left(2 \right)}} & 5 z & - \frac{12 x z^{3}}{\left(3 x + z^{4}\right)^{2} \log{\left(2 \right)}} + 5 y + \frac{4 z^{3}}{\left(3 x + z^{4}\right) \log{\left(2 \right)}}\\5 z & 0 & 5 x\\- \frac{12 x z^{3}}{\left(3 x + z^{4}\right)^{2} \log{\left(2 \right)}} + 5 y + \frac{4 z^{3}}{\left(3 x + z^{4}\right) \log{\left(2 \right)}} & 5 x & - \frac{16 x z^{6}}{\left(3 x + z^{4}\right)^{2} \log{\left(2 \right)}} + \frac{12 x z^{2}}{\left(3 x + z^{4}\right) \log{\left(2 \right)}}\end{matrix}\right]$

Hesseova matrica funkcije $g$ u točki $(1,-2,2.14)$

In [43]:
hess_g.evalf(subs={x:1,y:-2,z:2.14})
Out[43]:
$\displaystyle \left[\begin{matrix}0.338490536391147 & 10.7 & -7.93606634673305\\10.7 & 0 & 5.0\\-7.93606634673305 & 5.0 & -0.550579805307276\end{matrix}\right]$

Hesseova determinanta

In [44]:
hess_g.det()
Out[44]:
$\displaystyle \frac{2250 x^{3} y z \log{\left(2 \right)} - 225 x^{3} + 1500 x^{2} y z^{5} \log{\left(2 \right)} - 1050 x^{2} z^{4} + 250 x y z^{9} \log{\left(2 \right)} + 300 x z^{8}}{9 x^{2} \log{\left(2 \right)} + 6 x z^{4} \log{\left(2 \right)} + z^{8} \log{\left(2 \right)}}$
In [45]:
g_det=hess_g.det().simplify()
g_det
Out[45]:
$\displaystyle \frac{25 x \left(- 9 x^{2} - 42 x z^{4} + 12 z^{8} + \log{\left(2^{10 y z \left(9 x^{2} + 6 x z^{4} + z^{8}\right)} \right)}\right)}{\left(9 x^{2} + 6 x z^{4} + z^{8}\right) \log{\left(2 \right)}}$

Hesseova determinanta funkcije $g$ u točki $(1,-2,2.14)$

Možemo prvo odrediti općeniti izraz za Hesseovu determinantu pa uvrstiti konkretnu točku, ili možemo prvo uvrstiti točku da dobijemo Hesseovu matricu u konkretnoj točki pa računati determinantu s konkretnim brojevima.

In [46]:
g_det.evalf(subs={x:1,y:-2,z:2.14})
Out[46]:
$\displaystyle -794.585480600585$
In [47]:
hess_g.evalf(subs={x:1,y:-2,z:2.14}).det()
Out[47]:
$\displaystyle -794.585480600585$

$\dfrac{\partial^5 g}{\partial x^2\partial z^3}$

In [48]:
g_x2z3=g.diff(x,2,z,3)
g_x2z3
Out[48]:
$\displaystyle \frac{144 z \left(\frac{96 x z^{8}}{\left(3 x + z^{4}\right)^{3}} - \frac{54 x z^{4}}{\left(3 x + z^{4}\right)^{2}} + \frac{3 x}{3 x + z^{4}} - \frac{16 z^{8}}{\left(3 x + z^{4}\right)^{2}} + \frac{12 z^{4}}{3 x + z^{4}} - 1\right)}{\left(3 x + z^{4}\right)^{2} \log{\left(2 \right)}}$
In [49]:
g_x2z3=g_x2z3.simplify()
g_x2z3
Out[49]:
$\displaystyle \frac{z^{5} \left(- 9072 x^{2} + 8640 x z^{4} - 720 z^{8}\right)}{\left(243 x^{5} + 405 x^{4} z^{4} + 270 x^{3} z^{8} + 90 x^{2} z^{12} + 15 x z^{16} + z^{20}\right) \log{\left(2 \right)}}$

$\dfrac{\partial^5 g}{\partial x^2\partial z^3}(1,-2,2.14)$

In [50]:
g_x2z3.evalf(subs={x:1,y:-2,z:2.14})
Out[50]:
$\displaystyle -1.18226393361736$

$\dfrac{\partial^3 g}{\partial x\partial y\partial z}$

In [51]:
g.diff(x,1,y,1,z,1)
Out[51]:
$\displaystyle 5$

$\dfrac{\partial^4 g}{\partial x^2\partial y\partial z}$

In [52]:
g.diff(x,2,y,1,z,1)
Out[52]:
$\displaystyle 0$

Vektorske funkcije

$r_1(u)=\big(u^2,sin(u),u^3+\frac{1}{u}\big)$

In [53]:
r1=sp.Matrix([u**2,sp.sin(u),u**3+1/u])
r1
Out[53]:
$\displaystyle \left[\begin{matrix}u^{2}\\\sin{\left(u \right)}\\u^{3} + \frac{1}{u}\end{matrix}\right]$

Derivacija vektorske funkcije jedne varijable

In [54]:
r1.diff(u)
Out[54]:
$\displaystyle \left[\begin{matrix}2 u\\\cos{\left(u \right)}\\3 u^{2} - \frac{1}{u^{2}}\end{matrix}\right]$

Druga derivacija vektorske funkcije jedne varijable

In [55]:
r1.diff(u,2)
Out[55]:
$\displaystyle \left[\begin{matrix}2\\- \sin{\left(u \right)}\\2 \left(3 u + \frac{1}{u^{3}}\right)\end{matrix}\right]$
In [56]:
r1.diff(u,2).expand()
Out[56]:
$\displaystyle \left[\begin{matrix}2\\- \sin{\left(u \right)}\\6 u + \frac{2}{u^{3}}\end{matrix}\right]$

Treća derivacija vektorske funkcije jedne varijable

In [57]:
r1.diff(u,3)
Out[57]:
$\displaystyle \left[\begin{matrix}0\\- \cos{\left(u \right)}\\6 \left(1 - \frac{1}{u^{4}}\right)\end{matrix}\right]$
In [58]:
r1.diff(u,3).expand()
Out[58]:
$\displaystyle \left[\begin{matrix}0\\- \cos{\left(u \right)}\\6 - \frac{6}{u^{4}}\end{matrix}\right]$

$\dfrac{\mathrm{d}r_1}{\mathrm{d}u}(1)$

In [59]:
r1.diff(u).evalf(subs={u:1})
Out[59]:
$\displaystyle \left[\begin{matrix}2.0\\0.54030230586814\\2.0\end{matrix}\right]$

$\dfrac{\mathrm{d}r_1}{\mathrm{d}u}\times\dfrac{\mathrm{d}^2r_1}{\mathrm{d}u^2}$

In [60]:
r1_u=r1.diff(u)
r1_uu=r1.diff(u,2)
In [61]:
vek=r1_u.cross(r1_uu)
vek
Out[61]:
$\displaystyle \left[\begin{matrix}2 \left(3 u + \frac{1}{u^{3}}\right) \cos{\left(u \right)} + \left(3 u^{2} - \frac{1}{u^{2}}\right) \sin{\left(u \right)}\\6 u^{2} - 4 u \left(3 u + \frac{1}{u^{3}}\right) - \frac{2}{u^{2}}\\- 2 u \sin{\left(u \right)} - 2 \cos{\left(u \right)}\end{matrix}\right]$

$\dfrac{\mathrm{d}r_1}{\mathrm{d}u}(1)\times\dfrac{\mathrm{d}^2r_1}{\mathrm{d}u^2}(1)$

In [62]:
vek.evalf(subs={u:1})
Out[62]:
$\displaystyle \left[\begin{matrix}6.00536041656091\\-12.0\\-2.76354658135207\end{matrix}\right]$

Ili možemo prvi svaki vektor izračunati u točki $u=1$ pa vektorski produkt računati s konkretnim brojevima

In [63]:
vek1=r1.diff(u).evalf(subs={u:1})
vek2=r1.diff(u,2).evalf(subs={u:1})
In [64]:
vek1,vek2
Out[64]:
$\displaystyle \left( \left[\begin{matrix}2.0\\0.54030230586814\\2.0\end{matrix}\right], \ \left[\begin{matrix}2.0\\-0.841470984807897\\8.0\end{matrix}\right]\right)$
In [65]:
vek1.cross(vek2)
Out[65]:
$\displaystyle \left[\begin{matrix}6.00536041656091\\-12.0\\-2.76354658135207\end{matrix}\right]$

Vektorska funkcija dvije varijable

$r_2(u,v)=\big(u\cos{v},u^2+3v\sin{v},v\sqrt{u}\big)$

In [66]:
r2=sp.Matrix([u*sp.cos(v),u**2+3*v*sp.sin(v),v*u**sp.Rational(1,2)])
r2
Out[66]:
$\displaystyle \left[\begin{matrix}u \cos{\left(v \right)}\\u^{2} + 3 v \sin{\left(v \right)}\\\sqrt{u} v\end{matrix}\right]$

Parcijalne derivacije

In [67]:
r2.diff(u)
Out[67]:
$\displaystyle \left[\begin{matrix}\cos{\left(v \right)}\\2 u\\\frac{v}{2 \sqrt{u}}\end{matrix}\right]$
In [68]:
r2.diff(v)
Out[68]:
$\displaystyle \left[\begin{matrix}- u \sin{\left(v \right)}\\3 v \cos{\left(v \right)} + 3 \sin{\left(v \right)}\\\sqrt{u}\end{matrix}\right]$

Vrijednosti parcijalnih derivacija u točki $(1,-2)$

In [69]:
vek3=r2.diff(u).evalf(subs={u:1,v:-2})
vek3
Out[69]:
$\displaystyle \left[\begin{matrix}-0.416146836547142\\2.0\\-1.0\end{matrix}\right]$
In [70]:
vek4=r2.diff(v).evalf(subs={u:1,v:-2})
vek4
Out[70]:
$\displaystyle \left[\begin{matrix}0.909297426825682\\-0.231011261194191\\1.0\end{matrix}\right]$

$\dfrac{\partial r_2}{\partial u}\times\dfrac{\partial r_2}{\partial v}$

In [71]:
r2u_x_r2v=r2.diff(u).cross(r2.diff(v))
r2u_x_r2v
Out[71]:
$\displaystyle \left[\begin{matrix}2 u^{\frac{3}{2}} - \frac{v \left(3 v \cos{\left(v \right)} + 3 \sin{\left(v \right)}\right)}{2 \sqrt{u}}\\- \frac{\sqrt{u} v \sin{\left(v \right)}}{2} - \sqrt{u} \cos{\left(v \right)}\\2 u^{2} \sin{\left(v \right)} + \left(3 v \cos{\left(v \right)} + 3 \sin{\left(v \right)}\right) \cos{\left(v \right)}\end{matrix}\right]$

$\dfrac{\partial r_2}{\partial u}(1,-2)\times\dfrac{\partial r_2}{\partial v}(1,-2)$

In [72]:
r2u_x_r2v.evalf(subs={u:1,v:-2})
Out[72]:
$\displaystyle \left[\begin{matrix}1.76898873880581\\-0.493150590278539\\-1.72246024809864\end{matrix}\right]$

Ili možemo prvi svaki vektor izračunati u točki $(1,-2)$ pa vektorski produkt računati s konkretnim brojevima

In [73]:
vek3.cross(vek4)
Out[73]:
$\displaystyle \left[\begin{matrix}1.76898873880581\\-0.493150590278539\\-1.72246024809864\end{matrix}\right]$

$\dfrac{\partial^3 r_2}{\partial u^2\partial v}$

In [74]:
r2.diff(u,2,v,1)
Out[74]:
$\displaystyle \left[\begin{matrix}0\\0\\- \frac{1}{4 u^{\frac{3}{2}}}\end{matrix}\right]$

Zadaci

U nastavku dajemo rješenja nekoliko zadataka pomoću sympy modula. Također je dano nekoliko korisnih napomena kako bi se izbjeglo pogrešno korištenje sympy modula.

1. zadatak

Pomoću diferencijala aproksimirajte prirast funkcije $F(x,y)=x^2y+y\sin{\big(x^2+y^2\big)}$ u točki $(1,-7)$ ako je $\Delta x=0.03,$ $\Delta y=-0.12$. Usporedite tu aproksimaciju sa stvarnim prirastom.

Rješenje

In [75]:
F=x**2*y+y*sp.sin(x**2+y**2)
F
Out[75]:
$\displaystyle x^{2} y + y \sin{\left(x^{2} + y^{2} \right)}$

Parcijalne derivacije funkcije $F$

In [76]:
Fx=F.diff(x)
Fy=F.diff(y)
In [77]:
Fx,Fy
Out[77]:
$\displaystyle \left( 2 x y \cos{\left(x^{2} + y^{2} \right)} + 2 x y, \ x^{2} + 2 y^{2} \cos{\left(x^{2} + y^{2} \right)} + \sin{\left(x^{2} + y^{2} \right)}\right)$

Aproksimacija prirasta funkcije pomoću diferencijala

In [78]:
Fx0=Fx.evalf(subs={x:1,y:-7})
Fy0=Fy.evalf(subs={x:1,y:-7})
In [79]:
prirast_apr=Fx0*0.03+Fy0*(-0.12) 
prirast_apr
Out[79]:
$\displaystyle -12.2618012445895$

Stvarna vrijednost prirasta

In [80]:
prirast=F.evalf(subs={x:1+0.03,y:-7-0.12}) - F.evalf(subs={x:1,y:-7})
prirast
Out[80]:
$\displaystyle -9.48689980424778$

Graf funkcije $F$

In [81]:
plt.rcParams['figure.figsize'] = 12,9
In [82]:
sp.plotting.plot3d(F,(x,-10,10),(y,-10,10),xlabel='x',ylabel='y');

Sympy nudi brzo rješenje za crtanje ploha koje je bazirano na matplotlibu modulu. Prednost je da ne moramo pisati puno koda za dobivanje slike, a nedostatak je da nemamo puno slobode u kontroliranju izgleda slike. Ako želimo raditi više zahvata na samoj slici, onda je bolje da direktno koristimo matplotlib modul.

Namjerno je graf zumiran oko zadane točke $(1,-7)$ kako bismo vidjeli da moramo biti oprezni kod vizualizacije. Prethodna slika je nacrtana na puno većoj domeni i daje potpuno krivu predodžbu o izgledu same plohe jer dobivamo dojam da ploha nije uopće "brdovita". Donja slika daje vjerniji prikaz plohe. Stoga je uvijek bolje nacrtati plohu na manjoj domeni oko neke zadane točke jer ćemo na taj način dobiti vjerniju sliku kako ploha izgleda u blizini neke točke.
Također, na slici je prikazana početna točka na plohi $\big(1,-7,F(1,-7)\big)$ te plava krivulja po kojoj se krećemo iz te točke ako su pomaci $\Delta x=0.03,$ $\Delta y=-0.12$. Sada je jasnije zašto diferencijal u ovom slučaju ne daje tako dobru aproksimaciju stvarnog prirasta, iako pomaci od početne točke nisu pretjerano veliki.

In [83]:
#ploha
xkor = arange(0, 2, 0.05)              
ykor = arange(-8, -6, 0.05)              
X, Y = meshgrid(xkor,ykor)           
Z = X**2*Y+Y*sin(X**2+Y**2)
#plava krivulja
tk = linspace(0, 0.25, 30)
xk = 1+tk
yk = -7-4*tk
zk = xk**2*yk+yk*sin(xk**2+yk**2)
#slika
figsize(12,9)
ax = axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap=cm.Spectral, linewidth=0.6,alpha=1,edgecolors='k')
ax.plot(xk, yk, zk, c='b',lw=4,alpha=0.7,zorder=3)
ax.plot([1], [-7], [F.evalf(subs={x:1,y:-7})], markerfacecolor='w', markeredgecolor='k', 
        marker='o', markersize=7, alpha=0.9,zorder=10)
ax.set_xlabel('\nx', linespacing=3.2,fontsize=16)
ax.set_ylabel('\ny', linespacing=3.2,fontsize=16)
ax.set_zlabel('z', linespacing=3.2,fontsize=16)
ax.view_init(elev=30,azim=-10)
ax.dist = 10

2. zadatak

Odredite lokalne ekstreme funkcije $f(x,y)=\big(x^2-2y^2\big)\cdot2.415^{x-y}.$

Rješenje

Kako je sympy modul prvenstveno namijenjen za simbolički račun, broj $2.415$ je najbolje reprezentirani kao egzaktni racionalni broj. To je prvenstveno bitno kod rješavanja sustava jednadžbi da izbjegnemo probleme s numerikom.

In [84]:
f=(x**2-2*y**2)*sp.Rational(2415,1000)**(x-y)
f
Out[84]:
$\displaystyle \left(\frac{483}{200}\right)^{x - y} \left(x^{2} - 2 y^{2}\right)$

Parcijalne derivacije

In [85]:
fx=f.diff(x)
fx
Out[85]:
$\displaystyle 2 \left(\frac{483}{200}\right)^{x - y} x + \left(\frac{483}{200}\right)^{x - y} \left(x^{2} - 2 y^{2}\right) \log{\left(\frac{483}{200} \right)}$
In [86]:
fy=f.diff(y)
fy
Out[86]:
$\displaystyle - 4 \left(\frac{483}{200}\right)^{x - y} y - \left(\frac{483}{200}\right)^{x - y} \left(x^{2} - 2 y^{2}\right) \log{\left(\frac{483}{200} \right)}$

Stacionarne točke

In [87]:
stac=sp.solve([fx,fy],[x,y])
stac
Out[87]:
$\displaystyle \left[ \left( 0, \ 0\right), \ \left( \frac{- \sqrt{\left(1 - \log{\left(483^{\log{\left(200^{\frac{16}{\log{\left(\frac{200}{483} \right)}^{2}}} \right)}} \right)}\right) \log{\left(\frac{200}{483} \right)}^{2} + 8 \log{\left(200 \right)}^{2} + 8 \log{\left(483 \right)}^{2}} + \log{\left(\frac{200}{483} \right)}}{\log{\left(\frac{200}{483} \right)}^{2}}, \ \frac{2}{\log{\left(\frac{200}{483} \right)}}\right)\right]$
In [88]:
stac1=stac[0]
stac2=stac[1]
In [89]:
stac1
Out[89]:
$\displaystyle \left( 0, \ 0\right)$

Pretvorimo simboličke izraze kod druge stacionarne točke u realne brojeve.

In [90]:
stac2=tuple(map(lambda x: sp.N(x), stac2))
stac2
Out[90]:
$\displaystyle \left( -4.53669415241996, \ -2.26834707620998\right)$

Hesseova matrica

In [91]:
hess_f=sp.hessian(f,[x,y])
hess_f
Out[91]:
$\displaystyle \left[\begin{matrix}4 \left(\frac{483}{200}\right)^{x - y} x \log{\left(\frac{483}{200} \right)} + \left(\frac{483}{200}\right)^{x - y} \left(x^{2} - 2 y^{2}\right) \log{\left(\frac{483}{200} \right)}^{2} + 2 \left(\frac{483}{200}\right)^{x - y} & - 2 \left(\frac{483}{200}\right)^{x - y} x \log{\left(\frac{483}{200} \right)} - 4 \left(\frac{483}{200}\right)^{x - y} y \log{\left(\frac{483}{200} \right)} - \left(\frac{483}{200}\right)^{x - y} \left(x^{2} - 2 y^{2}\right) \log{\left(\frac{483}{200} \right)}^{2}\\- 2 \left(\frac{483}{200}\right)^{x - y} x \log{\left(\frac{483}{200} \right)} - 4 \left(\frac{483}{200}\right)^{x - y} y \log{\left(\frac{483}{200} \right)} - \left(\frac{483}{200}\right)^{x - y} \left(x^{2} - 2 y^{2}\right) \log{\left(\frac{483}{200} \right)}^{2} & 8 \left(\frac{483}{200}\right)^{x - y} y \log{\left(\frac{483}{200} \right)} + \left(\frac{483}{200}\right)^{x - y} \left(x^{2} - 2 y^{2}\right) \log{\left(\frac{483}{200} \right)}^{2} - 4 \left(\frac{483}{200}\right)^{x - y}\end{matrix}\right]$

Točka $(0,0)$ je sedlasta točka funkcije $f$.

In [92]:
H1=hess_f.evalf(subs={x:stac1[0],y:stac1[1]})
H1
Out[92]:
$\displaystyle \left[\begin{matrix}2.0 & 0\\0 & -4.0\end{matrix}\right]$
In [93]:
H1.det()
Out[93]:
$\displaystyle -8.0$

U točki $(-4.53669415241996, -2.26834707620998)$ funkcija $f$ ima lokalni maksimum koji iznosi $1.39270791539802.$

In [94]:
H2=hess_f.evalf(subs={x:stac2[0],y:stac2[1]})
H2
Out[94]:
$\displaystyle \left[\begin{matrix}-0.812011699419676 & 1.0826822658929\\1.0826822658929 & -1.62402339883935\end{matrix}\right]$
In [95]:
H2.det()
Out[95]:
$\displaystyle 0.146525111109874$
In [96]:
f.evalf(subs={x:stac2[0],y:stac2[1]})
Out[96]:
$\displaystyle 1.39270791539802$

Graf funkcije $f$

Na slici ne vidimo baš rezultate koje smo dobili računski.

In [97]:
sp.plotting.plot3d(f,(x,-5,1),(y,-3,1),xlabel='x',ylabel='y');

matplotlib slika

In [98]:
#ploha
xkor = arange(-5, 1, 0.07)              
ykor = arange(-3, 1, 0.07)              
X, Y = meshgrid(xkor,ykor)           
Z = (X**2-2*Y**2)*2.415**(X-Y)
#slika
figsize(12,9)
ax = axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap=cm.Spectral, linewidth=0.6,alpha=1,edgecolors='k')
ax.plot([0,stac2[0]], [0,stac2[1]], [f.evalf(subs={x:0,y:0}),f.evalf(subs={x:stac2[0],y:stac2[1]})], 
        markerfacecolor='w', markeredgecolor='k', marker='o', ls='', markersize=7, alpha=0.9,zorder=10)
ax.set_xlabel('\nx', linespacing=3.2,fontsize=16)
ax.set_ylabel('\ny', linespacing=3.2,fontsize=16)
ax.set_zlabel('z', linespacing=3.2,fontsize=16)
ax.view_init(elev=30,azim=-50)
ax.dist = 10

Ako plohu dovoljno zumiramo oko točke $(0,0)$, možemo na slici uočiti da se radi o sedlastoj točki.

In [99]:
#ploha
xkor = arange(-1, 1, 0.07)              
ykor = arange(-1, 1, 0.07)              
X, Y = meshgrid(xkor,ykor)           
Z = (X**2-2*Y**2)*2.415**(X-Y)
#slika
figsize(12,9)
ax = axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap=cm.Spectral, linewidth=0.6,alpha=1,edgecolors='k')
ax.plot([0], [0], [f.evalf(subs={x:0,y:0})], markerfacecolor='w', markeredgecolor='k', 
        marker='o', markersize=7, alpha=0.9,zorder=10)
ax.set_xlabel('\nx', linespacing=3.2,fontsize=16)
ax.set_ylabel('\ny', linespacing=3.2,fontsize=16)
ax.set_zlabel('z', linespacing=3.2,fontsize=16)
ax.view_init(elev=30,azim=-50)
ax.dist = 10

Ako plohu dovoljno zumiramo oko točke $(-4.53669415241996,-2.26834707620998)$, možemo na slici uočiti da se radi o točki lokalnog maksimuma.

In [100]:
#ploha
xkor = arange(-5, -4, 0.03)              
ykor = arange(-2.5, -1.5, 0.03)              
X, Y = meshgrid(xkor,ykor)           
Z = (X**2-2*Y**2)*2.415**(X-Y)
#slika
figsize(12,9)
ax = axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap=cm.Spectral, linewidth=0.6,alpha=1,edgecolors='k')
ax.plot([stac2[0]], [stac2[1]], [f.evalf(subs={x:stac2[0],y:stac2[1]})], 
        markerfacecolor='w', markeredgecolor='k', marker='o', markersize=7, alpha=0.9,zorder=10)
ax.set_xlabel('\nx', linespacing=3.2,fontsize=16)
ax.set_ylabel('\ny', linespacing=3.2,fontsize=16)
ax.set_zlabel('z', linespacing=3.2,fontsize=16)
ax.view_init(elev=30,azim=-30)
ax.dist = 10

3. zadatak

Odredite ekstreme funkcije $G(x,y,z)=(x-2)^2+(y-3)^2+(z+1.34)^2$ uz uvjet $\dfrac{x^2}{2}+\dfrac{y^2}{3}+\dfrac{z^2}{5.21}=1.$

Rješenje

In [101]:
G=(x-2)**2+(y-3)**2+(z+sp.Rational(134,100))**2
G
Out[101]:
$\displaystyle \left(x - 2\right)^{2} + \left(y - 3\right)^{2} + \left(z + \frac{67}{50}\right)^{2}$

Lagrangeova funkcija

In [102]:
L=G + t*(sp.Rational(1,2)*x**2+sp.Rational(1,3)*y**2+sp.Rational(100,521)*z**2-1)
L
Out[102]:
$\displaystyle t \left(\frac{x^{2}}{2} + \frac{y^{2}}{3} + \frac{100 z^{2}}{521} - 1\right) + \left(x - 2\right)^{2} + \left(y - 3\right)^{2} + \left(z + \frac{67}{50}\right)^{2}$

Parcijalne derivacije

In [103]:
Lx=L.diff(x)
Lx
Out[103]:
$\displaystyle t x + 2 x - 4$
In [104]:
Ly=L.diff(y)
Ly
Out[104]:
$\displaystyle \frac{2 t y}{3} + 2 y - 6$
In [105]:
Lz=L.diff(z)
Lz
Out[105]:
$\displaystyle \frac{200 t z}{521} + 2 z + \frac{67}{25}$
In [106]:
Lt=L.diff(t)
Lt
Out[106]:
$\displaystyle \frac{x^{2}}{2} + \frac{y^{2}}{3} + \frac{100 z^{2}}{521} - 1$

Stacionarne točke

Nije moguće egzaktno riješiti zadani sustav jednadžbi pa trebamo ići na numeričko rješavanje da pronađemo približno rješenje.

In [107]:
sp.solve([Lx,Ly,Lz,Lt],[x,y,z,t])
Out[107]:
$\displaystyle \left[ \right]$

Vidimo da iz prve tri jednadžbe možemo lagano nepoznanice $x,y,z$ izraziti pomoću nepoznanice $t$.

In [108]:
xt=sp.solve_linear(Lx,symbols=[x])
xt
Out[108]:
$\displaystyle \left( x, \ \frac{4}{t + 2}\right)$
In [109]:
yt=sp.solve_linear(Ly,symbols=[y])
yt
Out[109]:
$\displaystyle \left( y, \ \frac{18}{2 t + 6}\right)$
In [110]:
zt=sp.solve_linear(Lz,symbols=[z])
zt
Out[110]:
$\displaystyle \left( z, \ - \frac{34907}{5000 t + 26050}\right)$

Uvrstimo dobivene izraze u zadnju jednadžbu, tj. uvjet.

In [111]:
jed=Lt.subs({x:xt[1],y:yt[1],z:zt[1]})
jed
Out[111]:
$\displaystyle -1 + \frac{233876900}{\left(5000 t + 26050\right)^{2}} + \frac{108}{\left(2 t + 6\right)^{2}} + \frac{8}{\left(t + 2\right)^{2}}$

Malo sredimo jednadžbu tako da ju svedemo na traženje nultočaka polinoma.

In [112]:
jed.factor()
Out[112]:
$\displaystyle - \frac{250000 t^{6} + 5105000 t^{5} + 30997256 t^{4} + 25682560 t^{3} - 359042403 t^{2} - 1166904540 t - 1061383284}{25 \left(t + 2\right)^{2} \left(t + 3\right)^{2} \left(100 t + 521\right)^{2}}$
In [113]:
jed.factor().as_numer_denom()
Out[113]:
$\displaystyle \left( - 250000 t^{6} - 5105000 t^{5} - 30997256 t^{4} - 25682560 t^{3} + 359042403 t^{2} + 1166904540 t + 1061383284, \ 25 \left(t + 2\right)^{2} \left(t + 3\right)^{2} \left(100 t + 521\right)^{2}\right)$

Uzmemo samo brojnik.

In [114]:
jed=jed.factor().as_numer_denom()[0]
jed
Out[114]:
$\displaystyle - 250000 t^{6} - 5105000 t^{5} - 30997256 t^{4} - 25682560 t^{3} + 359042403 t^{2} + 1166904540 t + 1061383284$

Pretvorimo brojnik u klasu polinom i numerički pronađemo sve njegove nultočke.

In [115]:
jed=jed.as_poly()
jed
Out[115]:
$\displaystyle \operatorname{Poly}{\left( -250000 t^{6} - 5105000 t^{5} - 30997256 t^{4} - 25682560 t^{3} + 359042403 t^{2} + 1166904540 t + 1061383284, t, domain=\mathbb{Z} \right)}$
In [116]:
nultocke=jed.nroots()
nultocke
Out[116]:
$\displaystyle \left[ -10.2484203805903, \ 3.58525133701441, \ -4.65049147736999 - 0.926606616726492 i, \ -4.65049147736999 + 0.926606616726492 i, \ -2.22792400084209 - 0.418347028062213 i, \ -2.22792400084209 + 0.418347028062213 i\right]$

Zanimaju nas samo realna rješenja.

In [117]:
rj=list(filter(lambda x: sp.im(x)==0, nultocke))
rj
Out[117]:
$\displaystyle \left[ -10.2484203805903, \ 3.58525133701441\right]$
In [118]:
t1,t2=rj
In [119]:
t1
Out[119]:
$\displaystyle -10.2484203805903$
In [120]:
t2
Out[120]:
$\displaystyle 3.58525133701441$

Izračunamo pripadne vrijednosti nepoznanica $x,y,z.$

In [121]:
x1=xt[1].evalf(subs={t:t1})
x1
Out[121]:
$\displaystyle -0.484941336090555$
In [122]:
x2=xt[1].evalf(subs={t:t2})
x2
Out[122]:
$\displaystyle 0.716171888898055$
In [123]:
y1=yt[1].evalf(subs={t:t1})
y1
Out[123]:
$\displaystyle -1.24164983919808$
In [124]:
y2=yt[1].evalf(subs={t:t2})
y2
Out[124]:
$\displaystyle 1.36669043281807$
In [125]:
z1=zt[1].evalf(subs={t:t1})
z1
Out[125]:
$\displaystyle 1.38563269291597$
In [126]:
z2=zt[1].evalf(subs={t:t2})
z2
Out[126]:
$\displaystyle -0.793769243480183$

Kako je uvjet $\frac{x^2}{2}+\frac{y^2}{3}+\frac{z^2}{5.21}=1$ kompaktni skup u $\mathbb{R}^3$, funkcija $G$ u dobivenim dvjema stacionarnim točkama postiže globalne uvjetne ekstreme. Uvjet geometrijski predstavlja elipsoid u prostoru.

U točki $(-0.484941336090555,-1.24164983919808,1.38563269291597)$ funkcija $G$ postiže uvjetni globalni maksimum koji iznosi $31.595600378873.$

In [127]:
G.evalf(subs={x:x1,y:y1,z:z1})
Out[127]:
$\displaystyle 31.595600378873$

U točki $(0.716171888898055,1.36669043281807,-0.793769243480183)$ funkcija $G$ postiže uvjetni globalni minimum koji iznosi $4.61428280047182.$

In [128]:
G.evalf(subs={x:x2,y:y2,z:z2})
Out[128]:
$\displaystyle 4.61428280047182$

Mogli smo sustav riješiti numerički direktno pomoću naredbe nsolve. Međutim, tada moramo navesti neku početnu aproksimaciju od pravog rješenja. Ukoliko je ta aproksimacija loša, možda nećemo uspjeti pronaći rješenje ili će dobiveno rješenje biti manje precizno. Pogledajte dolje nekoliko primjera izvođenja te naredbe s obzirom na različite početne aproksimacije. Prednost ovog načina je manje pisanja koda, a nedostatak je da moramo unaprijed znati koliko ima rješenja ukoliko ih želimo sva pronaći. Prednost ranijeg postupka jest da ne moramo unaprijed znati koliko imamo rješenja, nego korak po korak dolazimo do polinomijalne jednadžbe s jednom nepoznanicom čija rješenja možemo pronaći bez početnih aproksimacija. Nedostatak je da moramo pisati više koda, ali sigurno dolazimo do svih rješenja.

In [129]:
sp.nsolve([Lx,Ly,Lz,Lt],[x,y,z,t],[-3,5,1,-9])
Out[129]:
$\displaystyle \left[\begin{matrix}-0.484941336090555\\-1.24164983919808\\1.38563269291597\\-10.2484203805903\end{matrix}\right]$
In [130]:
sp.nsolve([Lx,Ly,Lz,Lt],[x,y,z,t],[1,2,-1,4])
Out[130]:
$\displaystyle \left[\begin{matrix}0.716171888898055\\1.36669043281807\\-0.793769243480183\\3.58525133701441\end{matrix}\right]$
In [131]:
sp.nsolve([Lx,Ly,Lz,Lt],[x,y,z,t],[20,13,30,100])
Out[131]:
$\displaystyle \left[\begin{matrix}0.716171888898055\\1.36669043281807\\-0.793769243480183\\3.58525133701441\end{matrix}\right]$
In [132]:
sp.nsolve([Lx,Ly,Lz,Lt],[x,y,z,t],[200,103,300,100])
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/tmp/ipykernel_25479/3771905655.py in <module>
----> 1 sp.nsolve([Lx,Ly,Lz,Lt],[x,y,z,t],[200,103,300,100])

/usr/lib/python3.9/site-packages/sympy/utilities/decorator.py in func_wrapper(*args, **kwargs)
     86         dps = mpmath.mp.dps
     87         try:
---> 88             return func(*args, **kwargs)
     89         finally:
     90             mpmath.mp.dps = dps

/usr/lib/python3.9/site-packages/sympy/solvers/solvers.py in nsolve(dict, *args, **kwargs)
   2952     J = lambdify(fargs, J, modules)
   2953     # solve the system numerically
-> 2954     x = findroot(f, x0, J=J, **kwargs)
   2955     if as_dict:
   2956         return [dict(zip(fargs, [sympify(xi) for xi in x]))]

/usr/lib/python3.9/site-packages/mpmath/calculus/optimization.py in findroot(ctx, f, x0, solver, tol, verbose, verify, **kwargs)
    983             xl = x
    984         if verify and norm(f(*xl))**2 > tol: # TODO: better condition?
--> 985             raise ValueError('Could not find root within given tolerance. '
    986                              '(%s > %s)\n'
    987                              'Try another starting point or tweak arguments.'

ValueError: Could not find root within given tolerance. (0.000438386331676975702112 > 2.16840434497100886801e-19)
Try another starting point or tweak arguments.
In [133]:
sp.nsolve([Lx,Ly,Lz,Lt],[x,y,z,t],[200,103,300,100],verify=False)
Out[133]:
$\displaystyle \left[\begin{matrix}0.71707374916245\\1.36710242518659\\-0.794306945435048\\3.5602937415546\end{matrix}\right]$

Geometrijska interpretacija

Funkcija $G$ zapravo daje kvadrat udaljenosti točke $(2,3,-1.34)$ od točke $(x,y,z)$. U zadatku se zapravo traže na elipsoidu $\frac{x^2}{2}+\frac{y^2}{3}+\frac{z^2}{5.21}=1$ najbliža i najudaljenija točka od točke $(2,3,-1.34).$

Točka $(-0.484941336090555,-1.24164983919808,1.38563269291597)$ je najudaljenija točka na zadanom elipsoidu od točke $(2,3,-1.34)$ i njihova udaljenost iznosi $5.62099638666251.$

In [134]:
d1=G.evalf(subs={x:x1,y:y1,z:z1})
sp.sqrt(d1)
Out[134]:
$\displaystyle 5.62099638666251$

Točka $(0.716171888898055,1.36669043281807,-0.793769243480183)$ je najbliža točka na zadanom elipsoidu od točke $(2,3,-1.34)$ i njihova udaljenost iznosi $2.14808817334667.$

In [135]:
d2=G.evalf(subs={x:x2,y:y2,z:z2})
sp.sqrt(d2)
Out[135]:
$\displaystyle 2.14808817334667$
3D slika
In [136]:
#ploha
uk = linspace(0, 2*pi, 80)              
vk = linspace(0, pi, 60)
xk, yk = meshgrid(uk,vk)
X = 2*cos(xk)*sin(yk)
Y = 3*sin(uk)*sin(yk)
Z = 5.21*cos(yk)
#slika
figsize(12,9)
ax = axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap=cm.Spectral, linewidth=0.3,alpha=0.5,edgecolors=(0,0,0,0.3))
ax.plot([0.97,2], [1.25,3], [-0.21,-1], marker='', alpha=1, c='k',zorder=3)
ax.plot([2,2], [3,3], [-1,-5.2], marker='', alpha=1, c='k',ls='--',lw=1,zorder=3)
ax.plot([0.97,x1], [1.25,y1], [-0.21,z1], marker='', alpha=1, c='k')
ax.plot([2,x2], [3,y2], [-1,z2], marker='', alpha=1, c='k',zorder=3)
ax.plot([x1], [y1], [z1], markerfacecolor='b', markeredgecolor='b', 
         marker='o', markersize=7, alpha=1)
ax.plot([2], [3], [-1.34], markerfacecolor='w', markeredgecolor='r', 
         marker='o', markersize=8, alpha=1,zorder=10)
ax.plot([x2], [y2], [z2], markerfacecolor='b', markeredgecolor='b', 
         marker='o', markersize=7, alpha=0.7, zorder=10)
ax.set_xlabel('\nx', linespacing=3.2,fontsize=16)
ax.set_ylabel('\ny', linespacing=3.2,fontsize=16)
ax.set_zlabel('z', linespacing=3.2,fontsize=16)
ax.set_zlim3d(-5,5) 
ax.view_init(elev=30,azim=60)
ax.dist = 10

4. zadatak

Odredite ekstreme funkcije $f(x,y)=2x+3y$ uz uvjet $xy=2.$

Rješenje

In [137]:
f=2*x+3*y
f
Out[137]:
$\displaystyle 2 x + 3 y$

Lagrangeova funkcija

In [138]:
L=f+t*(x*y-2)
L
Out[138]:
$\displaystyle t \left(x y - 2\right) + 2 x + 3 y$

Parcijalne derivacije

In [139]:
Lx=L.diff(x)
Lx
Out[139]:
$\displaystyle t y + 2$
In [140]:
Ly=L.diff(y)
Ly
Out[140]:
$\displaystyle t x + 3$
In [141]:
Lt=L.diff(t)
Lt
Out[141]:
$\displaystyle x y - 2$

Stacionarne točke

In [142]:
stac=sp.solve([Lx,Ly,Lt],[x,y,t])
stac
Out[142]:
$\displaystyle \left[ \left( - \sqrt{3}, \ - \frac{2 \sqrt{3}}{3}, \ \sqrt{3}\right), \ \left( \sqrt{3}, \ \frac{2 \sqrt{3}}{3}, \ - \sqrt{3}\right)\right]$

Hesseova matrica

In [143]:
hess_L=sp.hessian(L,[t,x,y])
hess_L
Out[143]:
$\displaystyle \left[\begin{matrix}0 & y & x\\y & 0 & t\\x & t & 0\end{matrix}\right]$

U točki $\Big(\!-\!\sqrt{3},-\frac{2}{3}\sqrt{3}\Big)$ funkcija $f$ postiže uvjetni lokalni maksimum koji iznosi $-4\sqrt{3}.$

In [144]:
hess_L.evalf(subs={x:stac[0][0],y:stac[0][1],t:stac[0][2]})
Out[144]:
$\displaystyle \left[\begin{matrix}0 & -1.15470053837925 & -1.73205080756888\\-1.15470053837925 & 0 & 1.73205080756888\\-1.73205080756888 & 1.73205080756888 & 0\end{matrix}\right]$
In [145]:
H1=hess_L.subs({x:stac[0][0],y:stac[0][1],t:stac[0][2]})
H1
Out[145]:
$\displaystyle \left[\begin{matrix}0 & - \frac{2 \sqrt{3}}{3} & - \sqrt{3}\\- \frac{2 \sqrt{3}}{3} & 0 & \sqrt{3}\\- \sqrt{3} & \sqrt{3} & 0\end{matrix}\right]$
In [146]:
H1.det()
Out[146]:
$\displaystyle 4 \sqrt{3}$
In [147]:
f.subs({x:stac[0][0],y:stac[0][1]})
Out[147]:
$\displaystyle - 4 \sqrt{3}$
In [148]:
f1=f.evalf(subs={x:stac[0][0],y:stac[0][1]})
f1
Out[148]:
$\displaystyle -6.92820323027551$

U točki $\Big(\sqrt{3},\frac{2}{3}\sqrt{3}\Big)$ funkcija $f$ postiže uvjetni lokalni minimum koji iznosi $4\sqrt{3}.$

In [149]:
hess_L.evalf(subs={x:stac[1][0],y:stac[1][1],t:stac[1][2]})
Out[149]:
$\displaystyle \left[\begin{matrix}0 & 1.15470053837925 & 1.73205080756888\\1.15470053837925 & 0 & -1.73205080756888\\1.73205080756888 & -1.73205080756888 & 0\end{matrix}\right]$
In [150]:
H2=hess_L.subs({x:stac[1][0],y:stac[1][1],t:stac[1][2]})
H2
Out[150]:
$\displaystyle \left[\begin{matrix}0 & \frac{2 \sqrt{3}}{3} & \sqrt{3}\\\frac{2 \sqrt{3}}{3} & 0 & - \sqrt{3}\\\sqrt{3} & - \sqrt{3} & 0\end{matrix}\right]$
In [151]:
H2.det()
Out[151]:
$\displaystyle - 4 \sqrt{3}$
In [152]:
f.subs({x:stac[1][0],y:stac[1][1]})
Out[152]:
$\displaystyle 4 \sqrt{3}$
In [153]:
f2=f.evalf(subs={x:stac[1][0],y:stac[1][1]})
f2
Out[153]:
$\displaystyle 6.92820323027551$

3D slika

In [154]:
#ploha
xkor = arange(-10, 10, 1)              
ykor = arange(-10,10,1)              
X, Y = meshgrid(xkor,ykor)           
Z = 2*X+3*Y
#crvena i plava krivulja
tk1 = linspace(0.23, 9, 40)
yk1 = 2 / tk1
zk1 = 2*tk1 + 3*yk1
tk2 = linspace(-10,-0.2, 40)
yk2 = 2 / tk2
zk2 = 2*tk2 + 3*yk2
#slika
figsize(12,9)
ax = axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap=cm.summer, linewidth=0.6,alpha=0.8,edgecolors=(0,0,0,0.4))
ax.plot(tk1, yk1, zk1, c='r',lw=3,alpha=0.7,zorder=3)
ax.plot(tk2, yk2, zk2, c='r',lw=3,alpha=0.7,zorder=3)
ax.plot(tk1, yk1, -50, c='b',lw=3,alpha=0.9)
ax.plot(tk2, yk2, -50, c='b',lw=3,alpha=0.9)
ax.plot([stac[0][0],stac[1][0],stac[0][0],stac[1][0]], [stac[0][1],stac[1][1],stac[0][1],stac[1][1]], [f1,f2,-50,-50], 
         markerfacecolor='w', markeredgecolor='k', ls='', marker='o', markersize=7, alpha=0.9,zorder=10)
ax.set_xlabel('\nx', linespacing=3.2,fontsize=16)
ax.set_ylabel('\ny', linespacing=3.2,fontsize=16)
ax.set_zlabel('z', linespacing=3.2,fontsize=16)
ax.set_zlim3d(-50,50) 
ax.view_init(elev=20,azim=-70)
ax.dist = 10

5. zadatak

Zadana je ploha $r(u,v)=\big(\sin{u},\,\sin{v},\,\sin{(u+v)}\big)$ i točka $A$ na toj plohi s parametrima $u=1.25$, $v=1.35$. Odredite jednadžbu tangencijalne ravnine na zadanu plohu u točki $A$.

Rješenje

In [155]:
r=sp.Matrix([sp.sin(u),sp.sin(v),sp.sin(u+v)])
r
Out[155]:
$\displaystyle \left[\begin{matrix}\sin{\left(u \right)}\\\sin{\left(v \right)}\\\sin{\left(u + v \right)}\end{matrix}\right]$

Parcijalne derivacije

In [156]:
ru=r.diff(u)
ru
Out[156]:
$\displaystyle \left[\begin{matrix}\cos{\left(u \right)}\\0\\\cos{\left(u + v \right)}\end{matrix}\right]$
In [157]:
rv=r.diff(v)
rv
Out[157]:
$\displaystyle \left[\begin{matrix}0\\\cos{\left(v \right)}\\\cos{\left(u + v \right)}\end{matrix}\right]$

Vektori koji određuju tangencijalnu ravninu u točki plohe s parametrima $u=1.25,$ $v=1.35$

In [158]:
v1=ru.subs({u:1.25,v:1.35})
v1
Out[158]:
$\displaystyle \left[\begin{matrix}0.315322362395269\\0\\-0.856888753368947\end{matrix}\right]$
In [159]:
v2=rv.subs({u:1.25,v:1.35})
v2
Out[159]:
$\displaystyle \left[\begin{matrix}0\\0.219006687093041\\-0.856888753368947\end{matrix}\right]$

Normala tangencijalne ravnine

In [160]:
ruxrv=ru.cross(rv)
ruxrv
Out[160]:
$\displaystyle \left[\begin{matrix}- \cos{\left(v \right)} \cos{\left(u + v \right)}\\- \cos{\left(u \right)} \cos{\left(u + v \right)}\\\cos{\left(u \right)} \cos{\left(v \right)}\end{matrix}\right]$

Normala tangencijalne ravnine u točki plohe s parametrima $u=1.25,$ $v=1.35$

In [161]:
nor=ruxrv.subs({u:1.25,v:1.35})
nor
Out[161]:
$\displaystyle \left[\begin{matrix}0.187664367082619\\0.270196186022233\\0.0690577059545392\end{matrix}\right]$

Kartezijeve koordinate točke $A$

In [162]:
A=r.subs({u:1.25,v:1.35})
A
Out[162]:
$\displaystyle \left[\begin{matrix}0.948984619355586\\0.975723357826659\\0.515501371821464\end{matrix}\right]$

Jednadžba tangencijalne ravnine zadane plohe u točki $A$

In [163]:
rav=sp.Plane(sp.Point3D(A),nor)
rav.equation()
Out[163]:
$\displaystyle \frac{187664367082619 x}{1000000000000000} + \frac{270196186022233 y}{1000000000000000} + \frac{43161066221587 z}{625000000000000} - \frac{2386633350072420819226090293349}{5000000000000000000000000000000}$
In [164]:
rav.equation().evalf()
Out[164]:
$\displaystyle 0.187664367082619 x + 0.270196186022233 y + 0.0690577059545392 z - 0.477326670014484$

3D slika

In [165]:
#ploha
uk = linspace(0, 2*pi, 100)              
vk = linspace(0, 2*pi, 100)
xk, yk = meshgrid(uk,vk)
X = sin(xk)
Y = sin(yk)
Z = sin(xk+yk)
#tangencijalna ravnina
alpha=0.8
u1 = linspace(-0.6,0.6,2)
u2 = linspace(-1.6,1.6,2)
xr,yr = meshgrid(u1,u2)
xrav = float(A[0])+float(v1[0])*(xr*cos(alpha)-sin(alpha)*yr)+float(v2[0])*(yr*cos(alpha)+sin(alpha)*xr)
yrav = float(A[1])+float(v1[1])*(xr*cos(alpha)-sin(alpha)*yr)+float(v2[1])*(yr*cos(alpha)+sin(alpha)*xr)
zrav = float(A[2])+float(v1[2])*(xr*cos(alpha)-sin(alpha)*yr)+float(v2[2])*(yr*cos(alpha)+sin(alpha)*xr)
#slika
figsize(12,9)
ax = axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap=cm.Spectral, linewidth=0.3,alpha=0.9,edgecolors=(0,0,0,0.3))
ax.plot_surface(xrav, yrav, zrav, cmap=cm.gray, linewidth=0.1,alpha=0.4,edgecolors=(0,0,0,0.2))
ax.plot([A[0]], [A[1]], [A[2]], markerfacecolor='w', markeredgecolor='b', 
         marker='o', markersize=7, alpha=1,zorder=10)
ax.set_xlabel('\nx', linespacing=3.2,fontsize=16)
ax.set_ylabel('\ny', linespacing=3.2,fontsize=16)
ax.set_zlabel('z', linespacing=3.2,fontsize=16) 
ax.view_init(elev=30,azim=60)
ax.dist = 10
In [ ]: