Sage

Obsah

Základy práceStálý odkaz na toto místo:
http://user.mendelu.cz/marik/akademie/sage.html#zaklady-prace

Napište desetiným číslem přibližnou hodnotu \(\displaystyle \pi\).
Roznásobte závorky ve výrazu \(\displaystyle x(x-1)(x+3)^2\).
Sage (spustit, spustit na MENDELU)
expand(x*(x-1)*(x+3)^2).show()
Sage (spustit, spustit na MENDELU)
vyraz = x*(x-1)*(x+3)^2 # zobrazeni zadani (pro kontrolu) vyraz.show() # vypocet vyraz.expand().show()
Rozložte na součin výraz \(\displaystyle x^4+5x^3+3x^2-9x\).
Sage (spustit, spustit na MENDELU)
factor(x^4+5*x^3+3*x^2-9*x).show()
Vyřešte rovnici \(\displaystyle 2e^{x^2-1}=3\).
Sage (spustit, spustit na MENDELU)
show(solve(2*e^(x^2-1) == 3, x))
Sage (spustit, spustit na MENDELU)
rovnice = 2*e^(x^2-1) == 3 reseni = rovnice.solve(x) show(rovnice) show(reseni)
Vyřešte rovnici \(\displaystyle 2e^{x^2-1}=3\).
Řešíme přibližně desetinným číslem.
Sage (spustit, spustit na MENDELU)
reseni=solve(2*e^(x^2-1) == 3, x) show(reseni) # s každou položkou seznamu řešení provedeme následující: # levou stranu rovnice necháme, pravou aproximujeme funkcí n() vysl=map(lambda x: x.lhs()==x.rhs().n(), reseni) show(vysl)

Diferenciální početStálý odkaz na toto místo:
http://user.mendelu.cz/marik/akademie/sage.html#diferencialni-pocet

Derivujte funkci \(\displaystyle y=x^2 \sin(x)\).
Sage (spustit, spustit na MENDELU)
diff(x^2*sin(x),x).show()
Sage (spustit, spustit na MENDELU)
vyraz = x^2*sin(x) # tisk výrazu (pro kontrolu) vyraz.show() # derivace podle x # je možno psát i derivace = diff(vyraz, x) derivace = vyraz.diff(x) # zobrazení výsledku derivace.show()
Derivujte funkci \(\displaystyle y=\ln \sqrt\frac{x-1}{x+1}\) a derivaci upravte.
Sage (spustit, spustit na MENDELU)
vyraz = log(sqrt((x-1)/(x+1))) # pro derivaci podle x můžeme psát # vyraz.derivace(x) # nebo # diff(vyraz, x) derivace = vyraz.diff(x) vyraz.show() derivace.factor().show()
Sage (spustit, spustit na MENDELU)
derivace=diff(log(sqrt((x-1)/(x+1))),x) derivace.simplify_full().show()
Vypočtěte druhou derivaci funkce \(\displaystyle y=\frac{x^3}{(x+1)^2}\).
Navíc derivaci upravíme rozkladem na součin.
Sage (spustit, spustit na MENDELU)
# bez úpravy diff(x^3/(x+1)^2,x,2).show() # s úpravou diff(x^3/(x+1)^2,x,2).factor().show()
Určete Taylorův polynom stupně \(\displaystyle 7\) pro funkci
\(\displaystyle y=\ln\frac{1+x}{1-x}\) se středem v bodě \(\displaystyle 0\).
Sage (spustit, spustit na MENDELU)
taylor(log((1+x)/(1-x)), x, 0, 7).show()
Vypočtěte stacionární body funkce \(\displaystyle y=\frac{x^2}{x-1}\).
Sage (spustit, spustit na MENDELU)
derivace=diff(x^2/(x-1),x) show(solve(derivace,x))
Stálý odkaz na toto místo:
http://user.mendelu.cz/marik/akademie/sage.html#prubeh_funkce
Vyšetřete průběh funkce \(\displaystyle y=x^2(x-1)\).
Sage (spustit, spustit na MENDELU)
# ---> sbalit <--- # zadaná funkce, funkci můžete změnit f = x^2*(x-1) # můžete zadat meze na ose x xmin, xmax = -1, 1.5 # meze na ose y můžete nechat automatické (None), nebo zadat (místo None napište číslo) ymin, ymax = None, None ################################################################# # dál už nic nemusíte číst ani upravovat, jenom spusťte výpočet # ################################################################# def prubeh(f,(x,xmin,xmax),ymin=None, ymax=None): r""" Procedura nakresli graf funkce f na intervalu xmax, xmin, vypocte nulove, stacionarni a kriticke body. Je mozno zadat nepovinne parametry ymin a ymax pro rozsah hodnot na svisle ose. """ P = plot(f,(x,xmin,xmax),detect_poles=True) tab=[[r"<h3>Funkce", r"$\displaystyle y=%s$</h3>"%latex(f)]] tab.append([r"1. derivace", r"$\displaystyle y'=%s$"%latex(factor(diff(f,x)))]) tab.append([r"2. derivace", r"$\displaystyle y'=%s$"%latex(factor(diff(f,x,2)))]) _temp = solve(f,x, solution_dict=True, explicit_solutions=True) _nulove_body = [i[x] for i in _temp if i[x].imag().n() == 0] _temp = solve(diff(f,x),x, solution_dict=True, explicit_solutions=True) _stac_body = [i[x] for i in _temp if i[x].imag().n() == 0] _temp = solve(diff(f,x,2),x, solution_dict=True, explicit_solutions=True) _krit_body = [i[x] for i in _temp if i[x].imag().n() == 0] if len(_stac_body)>0: P += point2d([(i,f(x=i)) for i in _stac_body], color='red', size=30, zorder=8) if len(_krit_body)>0: P += point2d([(i,f(x=i)) for i in _krit_body], color='black', size=15, zorder=9) tab.append([r"Nulové body", r"$\displaystyle %s$"%latex(tisk_bodu(_nulove_body))]) tab.append([r"Stacionární body", r"$\displaystyle %s$ (v grafu červeně)"%latex(tisk_bodu(_stac_body))]) tab.append([r"Kritické body", r"$\displaystyle %s$ (v grafu černě)"%latex(tisk_bodu(_krit_body))]) html.table(tab) if P.ymax()>300 and ymax is None: ymax = 20 if P.ymin()<-300 and ymin is None: ymin = -20 show(P,ymax=ymax,ymin=ymin) def tisk_bodu(a): if len(a)==1: return [x==a[0]] else: return [x==i for i in a] prubeh(f,(x,xmin,xmax),ymin=ymin,ymax=ymax)
# <---- rozbalit ---> # kód je příliš dlouhý # zobrazí se po rozbalení, # nebo na stránce, na kterou vedou odkazy pro spuštění

Integrální početStálý odkaz na toto místo:
http://user.mendelu.cz/marik/akademie/sage.html#integralni-pocet

Vypočtěte integrál \(\displaystyle \int x^2 \sin x\,\mathrm{d}x\).
Sage (spustit, spustit na MENDELU)
integrate (x^2*sin(x),x).show()
Sage (spustit, spustit na MENDELU)
funkce = x^2*sin(x) # zobrazení funkce pro kontrolu funkce.show() # výsledek integrace podle x funkce.integrate (x).show() # je možné psát i # integrate(funkce,x)
Vypočtěte integrál \(\displaystyle \int_1^{e} \sqrt x\ln(x)\,\mathrm{d}x\).
Sage (spustit, spustit na MENDELU)
integrate (x^(1/2)*log(x),(x,1,e)).show()

Diferenciální rovniceStálý odkaz na toto místo:
http://user.mendelu.cz/marik/akademie/sage.html#diferencialni-rovnice

Nakreslete směrové pole rovnice \(\displaystyle y'=x+y^2\).
Sage (spustit, spustit na MENDELU)
x,y = var('x y') plot_slope_field(x+y^2, (x,-3,3), (y,-3,3))
Vyřešte diferenciální rovnici \(\displaystyle y'=\frac yx+1\).
Sage (spustit, spustit na MENDELU)
y=function('y',x) rovnice = diff(y,x) == y/x + 1 # řešení desolve(rovnice, y).show() # řešení v roznásobeném tvaru desolve(rovnice, y).expand().show()
Vyřešte diferenciální rovnici \(\displaystyle y'=\frac yx+1\) s počáteční podmínkou \(\displaystyle y(1)=-3\)
Sage (spustit, spustit na MENDELU)
y=function('y',x) rovnice = diff(y,x) == y/x + 1 podminka = [1,-3] # řešení reseni=desolve(rovnice, y, ics=podminka) reseni.show()
Vyřešte diferenciální rovnici \(\displaystyle y''+3y'+2y=x\).
Sage (spustit, spustit na MENDELU)
y = function('y',x) rovnice = diff(y,x,2) + 3*diff(y,x) + 2*y == x desolve(rovnice, y).show()
Vyřešte diferenciální rovnici \(\displaystyle y''+3y'+2y=x\) s počáteční podmínkou \(\displaystyle y(0)=0\), \(\displaystyle y'(0)=3\).
Sage (spustit, spustit na MENDELU)
y = function('y',x) rovnice = diff(y,x,2) + 3*diff(y,x) + 2*y == x podminka = [0,0,3] desolve(rovnice, y, ics=podminka).show()
Stálý odkaz na toto místo:
http://user.mendelu.cz/marik/akademie/sage.html#stacionarni_body_autonomniho_systemu
Najděte stacionární body autonomního systému \(\displaystyle \left\{\begin{aligned}x'&=x + 2 \, y\\y'&={\left(y + 2\right)} {\left(x + 1\right)} y\end{aligned}\right.\).
V každém ze stacionárních bodů najděte vlastní čísla Jakobiho matice.
Sage (spustit, spustit na MENDELU)
# ---> sbalit <--- x,y=var('x,y') # definice promennych ## prave strany autonomniho systemu f, g = x+2*y, y*(y+2)*(x+1) ################################################################# # dál už nic nemusíte číst ani upravovat, jenom spusťte výpočet # ################################################################# def as_tabulka(de_x,de_y): # Tisk zadani pro kontrolu html(r"Autonomní systém $\left\{\begin{aligned}x'&=%s\\y'&=%s\end{aligned}\right.$." %(latex(de_x),latex(de_y))) # nalezeni stacionarnich bodu a jakobianu stacionarni_body=solve([de_x,de_y], [x,y], solution_dict=True) jacobiho_matice=jacobian((de_x,de_y),(x,y)) A=[["Stacionární bod","Jacobiho matice","Vlastní hodnoty"]] # cyklus pres vsechny stacionarni body for s in stacionarni_body: # budeme pracovat pouze s resenimi, ktera jsou realna cisla, # tj ktera maji nulou imaginarni cast if s[x].imag() == 0 and s[y].imag() == 0: A.append([[s[x],s[y]], jacobiho_matice(s),\ [a.real().n(20)+I*a.imag().n(20) for a in jacobiho_matice(s).eigenvalues()]]) # vytiskneme tabulku html.table(A,header=True) as_tabulka(f,g)
# <---- rozbalit ---> # kód je příliš dlouhý # zobrazí se po rozbalení, # nebo na stránce, na kterou vedou odkazy pro spuštění

GrafikaStálý odkaz na toto místo:
http://user.mendelu.cz/marik/akademie/sage.html#grafika

Stálý odkaz na toto místo:
http://user.mendelu.cz/marik/akademie/sage.html#graf1
Nakreslete graf funkce \(\displaystyle y=x^3-2x^2\).
Sage (spustit, spustit na MENDELU)
plot(x^3-2*x^2,(x,-3,3))
Sage (spustit, spustit na MENDELU)
f(x) = x^3-2*x^2 # zobrazeni funkce pro kontrolu show(f(x)) # nakresleni grafu plot(f(x),(x,-3,3))
Stálý odkaz na toto místo:
http://user.mendelu.cz/marik/akademie/sage.html#graf2
Nakreslete graf funkce \(\displaystyle y=x^2 e^{-x}\) na intervalu \(\displaystyle [-2,7]\).
Omezte vhodně rozsah na ose \(\displaystyle y\).
Sage (spustit, spustit na MENDELU)
plot(x^2*exp(-x),(x,-2,7),ymax=2)
Stálý odkaz na toto místo:
http://user.mendelu.cz/marik/akademie/sage.html#graf3
Nakreslete grafy funkcí \(\displaystyle y=x^2\) a \(\displaystyle y=2x+1\) do jednoho obrázku.
Sage (spustit, spustit na MENDELU)
plot([x^2,2*x+1],(x,-3,3))
Sage (spustit, spustit na MENDELU)
# verze s barevným odlišením a se zobrazením prusečíku funkcí f(x) = x^2 g(x) = 2*x+1 OBR = plot(f,(x,-3,3)) OBR = OBR+plot(g,(x,-3,3),color='red') pruseciky = solve(f(x)==g(x), x, solution_dict=1, explicit_solutions=1) for i in pruseciky: OBR = OBR + point([i[x],f(i[x])], rgbcolor='black',zorder=3, size=25) OBR

Funkce dvou proměnnýchStálý odkaz na toto místo:
http://user.mendelu.cz/marik/akademie/sage.html#funkce-dvou-promennych

Nakreslete graf funkce dvou proměnných \(\displaystyle z=x^2-y^2\) na množině \(\displaystyle [-1,1]\times[-1,1]\).
Sage (spustit, spustit na MENDELU)
# graf je možno otáčet a přibližovat myší y=var('y') plot3d(x^2-y^2, (x,-1,1), (y,-1,1))
Nakreslete vrstevnice funkce \(\displaystyle z=\sqrt{x^2+y^2}+0.3 \sin(xy)\).
Sage (spustit, spustit na MENDELU)
# Krátká verze x,y = var('x,y') contour_plot( sqrt(x^2+y^2)+0.3*sin(x*y) , (x,-4,4) , (y,-4,4))
Sage (spustit, spustit na MENDELU)
# ---> sbalit <--- # Rozšířená verze x,y = var('x,y') # Nastavení funkce, mezí a parametrů pro kreslení f(x,y)=sqrt(x^2+y^2)+0.3*sin(x*y) x_meze = (x,-4,4) y_meze = (y,-4,4) pocet_vrstevnic = 30 pocet_bodu = 200 # Příkaz pro tisk zadání a vykreslení vrstevnic(nemusíte většinou už upravovat) show(f(x,y)) contour_plot(f, x_meze , y_meze,plot_points=pocet_bodu,cmap='gnuplot_r',labels=1,colorbar=1,fill=0,contours=pocet_vrstevnic)
# <---- rozbalit ---> # kód je příliš dlouhý # zobrazí se po rozbalení, # nebo na stránce, na kterou vedou odkazy pro spuštění
Vypočtěte parciální derivaci funkce \(\displaystyle z=yx\sin(x+y^2)\) podle \(\displaystyle y\).
Sage (spustit, spustit na MENDELU)
x,y=var('x,y') diff(y*x*sin(x+y^2), y).show()
Vypočtěte parciální derivaci \(\displaystyle \frac{\partial ^5 z}{(\partial x)^3 (\partial y)^2}\) funkce \(\displaystyle z=yx\sin(x+y^2)\).
Sage (spustit, spustit na MENDELU)
x,y=var('x,y') diff(y*x*sin(x+y^2), x, 3, y, 2).show()
Určete stacionární body funkce \(\displaystyle z=x^2y^2-x^2-y^2\)
Sage (spustit, spustit na MENDELU)
var('x y') f=x^2*y^2-x^2-y^2 show(f) show(solve([diff(f,x),diff(f,y)],[x,y]))
Určete lokální extrémy funkce \(\displaystyle z=x^2y^2-x^2-y^2\)
Sage (spustit, spustit na MENDELU)
# ---> sbalit <--- x,y=var('x y') ######################################################## # Na následujícím řádku můžete upravit funkční předpis # ######################################################## f(x,y)=x^2*y^2-x^2-y^2 ############################################################ # dál už není potřeba nic upravovat, jenom spustit výpočet # ############################################################ 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) loc_extr(f(x,y))
# <---- rozbalit ---> # kód je příliš dlouhý # zobrazí se po rozbalení, # nebo na stránce, na kterou vedou odkazy pro spuštění

Lineární algebraStálý odkaz na toto místo:
http://user.mendelu.cz/marik/akademie/sage.html#linearni-algebra

Určete hodnost matice \(\displaystyle \begin{pmatrix} 9&3&5\\-6&-9&7\\-1&-8&1\end{pmatrix}\).
Sage (spustit, spustit na MENDELU)
A=matrix([[9, 3, 5], [-6, -9, 7], [-1, -8, 1]]) show(A) show(rank(A))
Určete determinant \(\displaystyle \begin{vmatrix} 9&3&5\\-6&-9&7\\-1&-8&1\end{vmatrix}\).
Sage (spustit, spustit na MENDELU)
A=matrix([[9, 3, 5], [-6, -9, 7], [-1, -8, 1]]) show(A) show(det(A))
Vypočtěte řešení soustavy rovnic \(\displaystyle \begin{cases} x_1+3x_2+4x_3=1,\\ x_1-x_3=9, \\ x_1+x_3=8.\end{cases}\)
Sage (spustit, spustit na MENDELU)
x1,x2,x3 = var('x1,x2,x3') soustava=[x1+3*x2+4*x3==1, x1-x3==9, x1+x3==8] show(soustava) reseni=solve (soustava,[x1,x2,x3]) show(reseni)
Stálý odkaz na toto místo:
http://user.mendelu.cz/marik/akademie/sage.html#soustava_maticove
Ověřte na konkrétním příkladě ekvivalentní zápis soustavy rovnic pomocí maticového součinu a řešení pomocí inverzní matice.
Sage (spustit, spustit na MENDELU)
# ---> sbalit <--- var('x1 x2 x3') A=matrix([[1,2,3],[3,-1,2],[1,3,2]]) X=matrix([[x1,x2,x3]]).transpose() B=matrix([[11,12,13]]).transpose() html("<h2>Matice $A$, $X$, $B$</h2>") show([A,X,B]) html("<h2>Matice $AX$, $B$</h2>") show([A*X,B]) html("<h2>Soustava $AX=B$</h2>") soustava = [(A*X)[i][0] == B[i][0] for i in range(len(A.rows()))] show(matrix([soustava]).transpose()) html("<h2>Řešení soustavy $AX=B$</h2>") show(solve(soustava, [x1,x2,x3])) html("<h2>Vektor $A^{-1}B$</h2>") show(A^(-1)*B)
# <---- rozbalit ---> # kód je příliš dlouhý # zobrazí se po rozbalení, # nebo na stránce, na kterou vedou odkazy pro spuštění


OPVK logo
Vytvořeno s podporou projektu Průřezová inovace studijních programů Lesnické a dřevařské fakulty MENDELU v Brně (LDF) s ohledem na discipliny společného základu (reg. č. CZ.1.07/2.2.00/28.0021) za přispění finančních prostředků EU a státního rozpočtu České republiky.