Diferenciální počet funkcí dvou proměnných

Pro práci s funkcemi dvou proměnných musíme deklarovat proměnné $x$ a $y$.

{{{id=5| (x,y,z)=var('x y z') /// }}}

Nadefinujeme funkci dvou proměnných, pomocí příkazu show si ji zobrazíme a pomocí příkazu diff ji zderivujeme, v tom to případě jednou podle $x$ a jednou podle $y$, tj vypočteme $f''_{xy}$.

{{{id=7| f(x,y)=atan(y/x) show(f(x,y)) diff(f(x,y),x,y) /// \newcommand{\Bold}[1]{\mathbf{#1}}\arctan\left(\frac{y}{x}\right) \newcommand{\Bold}[1]{\mathbf{#1}}-\frac{1}{{\left(\frac{y^{2}}{x^{2}} + 1\right)} x^{2}} + 2 \, \frac{y^{2}}{{\left(\frac{y^{2}}{x^{2}} + 1\right)}^{2} x^{4}} }}}

Výsledek nic moc? Tak si jej upravíme. Znak _ nás odkazuje na výsledek posledního výpočtu a funkce factor se snaží výraz rozložit na součin.

{{{id=28| factor(_) /// \newcommand{\Bold}[1]{\mathbf{#1}}-\frac{{\left(x - y\right)} {\left(x + y\right)}}{{\left(x^{2} + y^{2}\right)}^{2}} }}}

Lokální extrémy funkce dvou proměnných

Definujeme jinou funkci dvou proměnných: $f(x,y)=xy(4-x-y)$.

Derivace funkce položíme rovny nule a najdeme tak stacionární body. Potom všechny stacionární body dosadíme do Hessiánu a druhé parciální derivace podle $x$.

{{{id=11| f(x,y)=x*y*(4-x-y) show(z==f(x,y)) sols=solve([diff(f(x,y),x),diff(f(x,y),y)],[x,y], solution_dict=True) fxx(x,y)=diff(f(x,y),x,x) H=f.hessian().determinant() A=[["Stacionární bod","Hesián","$f''_{xx}$"]] for s in sols: A.append([[s[x],s[y]],H(s[x],s[y]),fxx(s[x],s[y])]) html.table(A,header=True) /// \newcommand{\Bold}[1]{\mathbf{#1}}z = -{\left(x + y - 4\right)} x y
Stacionární bod Hesián f''_{xx}
\left[0, 0\right] -16 0
\left[0, 4\right] -16 -8
\left[4, 0\right] -16 0
\left[\frac{4}{3}, \frac{4}{3}\right] \frac{16}{3} -\frac{8}{3}
}}}

Nyní se můžeme pokusit tento postup co nejvíce zautomatizovat a napsat funkci, která se snaží nalézt všechny lokální extrémy a posoudit jejich kvalitu.

{{{id=31| x,y=var('x y') def loc_extr(funkce): html(r'Funkce $z=%s$'%latex(funkce)) sols=solve([diff(funkce,x),diff(funkce,y)],[x,y], solution_dict=True) fxx=diff(funkce,x,x) H=funkce.hessian().determinant() A=[["Stacionární bod","Hesián","$f''_{xx}$","rozhodnutí"]] for s in sols: if H.subs(s) < 0: druha_derivace='...' rozhodnuti='sedlo' elif H.subs(s) > 0: druha_derivace=fxx.subs(s) if fxx.subs(s) > 0: rozhodnuti='minimum' else: rozhodnuti='maximum' else: druha_derivace='...' rozhodnuti='???' A.append([[s[x],s[y]],H.subs(s),druha_derivace,rozhodnuti]) html.table(A,header=True) /// }}} {{{id=32| loc_extr(x*y*(4-x-y)) /// Funkce z=-{\left(x + y - 4\right)} x y
Stacionární bod Hesián f''_{xx} rozhodnutí
\left[0, 0\right] -16 ... sedlo
\left[0, 4\right] -16 ... sedlo
\left[4, 0\right] -16 ... sedlo
\left[\frac{4}{3}, \frac{4}{3}\right] \frac{16}{3} -\frac{8}{3} maximum
}}} {{{id=33| loc_extr(x^2-y^2) /// Funkce z=x^{2} - y^{2}
Stacionární bod Hesián f''_{xx} rozhodnutí
\left[0, 0\right] -4 ... sedlo
}}}

Kreslení 3D grafů

Graf funkce dvou proměnných. Pomocí myši můžete grafem otáčet a kolečkem přibližovat a oddalovat (musíte smazat volbu viewer='tachyon', která je použita pro zobrazení statického obrázku).

{{{id=17| plot3d(f(x,y),(x,-5,5),(y,-5,5),viewer='tachyon') /// }}}

Graf funkce dvou proměnných se stacionárními body. Posloupnost příkazů vytiskne funkci, stacionární body a nakreslí tyto body do 3D grafu

{{{id=23| x,y,z=var('x y z') f(x,y)=x*y*(4-x-y) show(z==f(x,y)) sols=solve([diff(f(x,y),x),diff(f(x,y),y)],[x,y], solution_dict=True) PIC=plot3d(f(x,y),(x,-8,8),(y,-8,8),opacity=0.8) SP=[] for s in sols: SP.append([s[x],s[y]]) PIC=PIC+point3d((s[x],s[y],f(s[x],s[y])),color='red') show(SP) show(PIC,viewer='tachyon') PIC.rotate((0,0,1),pi/3).show(viewer='tachyon') /// \newcommand{\Bold}[1]{\mathbf{#1}}z = -{\left(x + y - 4\right)} x y \newcommand{\Bold}[1]{\mathbf{#1}}\left[\left[0, 0\right], \left[0, 4\right], \left[4, 0\right], \left[\frac{4}{3}, \frac{4}{3}\right]\right] }}}

Pro kreslení vrstevnic slouží příkaz contour_plot, který je popsán v dalším dokumentu.

{{{id=29| /// }}}