[CHWiBa20] 1.0 Introductie Sage

1313 days ago by Arne.Botteldoorn

Sage en Python. 

Python is een generieke programmeertaal van een hoger niveau dan C of Java, waardoor het makkelijker in gebruik is, maar wel enigszins ten koste van de snelheid.

Sage is een uitbreiding op Python, specifiek voor wiskunde. Het biedt een Python-functiebibliotheek met wiskundige objecten en een preparser. De preparser vertaalt je Sage-objecten naar Python. Sage wordt gebruikt om te werken rond wiskundige onderwerpen.

Sage heeft een grafische gebruikersinterface die beschikbaar is in je browser, de Sage Notebook genaamd, of de Sage Worksheet. Op dit moment gebruik je de Sage Notebook.

 

Doorloop een aantal mogelijkheden van Sage in volgende voorbeelden.  

Door op het "plus" icoontje te klikken, maak je een nieuwe cel waar je een commando kan ingeven. De cel is actief als ze blauw en dik omrand wordt, door in de cel te klikken, kan je ze (opnieuw) actief maken. Om een antwoord te krijgen, moet je op Evaluate klikken of SHIFT-ENTER gebruiken.

Een aantal interessante weetjes : 

  • Cel uitvoeren: SHIFT-ENTER of op evaluate klikken
  • Cel uitvoeren en eronder een nieuwe cel maken: ALT-ENTER
  • Nieuwe regel in een cel: ENTER
  • Nieuwe cel maken: op het "plus" icoontje klikken of op een blauwe lijn (verborgen tussen 2 cellen) klikken
  • Cel splitsen: CTRL-ENTER
  • Cellen samenvoegen: CTRL-BACKSPACE in het begin van een cel
  • Nieuw tekstblok: op het "tekstballon" icoontje klikken of SHIFT-klikken op een (verborgen) blauwe lijn
  • Bestaand tekstblok aanpassen: dubbelklikken op het tekstblok. Tekstblokken ondersteunen ook (elementaire) LaTeX: $\sqrt{x^2+y^2} = 1$.

Let op de fijne rode lijntjes links van de cellen: deze geven aan dat een cel nog niet uitgevoerd is.

Onderbreken van een lange berekening kan met de ESC toets of met Action/Interrupt in het menu bovenaan. 

Soms kan iets niet onderbroken worden of werkt Sage niet meer. In dit geval kan je wel nog Action/Restart worksheet doen. Dit stopt het volledige werkblad, met als gevolg dat alle gekozen variabelen verloren gaan.

 

Rekenen met Sage 

6+2*5 
       
2^10 
       

Merk op dat Sage de breuk laat staan en niet omzet naar een kommagetal:

2/5 + 3/4 
       

Wil je het decimaal antwoord, geef dan de teller in met een punt (dus als decimaal getal)

23.0/20 
       

Als één van beide getallen decimaal gegeven wordt, geeft Sage het antwoord decimaal

2/5 + 0.75 
       

Vierkantswortels berekenen:

sqrt(8) 
       

Als je een mooiere wiskundige output wil, kan je show gebruiken

show(sqrt(8)) 
       

Op deze manier gaan we in de toekomst heel veel het commando show gebruiken. Helemaal bovenaan heb je 3 aanvinkknopjes:   Typeset  Load 3-D Live  Use java for 3-D. Vink de eerste knop Typeset aan; waar mogelijk zal Sage nu de resultaten tonen alsof je show had getypt.

Wil je een numerieke benadering van deze uitdrukking, zet dan de uitdrukking tussen de haakjes in N(   ).

N(sqrt(8)) 
       

Derdemachtswortels: 

8^(1/3) 
       

Sage kent heel wat constanten: $\pi, e, i$ (imaginaire eenheid) $,\phi$ (gulden snede) $,\ldots$. Sage rekent symbolisch met deze getallen (en dus niet met numerieke benaderingen van die getallen - zoals de meeste rekentoestellen dat doen):

golden_ratio + 5*2*pi + e^2 - 4*i/6 
       

Waar mogelijk wordt vereenvoudigd / uitgewerkt:

pi^2/pi + i^2 
       

Een numerieke benadering kan (zoals hierboven uitgelegd) bekomen worden met "N(  )". Een getal a omzetten naar een kommagetal met een expliciet gekozen precisie gebeurt met de methode a.numerical_approx(bits)Je kan ook het argument .n(digits=d) gebruiken, met d het gewenste aantal cijfers in de benadering.

N(pi) 
       
pi.numerical_approx(20) 
       
pi.n(digits=20) 
       

log ( ) is de natuurlijke logaritme (die op rekenmachines meestal met ln( ) aangeduid wordt). Dat kan je merken als je log(10) ingeeft.

log(10) 
       
log(10.0) 
       
log(2.718281828) 
       
log(e) 
       

Een andere basis ingeven, doe je door log(x,b) te gebruiken voor $\log_{\mathrm{b}}(x)$

log(100,10) 
       

Het parent( ) - commando

Hierboven werd duidelijk dat Sage de getallen "10" en "10.0" anders interpreteert . Het commando parent( ) geeft de wiskundige verzameling waarvan het object een element is. 

parent(10) 
       
parent(10.0) 
       
parent(10/1) 
       

Deze ringen en velden hebben ook een naam in Sage: ZZ voor de gehele getallen (Integer Ring), QQ voor de rationale getallen (Rational Field), RR voor de reële (Real Field), CC voor de complexe (Complex Field).  Bij de reële en complexe velden zie je een precisie in bits, die standaard gelijk is aan 53. Deze 53 bits komen overeen met ongeveer 16 decimale cijfers. Als je een getal met meer cijfers ingeeft krijg je een grotere precisie. 

CC 
       
RR 
       

Als R zo'n ring of veld is en x een object, dan kan je R(x) gebruiken om x om te zetten naar een element van R.  Hiermee kan je getallen omzetten of van type veranderen:

RR(10) 
       
QQ(0.25) 
       
RR(pi) 
       
RR(golden_ratio) 
       

Het volgende geeft een foutmelding, weet je waarom?

ZZ(1/2) 
       
RR(i) 
       

 

Help bij Sage

Er zijn verschillende manieren om hulp te krijgen in Sage.

Documentatie

De "Help" link rechtsboven bij elk werkblad geeft toegang tot alle documentatie. Erg nuttig zijn de samenvattingen die je vindt in de Quick Reference cards .

Documentatie opzoeken door gebruik van het vraagteken

Plaats een vraagteken achter een  functie om uitleg en voorbeelden van die functie te bekomen en dan klik je op Evaluate of druk op "Tab" na het "?" 

log? 
       

Methoden

Een methode is een handeling die je Sage kan laten uitvoeren op een object. Als $x$ een object is, is de notatie over het algemeen $x$.methode(); ook methode($x$) kan gebruikt worden.

a=2-3*i a.real_part() 
       
real_part(a) 
       
b=9 b.is_prime(b) 
       
is_prime_power(b) 
       

TAB-completie en help

Een hulpmiddel in Sage is TAB-Completie: als x een object is en je typt x.[TAB] (de TAB-toets op het toetsenbord), dan krijg je een lijst met alle methoden die op x werken. Als je eerst een paar letters typt, enkel de methoden die met die letters beginnen. Als er maar één mogelijkheid is, wordt de naam automatisch aangevuld.

Hierboven werd het getal $a$ ingevoerd als $a=2-3i$. Ga hieronder op zoek naar een methode die het imaginair deel van $a$ teruggeeft.

 
       

TAB-completie werkt ook als je de syntax methode($x$) wilt gebruiken, maar dan enkel als je al minstens een letter getypt hebt. Zet je cursor op het einde, druk op de TAB-toets en kies uit de lijst de functie die je wil toepassen. Om bijvoorbeeld het complex toegevoegde van het complex getal a te bepalen, typ je co en dan met TAB kies je voor:

conjugate(a) 
       

Variabelen, functies, vergelijkingen, ...

Variabelen

De eerste variabelen die we beschouwen zijn in feite letters waar we een bepaalde waarde aan toekennen, dit toekennen gebeurt met "=". De waarde wordt niet getoond als die wordt toegekend.

b=5 
       
1/b 
       
c=2-3*I d=1+I c+d 
       
c*d 
       
d^(-1) 
       
c/d 
       

Let op dat je de letters e en i niet zelf toekent als variabele aan een bepaalde waarde, want dan rekent Sage verder met jouw gekozen waarden! Heb je dit toch voor, kan je het rechtzetten door reset() te gebruiken.

i=2 
       
i^2 
       
reset('i') i^2 
       

Je kan meerdere lijnen in één cel ingeven, merk op dat alleen het laatste resultaat getoond wordt:

p = 10 p*p t = p + 50 t^2 
       

Gebruik het print commando om eender waar een resultaat te tonen:

print "t is gelijk aan", p+50 print "t^2 is gelijk aan", t^2 
       

Genereer de kwadraten van de natuurlijke getallen van 1 t.e.m. 10:

for n in [1..10]: print n^2 
       

Symbolische variabelen

Een symbolische variabele is een variabele waar geen numerieke waarde aan toegekend wordt; Sage rekent dan ook symbolisch met deze variabelen. Deze variabelen kan je maken met behulp van var, zoals hieronder gebeurt met $x$ en $y$.

var('x, y') 
       
(x+y)+(y-x) 
       

De variabelen mogen ook uit meerdere letters bestaan en mogen cijfers en underscores (_) bevatten:

var('a_0') 
       

Elke variabele moet expliciet gemaakt worden, behalve $x$ die standaard een symbolische variabele is. Hieronder verschijnt een foutmelding omdat Sage de variabele $w$ niet kent:

sin(w) 
       

Functies en symbolische uitdrukkingen

Definieer de functie $f(x)=\cos^2{x}$ als volgt:

f(x)=(cos(x))^2 
       

Alleen $f$ vragen, geeft de functie weer:

       

Een bepaalde functiewaarde opvragen:

f(pi) 
       

Plots

De functie plot dient om de grafiek van een functie te tonen. Deze heeft heel veel opties, kijk maar eens naar de voorbeelden in plot?. Hieronder tonen we hoe we $f$ kunnen plotten waarbij $x$ van $-5$ tot $5$ loopt:

plot(f, (x,-5,5)) 
       

Je kan ook verschillende plots tegelijk laten tekenen, elk in andere kleur. 

P1 = plot(x^3-4*x, (x,-3,3), color='orange') P2 = plot((x^5-16*x)*0.18, (x,-2,2), color='green') P1+P2 
       

Vereenvoudigen / uitwerken

Sommige eenvoudige vereenvoudigingen worden automatisch gedaan, andere niet:

exp(log(x)) 
       
sin(x)^2 + cos(x)^2 
       

Om vereenvoudigingen te forceren, gebruik je de methode simplify_full (er bestaan een heleboel varianten van simplify):

(sin(x)^2 + cos(x)^2).simplify_full() 
       
sin(2*x).simplify_full() 
       

Voor sommige vereenvoudigingen heb je canonicalize_radical nodig:

(log(x^3)/log(x)).simplify_full() 
       
(log(x^3)/log(x)).canonicalize_radical() 
       

canonicalize_radical is soms wel onveilig (waarom?)

sqrt(x^2).canonicalize_radical() 
       

Uitwerken van uitdrukkingen:

z = (x+y)^3 
       
       
z.expand() 
       

$g$ is een functie in twee veranderlijken:

g(x,y) = log(x) + log(y) g(x,e) 
       

Je kan nagaan hoe Sage x,f,z en g kent:

parent(x) 
       
parent(f) 
       
parent(z) 
       
parent(g) 
       

Vergelijkingen oplossen

Met solve() kan je een vergelijking of een stelsel van vergelijkingen oplossen. Let erop om == te gebruiken in een vergelijking, want het teken = wordt gebruikt om een waarde aan een variabele toe te kennen. Na de komma staat de veranderlijke. We nemen als voorbeeld de vergelijking van de gulden snede:

var('x') solve(1 + 1/x == x, x) 
       

Complexe oplossingen worden ook gevonden:

solve(x^3 == 1, x) 
       

solve dient enkel om symbolische (i.e. exacte) oplossingen te vinden van een vergelijking. Als Sage geen symbolische oplossing kan vinden, krijg je gewoon de vergelijking terug:

solve(exp(x) == sin(x), x) 
       

In dat geval kan je Sage vragen om numerieke oplossingen te zoeken in een bepaald interval:

(exp(x) == sin(x)).find_root(-4,2,x) 
       

Vergelijkingen mogen ook andere variabelen bevatten, deze worden dan gezien als parameter:

var('x a') solve(x^2 + 2*x == a, x) 
       

Stelsels van vergelijkingen

Om stelsels op te lossen moeten we eerst kort leren werken met lijsten.

We definiëren een lijst L van de eerste 5 kwadraten:

L = [1,4,9,16,25] L 
       

L[n] geeft het element uit de lijst met rangnummer n. Pas op, want Sage begint te tellen vanaf rangnummer 0.

L[0] 
       
L[3] 
       

Om een stelsel op te lossen, steek je de vergelijkingen in een lijst:

var('x y') solve([x + y == 2, x - y == 1], (x, y)) 
       

De doorsnede van een cirkel en een ellips (4 punten in dit geval):

S = solve([x^2 + y^2 == 3, x^2 + 2*y^2 == 5], (x, y)) S 
       

$S$ is een lijst van lijsten: de 4 oplossingen zijn S[0], S[1], S[2] en S[3] en elke S[i] is een lijst met een oplossing voor $x$ en een oplossing voor $y$.

S[0] 
       
S[0][0] 
       

Het rechterlid van een gelijkheid (rhs staat voor right hand side):

S[0][0].rhs() 
       
S[0][1] 
       

Ongelijkheden

Sage kan ook overweg met ongelijkheden, dan krijg je als oplossing een verzameling punten of intervallen:

solve(x^4 - 4*x^3 + x^2 <= 0, x) 
       
plot(x^4 - 4*x^3 + x^2, (x,-1,4)) 
       

De Sage Notebook interface

De invoer- en tekstcellen zijn de gewone manier om met het Sage-proces te interageren. Je moet ook je werk opslaan en om dat te kunnen is het nodig dat je de andere elementen van de interface verstaat, zoals de verschillende knoppen en links bovenaan. Hieronder staat een overzicht van de belangrijkste.

    • Toggle: De Toggle-link verbergt een groot aantal actieknoppen bovenaan.
    • Home: De Home-link brengt je terug naar de overzichtlijst met al je notebooks. Noot: Vergeet niet op te slaan alvorens op deze link te klikken!
    • Help: De Help-link opent de uitgebreide documentatie van Sage in een ander browser-venster of tabblad.
    • Sign Out: De 'sign out'-link logt je uit en brengt je terug naar de login pagina. Noot: Opnieuw, vergeet niet op te slaan!
    • File: De 'File'-uitschuifmenu voorziet functies om je notebook (worksheet) op te slaan, ook naar een bestand op je harde schijf. Het bestand krijgt dan een .sws extensie. Als je al een .sws notebook-bestand hebt, dan kan je dit ook uploaden via de "Load worksheet from a file"-menuoptie.
    • Action: De belangrijkste optie in het "Action"-menu is  interrupt. Dit laat je toe om een lopende berekening te onderbreken. Dit kan nodig zijn als je vermoedt dat het programma vastzit, of als het te lang duurt. Noot: Een andere manier om een berekening te onderbreken is klikken binnenin de cel waarvoor de berekening bezig is en dan op "Escape" te drukken.
    • Typeset: De "Typeset"-knop kan gebruikt worden op de geëvalueerde output af te drukken in LaTeX-vorm. Dit vormt een aangenamere afdrukvorm.  
    • Print: De "Print"-knop kan gebruikt worden om een afdrukbare vorm van de notebook weer te geven.
    • Worksheet View: Dit is het huidig zicht op de notebook, zoals je het nu ziet.
    • Plain View/Text: Dit is een geavanceerde functionaliteit. Het geeft de ruwe html-tekstversie van de notebook, zoals het bewaard wordt op je harde schijf. Je kan de ruwe html van de notebook bewerken in de "Plain View" modus. Normaal gezien ga je dit weinig moeten doen.
    • Revisions: Revisions geven de vorige versies van de notebook weer, die bewaard werden toen je de notebook afsloot.

Je werk bewaren

Je kan je werk op verschillende manieren bewaren:

  • Telkens als je een cel evalueert, zal een tijdelijke kopie van het notebook bewaard worden op de harde schijf.
  • Bovenaan het notebook kan je op de 'Save' knop klikken om een tijdelijke kopie op te slaan.
  • De knop "Save and Quit" bovenaan het notebook bewaart het notebook op de harde schijf en maakt een backup revision van het notebook.
  • Ga naar "File" en dan "Save worksheet to a file" om het notebook op te slaan als een file op je persoonlijke USB drive.
  • Het is aan te raden de knop "Save and Quit" te gebruiken vooraleer je uitlogt. Je slaat best ook je notebooks op als  een file op je persoonlijke USB drive.