Sagen toimintojen esittely

246 days ago by Lauri_Ruotsalainen

Lauri Ruotsalainen, 2011
Sage-ohjelmisto matematiikan opetuksessa


Tervetuloa Sagea esittelevään työarkkiin!

Tämän työarkin tavoitteena on esitellä Sagen ominaisuuksia sekä koota ohjeita ja esimerkkejä Sagen yleisimpien toimintojen käytöstä.

Sivu on viimeksi päivitetty 26.9.2011.


Sage-palvelimelle rekisteröityminen

Voit halutessasi kokeilla Sagen käyttöä ja tämän työarkin komentoja rekisteröitymällä Sage-palvelimelle. Muun muassa kolmiulotteiset kuvaajat ja vuorovaikutteiset sovellukset eivät toimi ilman palvelimelle kirjautumista. Rekisteröitymistä varten tarvitset käyttäjätunnuksen ja salasanan.

Jos sinulla on jo Notebook-tili toisella Sage-palvelimella, voit ladata tämän työarkin sivun ylälaidan linkistä Download.



Muistikirja ja työarkit

Notebook eli muistikirja on Sagen graafinen käyttöliittymä, joka toimii rajapintana Sage-palvelimen ja käyttäjän välillä. Muistikirjaan on koottu kaikki luodut ja jaetut työarkit.

Worksheet eli työarkki on Sagen dokumentti, jossa tehdyt laskutoimitukset ja objektit on järjestetty niin sanottuihin soluihin (cell). Työarkki koostuu käyttäjän syötteistä ja työarkin yhteyteen talletetuista objekteista, kuten kuva- ja tekstitiedostoista. Käyttäjän tekemät muuttujien ja funktioiden määrittelyt pysyvät palvelimen muistissa niin kauan, kun työarkki pysyy aktiivisena. Työarkkeja voidaan ladata muistikirjaan ja tallentaa tiedostoiksi sekä jakaa muiden palvelimen käyttäjien kesken.

Alla on yksi tyhjä solu.

 
       

Uusi solu luodaan viemällä hiiren osoitin solun alapuolelle ja klikkaamalla ilmestyvää sinistä vaakasuoraa palkkia.

HTML-soluja voidaan luoda pitämällä shift-näppäintä pohjassa samalla, kun uusi solu luodaan. HTML-soluja muokataan yksinkertaisella graafisella editorilla. Ne voivat sisältää tekstiä, kuvia, animaatioita, linkkejä tai vaikkapa GeoGebra-sovelluksia. HTML-solua editoidaan kaksoisklikkaamalla solua, esimerkiksi tätä tekstiä.

Solu poistetaan tyhjentämällä sen sisältö ja painamalla backspace-näppäintä solun ollessa aktiivinen.


Sagen laskinkäyttö

Tyhjässä työarkissa on valmiina yksi solu, johon laskutoimitus tai ohjelmalause voidaan kirjoittaa. Solun ollessa aktiivinen se evaluoidaan joko klikkaamalla tekstiä evaluate tai näppäinkomennolla shift+enter.

Lasketaan aluksi joitakin yksinkertaisia laskutoimituksia:

2+3-1 
       
4
4
4*5*6 
       
120
120

Potenssimerkintä 2^3 kirjoitetaan Sagessa muodossa 2^3:

2^3 
       
8
8

Murtolukuja:

1/3 + 1/4 + 1/5 
       
47/60
47/60

Lausekkeen itseisarvo määritetään abs-metodilla:

abs(-2) 
       
2
2

Lasketaan logaritmi log_3{9}:

log(9, 3) 
       
2
2

Luvun neliöjuuri määritetään sqrt-komennon avulla:

sqrt(5) + sqrt(9) 
       
sqrt(5) + 3
sqrt(5) + 3

Alaviiva _ viittaa viimeksi laskettuun tulokseen:

_ - 3 
       
sqrt(5)
sqrt(5)

Show-komento näyttää tulosteen matemaattisella notaatiolla kirjoitettuna:

show(sqrt(2) + 47/60) 
       
\newcommand{\Bold}[1]{\mathbf{#1}}\sqrt{2} + \frac{47}{60}
\newcommand{\Bold}[1]{\mathbf{#1}}\sqrt{2} + \frac{47}{60}

Vakioita

e+1 
       
e + 1
e + 1
show(pi+2) 
       
\newcommand{\Bold}[1]{\mathbf{#1}}\pi + 2
\newcommand{\Bold}[1]{\mathbf{#1}}\pi + 2
e^(-2*pi*i) 
       
1
1

Likiarvoja

n(pi) 
       
3.14159265358979
3.14159265358979
n(pi, digits=100) 
       
3.1415926535897932384626433832795028841971693993751058209749445923078164\
06286208998628034825342117068
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068

Funktioita

sin(0.3) 
       
0.295520206661340
0.295520206661340
cos(pi) 
       
-1
-1
n(tan(1/4)) 
       
0.255341921221036
0.255341921221036

Sagen funktioista saa lisätietoa kirjoittamalla komennon jälkeen kysymysmerkin (?)

Kaksi kysymysmerkkiä (??) näyttää komennon lähdekoodin.

tan? 
       

File: /home/sage/sage/local/lib/python2.6/site-packages/sage/functions/trig.py

Type: <class ‘sage.functions.trig.Function_tan’>

Definition: tan(*args, coerce=True, hold=False, dont_call_method_on_arg=False)

Docstring:

The tangent function

EXAMPLES:

sage: tan(pi)
0
sage: tan(3.1415)
-0.0000926535900581913
sage: tan(3.1415/4)
0.999953674278156
sage: tan(pi/4)
1
sage: tan(1/2)
tan(1/2)
sage: RR(tan(1/2))
0.546302489843790

We can prevent evaluation using the hold parameter:

sage: tan(pi/4,hold=True)
tan(1/4*pi)

To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = tan(pi/4,hold=True); a.simplify()
1

TESTS:

sage: conjugate(tan(x))
tan(conjugate(x))

File: /home/sage/sage/local/lib/python2.6/site-packages/sage/functions/trig.py

Type: <class ‘sage.functions.trig.Function_tan’>

Definition: tan(*args, coerce=True, hold=False, dont_call_method_on_arg=False)

Docstring:

The tangent function

EXAMPLES:

sage: tan(pi)
0
sage: tan(3.1415)
-0.0000926535900581913
sage: tan(3.1415/4)
0.999953674278156
sage: tan(pi/4)
1
sage: tan(1/2)
tan(1/2)
sage: RR(tan(1/2))
0.546302489843790

We can prevent evaluation using the hold parameter:

sage: tan(pi/4,hold=True)
tan(1/4*pi)

To then evaluate again, we currently must use Maxima via sage.symbolic.expression.Expression.simplify():

sage: a = tan(pi/4,hold=True); a.simplify()
1

TESTS:

sage: conjugate(tan(x))
tan(conjugate(x))

Tab-näppäin (sarkain) täydentää annetun syötteen. Voit kokeilla täydentämistä kahdessa seuraavassa solussa. (Edellyttää palvelimelle kirjautumista.)

gold 
       
sage.functions.trig. 
       

Luonnollinen logaritmi ja eksponenttifunktio:

ln(e) 
       
1
1
exp(2) 
       
e^2
e^2

Symbolinen laskenta

Ennen symbolista laskentaa tulee määritellä käytettävät muuttujakirjaimet var-komennon avulla:

var("x y") 
       
(x, y)
(x, y)
x^2 + x + 1 
       
x^2 + x + 1
x^2 + x + 1

Lausekkeiden muokkaaminen ja sijoittaminen lausekkeisiin

Kerrotaan lausekkeen (x+1)^4 sulut auki expand-metodilla:

expand((x+1)^4) 
       
x^4 + 4*x^3 + 6*x^2 + 4*x + 1
x^4 + 4*x^3 + 6*x^2 + 4*x + 1

Factor-metodi muokkaa lausekkeen tulomuotoon:

factor(x^4 + 4*x^3 + 6*x^2 + 4*x + 1) 
       
(x + 1)^4
(x + 1)^4

Lausekkeiden sieventäminen tapahtuu mm. simplify ja full_simplify -metodien avulla.

sin(x)^2 + cos(x)^2 
       
sin(x)^2 + cos(x)^2
sin(x)^2 + cos(x)^2
(sin(x)^2 + cos(x)^2).full_simplify() 
       
1
1

Lausekkeita voidaan nimetä ja nimettyjen lausekkeiden avulla voidaan suorittaa laskutoimituksia:

a = 3*x - 2 b = 2*x + 1 a - b 
       
x - 3
x - 3
a*b 
       
(2*x + 1)*(3*x - 2)
(2*x + 1)*(3*x - 2)
a^b 
       
(3*x - 2)^(2*x + 1)
(3*x - 2)^(2*x + 1)

Lausekkeisiin sijoittaminen tapahtuu kirjoittamalla sijoitettava lukuarvo sulkeisiin lausekkeen jälkeen. Tämä edellyttää, että myös lauseke on sulkeissa.

(x^2 + x + 1)(x=2) 
       
7
7
a = x^2 + y^2 a(x=2, y=3) 
       
13
13

Funktioiden määritteleminen

Määritellään funktio f(x)=x^2+x+1:

f(x) = x^2 + x + 1 
       

Funktion arvo pisteessä x=2, eli f(2):

f(2) 
       
7
7

Uusi funktio voidaan myös määritellä toisten funktioiden avulla, esimerkiksi yhdistettynä funktiona:

g(x) = x^2 h(x) = g(f(x)) h(x) 
       
(x^2 + x + 1)^2
(x^2 + x + 1)^2
h(2) 
       
49
49

Yhtälöiden ja epäyhtälöiden ratkaiseminen

Ratkaistaan yhtälö 4x - 3 = 6:

solve(4*x - 3 == 6, x) 
       
[x == (9/4)]
[x == (9/4)]

Toisen asteen yhtälö x^2+3x+2=0:

solve(x^2 + 3*x + 2 == 0, x) 
       
[x == -2, x == -1]
[x == -2, x == -1]

Myös epäyhtälöitä voidaan ratkaista. Ratkaistaan, millä x:n arvoilla epäyhtälö 3x-2>5 on voimassa:

solve(3*x - 2 > 5, x) 
       
[[x > (7/3)]]
[[x > (7/3)]]

Epäyhtälön x^2 + 3x + 2 < 0 ratkaisut:

solve(x^2 + 3*x + 2 < 0, x) 
       
[[x > -2, x < -1]]
[[x > -2, x < -1]]

Ratkaistaan viidennen asteen yhtälö 2x^5 + 3x^4 - 30x^3 - 57x^2 - 2x + 24 = 0:

solve(2*x^5 + 3*x^4 - 30*x^3 - 57*x^2 - 2*x + 24 == 0, x) 
       
[x == 4, x == -1, x == -1/2*sqrt(17) - 3/2, x == 1/2*sqrt(17) - 3/2, x
== (-3/2)]
[x == 4, x == -1, x == -1/2*sqrt(17) - 3/2, x == 1/2*sqrt(17) - 3/2, x == (-3/2)]

Derivointi

Derivoidaan lauseke \sin(x)\cos(x):

diff(sin(x)*cos(x)) 
       
-sin(x)^2 + cos(x)^2
-sin(x)^2 + cos(x)^2

Derivoidaan funktio f(x)=\sqrt{\sin(x)}*e^{\tan(x)}:

f(x) = sqrt(sin(x))*e^tan(x) d = diff(f(x), x) show(d) 
       
\newcommand{\Bold}[1]{\mathbf{#1}}{\left(\tan\left(x\right)^{2} + 1\right)} e^{\tan\left(x\right)} \sqrt{\sin\left(x\right)} + \frac{e^{\tan\left(x\right)} \cos\left(x\right)}{2 \, \sqrt{\sin\left(x\right)}}
\newcommand{\Bold}[1]{\mathbf{#1}}{\left(\tan\left(x\right)^{2} + 1\right)} e^{\tan\left(x\right)} \sqrt{\sin\left(x\right)} + \frac{e^{\tan\left(x\right)} \cos\left(x\right)}{2 \, \sqrt{\sin\left(x\right)}}

Olkoon g(x)=\sqrt{x^2-y^2}. Määritetään f_x ja f_y.

g(x,y) = sqrt(x^2-y^2) diff(g(x,y), x) 
       
x/sqrt(x^2 - y^2)
x/sqrt(x^2 - y^2)
diff(g(x,y), y) 
       
-y/sqrt(x^2 - y^2)
-y/sqrt(x^2 - y^2)

Määritetään f_{xy} ja esitetään se matemaattisella notaatiolla kirjoitettuna:

fxy = diff(g(x,y), x, y) show(fxy) 
       
\newcommand{\Bold}[1]{\mathbf{#1}}\frac{x y}{{\left(x^{2} - y^{2}\right)}^{\frac{3}{2}}}
\newcommand{\Bold}[1]{\mathbf{#1}}\frac{x y}{{\left(x^{2} - y^{2}\right)}^{\frac{3}{2}}}

Esitetään vielä f_x ja f_y LaTeXin avulla ladottuna siten, että Sage kääntää lausekkeen LaTeX-muotoon:

g(x,y)=sqrt(x^2-y^2) html("$f_x = %s$"%latex(diff(g(x,y), x))) html("$f_y = %s$"%latex(diff(g(x,y), y))) 
       
f_x = \frac{x}{\sqrt{x^{2} - y^{2}}}
f_y = -\frac{y}{\sqrt{x^{2} - y^{2}}}
f_x = \frac{x}{\sqrt{x^{2} - y^{2}}}
f_y = -\frac{y}{\sqrt{x^{2} - y^{2}}}

Integrointi

Integroidaan lauseke 1+x+\log(x)+\sin(x):

integral(1+x+log(x)+sin(x), x) 
       
1/2*x^2 + x*log(x) - cos(x)
1/2*x^2 + x*log(x) - cos(x)

Määritetään lausekkeen \sqrt{x^2+1} integraali:

a = integral(sqrt(x^2+1), x) show(a) 
       
\newcommand{\Bold}[1]{\mathbf{#1}}\frac{1}{2} \, \sqrt{x^{2} + 1} x + \frac{1}{2} \, {\rm arcsinh}\left(x\right)
\newcommand{\Bold}[1]{\mathbf{#1}}\frac{1}{2} \, \sqrt{x^{2} + 1} x + \frac{1}{2} \, {\rm arcsinh}\left(x\right)

Differentiaaliyhtälöt

Ratkaistaan differentiaaliyhtälö y'=y+x:

var("x") y = function('y', x) DY = diff(y, x) - (y + x) desolve(DY, [y,x]) 
       
-((x + 1)*e^(-x) - c)*e^x
-((x + 1)*e^(-x) - c)*e^x

Edellisen differenttiaaliyhtälön suuntaelementtien piirtäminen:

plot_slope_field(y + x, (x, -5, 5), (y, -5, 5), aspect_ratio=1, figsize=4, headlength=1e-8) 
       

Kuvaajien piirtäminen

Kaksiulotteisia kuvaajia piirretään komennolla plot( f(x), \small(x, x_{\rm min}, x_{\rm max}), optiot).

Piirretään polynomin 3x^4-3x^2-1 kuvaaja välillä (-3,1):

plot(x^3 + 3*x^2 - 1, (x, -3, 1), figsize=5) 
       

Kuvaajille voidaan antaa erilaisia optioita, joilla määritetään muun muassa käyrän leveyttä, väriä, tyyliä ja koordinaatistoon liittyviä ominaisuuksia.

Metodeihin liittyviä optioita on listattu Sagen dokumentaatiossa. Esimerkiksi plot-metodin optioista saa selostuksen komennolla plot?.

plot? 
       

Piirretään polynomi x^3+3x^2-1 välillä [-3, 1] siten, että viivan väriksi on määritelty vihreä, leveydeksi arvo kolme ja tyyliksi eräänlainen katkoviiva.

plot(x^3 + 3*x^2 - 1, (x, -3, 1), color="green", thickness=3, linestyle="-.", figsize=5) 
       

Animaatiot

Sagessa voidaan luoda animaatioita muodostamalla listan, joka koostuu animaation yksittäisistä kuvista. Tämän jälkeen animate-metodi tuottaa listan kuvien perusteella gif-animaation.

Sykloidi

step = 0.2 v = [] t = var("t") for s in srange(0.01, 4.0*pi, step): cycloid = parametric_plot((t - sin(t), 1 - cos(t)), (t, 0, s)) C = circle((s, 1), 1) Cp = (s - sin(s), 1 - cos(s)) C_point = point(Cp, pointsize=25, rgbcolor="brown") C_line = line([(s, 1), Cp], thickness=2, rgbcolor="brown") v.append(cycloid + C + C_point + C_line) animation = animate( v, figsize=[10, 2], aspect_ratio=1, xmin=-0.5, xmax=14, ymin=0, ymax=2.2 ) show(animation, delay=10) 
       

Parametriset kuvaajat

x(t) = sin(t) - cos(2*t) y(t) = sin(2*t) + cos(t) parametric_plot((x(t), y(t)), (t, 0, 2*pi), figsize=4) 
       

Funktion polaarinen esitys

f(t) = sin(4*t) polar_plot(f(t), (t, 0, 6*pi), figsize=4) 
       

Kuvaajien yhdistäminen

Alla tekstit ovat esitetty LaTeX-ladontajärjestelmän avulla kirjoitettuina. Kuvat yhdistetään plus-merkkejä käyttämällä ja esitetään show-metodilla.

var("x") a = plot(x*e^(-1/x), (-6, 6), ymin=-7) b = plot(x-1, (x,-6, 6), ymin=-7, rgbcolor="red", linestyle="--") a_teksti = text("$y = xe^{-1/x}$", (-1.8, -5), rgbcolor="blue", fontsize=15) b_teksti = text("$y = x-1$", (-4.2, -4.2), rgbcolor="red", fontsize=15, rotation=30) show(a + b + a_teksti + b_teksti, axes_labels=("x", "y"), figsize=5) 
       

Tasa-arvokäyrät

Piirretään pinnan z=x^2-y^3+10\sin{(xy)} tasa-arvokäyrät ja muita pinnan muotoa havainnollistavia kuvia. Myöhemmin pinnasta luodaan kolmiulotteinen malli.

x,y = var('x,y') contour_plot(x^2-y^3+10*sin(x*y), (x, -4, 4), (y, -4, 4), contours=10, plot_points=120, cmap='hsv', figsize=5) 
       

Density Plot

x,y = var('x,y') density_plot(x^2-y^3+10*sin(x*y), (x, -4, 4), (y, -4, 4)) 
       
x,y = var('x,y') density_plot(x^2-y^3+10*sin(x*y), (x, -4, 4), (y, -4, 4), cmap='jet', plot_points=100).show(frame=True) 
       

Region Plot

Seuraava kuva esittää graafisesti alueet, joissa epäyhtälö \frac{\sin(x^2 + y^2)}{(1+y+xy)}>0 on voimassa.

Kuvassa epäyhtälö on tosi sinisellä alueella (incol) ja epätosi vihreällä alueella (outcol).

var("x y") kuva = region_plot(sin(x^2 + y^2)/(1+y+x*y) > 0, (x, -4, 4), (y, -4, 4), incol="#99CCFF", outcol="#CCFF99", bordercol="black", plot_points=300) show(kuva, aspect_ratio=1, figsize=4) 
       

Kolmiulotteisia kappaleita

Kolmiulotteiset kappaleet ja kuvaajat esitetään Jmol-nimisessä Java-sovelluksessa, jossa kappaleita voidaan reaaliaikaisesti tarkastella eri suunnista ja etäisyyksiltä.

dodecahedron((0,0,0), color="darkorange", figsize=4) 
       
G = tetrahedron((0,-3.5,0), color="blue") + cube((0,-2,0), color="purple") + octahedron(color="red") + dodecahedron((0,2,0), color="orange") + icosahedron(center=(0,4,0), color="yellow") + sphere((0,6,0), size=0.7, color="green") G.show(aspect_ratio=[1, 1, 1], figsize=4) 
       

Kolmiulotteisia kuvaajia

Piirretään pinta z=x^2-y^3+10\sin{(xy)},

kun x\in[-4, 4], y\in[-4, 4]. Pinta on sama kuin tasa-arvokäyrien tarkastelussa ylempänä.

var("x, y") plot3d(x^2-y^3+10*sin(x*y), (x, -4, 4), (y, -4, 4), plot_points=200, figsize=4) 
       

Parametriset kolmiulotteiset kuvaajat

Piirretään pinta (f_x, f_y, f_z), missä

\begin{cases} f_x=\sinh(v)\sin(u) \\ f_y=-\sinh(v)\cos(u) \\
f_z=3u,
\end{cases}

kun u\in(-\pi, \pi) ja v\in(-\pi, \pi).


u, v = var("u,v") fx = sinh(v)*sin(u) fy = -sinh(v)*cos(u) fz = 3*u parametric_plot3d([fx, fy, fz], (u, -pi, pi), (v, -pi, pi), plot_points = [50,50], frame=False, color="red", figsize=4) 
       

Implisiittisesti määritellyt kolmiulotteiset kuvaajat

Piirretään yhtälön (x^2 + y^2 + z^2)^2 + 8xyz - 10(x^2 + y^2 + z^2) + 25=0 toteuttavan pistejoukon kolmiulotteinen malli:

var("x y z") implicit_plot3d((x^2 + y^2 + z^2)^2 + 8*x*y*z - 10*(x^2 + y^2 + z^2) + 25, (x, -4, 4), (y, -4, 4), (z, -4, 4), figsize=4) 
       

Vuorovaikutteiset sovellukset

Opetuskäytön kannalta yksi Sagen mielenkiintoisimmista ominaisuuksista on mahdollisuus ohjelmoida interaktiivisia sovelluksia. Tällä tarkoitetaan ohjelman parametrien ajonaikaista manipulointia erilaisten säätimien, kytkimien, valikoiden ja tekstikenttien avulla. Vuorovaikutteisten ohjelmien avulla opiskelija voi tutkia jonkin parametrin vaikutusta esimerkiksi kuvaajan käyttäytymiseen. Parametri voi myös liittyä suoraan ohjelman toimintaan, kuten tarkasteluvälin valintaan.

Lisää esimerkkejä interaktiivisista sovelluksista on kerätty pääsivulle.

Funktion approksimointi Taylorin polynomien avulla

var('x') @interact def _(funktio = input_box(default = "sin(x)*e^(-x)", type=str), x0 = input_box(default = 0), xvali = range_slider(-15, 15, 1/2, default=(0,3), label="Tarkasteluväli (x)"), yvali = range_slider(-15, 15, 1/2, default=(-0.5,1), label="Tarkasteluväli (y)"), aste=slider(1, 20, 1, 1)): f(x) = funktio f_taylor(x) = f(x).taylor(x, x0, aste) f_kuvaaja = plot(f(x), xvali, color="blue") taylor_kuvaaja = plot(f_taylor(x), xvali, color="green") piste = point((x0, f(x0)), pointsize=30, rgbcolor=(1,0,0)) html("$f(x)\;=\;%s$"%latex(f(x))) html("$\hat{f}(x;%s)\;=\;%s+\mathcal{O}(x^{%s})$"%(x0, latex(f_taylor(x)), aste+1)) show(f_kuvaaja + taylor_kuvaaja + piste, xmin=xvali[0], xmax=xvali[1], ymin=yvali[0], ymax=yvali[1]) 
       

Click to the left again to hide and once more to show the dynamic interactive window

Useiden vuorovaikutteisten sovellusten englanninkielisiä versioita voidaan kutsua myös suoraan Sagessa (Sagen versiosta 4.7.1 alkaen).

Esimerkkinä Taylorin polynomien toimintaa havainnollistava sovellus:

interacts.calculus.taylor_polynomial() 
       
order 
order