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-functiebiblitheek 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.
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.
16 16 |
1024 1024 |
Merk op dat Sage de breuk laat staan en niet omzet naar een kommagetal:
23/20 23/20 |
Wil je het decimaal antwoord, geef dan de teller in met een punt (als decimaal getal)
1.15000000000000 1.15000000000000 |
Als één van beide getallen decimaal gegeven wordt, geeft Sage het antwoord decimaal
1.15000000000000 1.15000000000000 |
Vierkantswortels berekenen:
2*sqrt(2) 2*sqrt(2) |
Als je een mooiere wiskundige output wil, kan je "show" gebruiken
|
Wil je een numerieke benadering van deze uitdrukking, zet dan de uitdrukking tussen de haakjes in "N()".
2.82842712474619 2.82842712474619 |
derde machtswortels:
2 2 |
log() is de natuurlijke logaritme (die op rekenmachines meestal met ln aangeduid wordt). Dat kan je merken als je log(10) ingeeft. Sage kent het getal e als constante.
log(10) log(10) |
2.30258509299405 2.30258509299405 |
0.999999999831127 0.999999999831127 |
1 1 |
Een andere basis ingeven, doe je door log(x,b) te gebruiken voor $\log_{\mathrm{b}}(x)$
2 2 |
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.
Integer Ring Integer Ring |
Real Field with 53 bits of precision Real Field with 53 bits of precision |
Rational Field Rational Field |
Deze ringen en velden hebben ook een naam in Sage: ZZ voor de gehele getallen, QQ voor de rationale getallen, RR voor de reële, CC voor de complexe. 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.
Complex Field with 53 bits of precision Complex Field with 53 bits of precision |
Real Field with 53 bits of precision Real Field with 53 bits of precision |
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:
10.0000000000000 10.0000000000000 |
1/4 1/4 |
Het volgende geeft een foutmelding, weet je waarom?
Traceback (click to the left of this block for traceback) ... TypeError: no conversion of this rational to integer Traceback (most recent call last): File "<stdin>", line 1, in <module> File "_sage_input_42.py", line 10, in <module> exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("WlooMS8yKQ=="),globals())+"\\n"); execfile(os.path.abspath("___code___.py")) File "", line 1, in <module> File "/var/sage/tmpSs3Bev/___code___.py", line 3, in <module> exec compile(u'ZZ(_sage_const_1 /_sage_const_2 ) File "", line 1, in <module> File "sage/structure/parent.pyx", line 953, in sage.structure.parent.Parent.__call__ (/opt/sage/sage-7.4/src/build/cythonized/sage/structure/parent.c:9126) File "sage/rings/rational.pyx", line 3894, in sage.rings.rational.Q_to_Z._call_ (/opt/sage/sage-7.4/src/build/cythonized/sage/rings/rational.c:31282) TypeError: no conversion of this rational to integer |
Dit werkt ook met symbolische constanten zoals pi en e :
pi pi |
-1 -1 |
3.14159265358979 3.14159265358979 |
2.71828182845905 2.71828182845905 |
Een getal x omzetten naar een kommagetal met een expliciet gekozen precisie gebeurt met de methode x.numerical_approx(bits). Je kan ook het argument n.(digits) gebruiken, dit geeft de precisie in decimale cijfers.
3.1416 3.1416 |
3.1415926535897932385 3.1415926535897932385 |
Sage kent de letter I als imaginaire eenheid i
I I |
-1 -1 |
Symbolic Ring Symbolic Ring |
Traceback (click to the left of this block for traceback) ... TypeError: unable to convert '1.00000000000000*I' to a real number Traceback (most recent call last): File "<stdin>", line 1, in <module> File "_sage_input_52.py", line 10, in <module> exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("UlIoaSk="),globals())+"\\n"); execfile(os.path.abspath("___code___.py")) File "", line 1, in <module> File "/var/sage/tmpNyUdjC/___code___.py", line 2, in <module> exec compile(u'RR(i) File "", line 1, in <module> File "sage/structure/parent.pyx", line 953, in sage.structure.parent.Parent.__call__ (/opt/sage/sage-7.4/src/build/cythonized/sage/structure/parent.c:9126) File "sage/structure/coerce_maps.pyx", line 238, in sage.structure.coerce_maps.NamedConvertMap._call_ (/opt/sage/sage-7.4/src/build/cythonized/sage/structure/coerce_maps.c:5967) File "sage/symbolic/expression.pyx", line 1283, in sage.symbolic.expression.Expression._mpfr_ (/opt/sage/sage-7.4/src/build/cythonized/sage/symbolic/expression.cpp:9730) File "sage/symbolic/expression.pyx", line 1215, in sage.symbolic.expression.Expression._eval_self (/opt/sage/sage-7.4/src/build/cythonized/sage/symbolic/expression.cpp:9434) File "sage/structure/parent.pyx", line 953, in sage.structure.parent.Parent.__call__ (/opt/sage/sage-7.4/src/build/cythonized/sage/structure/parent.c:9126) File "sage/structure/coerce_maps.pyx", line 110, in sage.structure.coerce_maps.DefaultConvertMap_unique._call_ (/opt/sage/sage-7.4/src/build/cythonized/sage/structure/coerce_maps.c:4562) File "sage/structure/coerce_maps.pyx", line 105, in sage.structure.coerce_maps.DefaultConvertMap_unique._call_ (/opt/sage/sage-7.4/src/build/cythonized/sage/structure/coerce_maps.c:4441) File "sage/rings/real_mpfr.pyx", line 636, in sage.rings.real_mpfr.RealField_class._element_constructor_ (/opt/sage/sage-7.4/src/build/cythonized/sage/rings/real_mpfr.c:6903) File "sage/rings/real_mpfr.pyx", line 1460, in sage.rings.real_mpfr.RealNumber._set (/opt/sage/sage-7.4/src/build/cythonized/sage/rings/real_mpfr.c:12287) TypeError: unable to convert '1.00000000000000*I' to a real number |
Er zijn verschillende manieren om help te krijgen in Sage.
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 .
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 "?"
File: /opt/sage/sage-7.4/local/lib/python2.7/site-packages/sage/functions/log.py Type: <class ‘sage.functions.log.Function_log’> Definition: log(*args, **kwds) Docstring:
File: /opt/sage/sage-7.4/local/lib/python2.7/site-packages/sage/functions/log.py Type: <class ‘sage.functions.log.Function_log’> Definition: log(*args, **kwds) Docstring:
|
Een zeer handig 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:
2 2 |
-3 -3 |
Dit werkt ook voor functies die geen methode zijn, maar dan enkel als je al 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:
3*I + 2 3*I + 2 |
Toekennen aan een variabele gebeurt met "=". De waarde wordt niet getoond als die wordt toegekend.
|
1/5 1/5 |
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.
|
4 4 |
-1 -1 |
Je kan meerdere lijnen in één cel ingeven, merk op dat alleen het laatste resultaat getoond wordt:
3600 3600 |
Gebruik het print commando om eender waar een resultaat te tonen:
t is gelijk aan 60 t^2 is gelijk aan 3600 t is gelijk aan 60 t^2 is gelijk aan 3600 |
Genereer de kwadraten van de natuurlijke getallen van 1 t.e.m. 10:
1 4 9 16 25 36 49 64 81 100 1 4 9 16 25 36 49 64 81 100 |
Je kan op deze manier ook een aantal basisbewerkingen doen met complexe getallen. Controleer dat:
-2*I + 3 -2*I + 3 |
-I + 5 -I + 5 |
-1/2*I + 1/2 -1/2*I + 1/2 |
-5/2*I - 1/2 -5/2*I - 1/2 |
Een symbolische variabele kan je maken met behulp van var. Hieronder maken we symbolische variabelen $x$ en $y$.
(x, y) (x, y) |
2*y 2*y |
Definieer de functie $f(x)=\cos^2{x}$ als volgt:
|
Alleen $f$ vragen, geeft de functie weer:
x |--> cos(x)^2 x |--> cos(x)^2 |
Een bepaalde functiewaarde opvragen:
1 1 |
De functie plot dient om 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:
|
Je kan ook verschillende plots tegelijk laten tekenen, elk in andere kleur.
|
De variabelen mogen ook uit meerdere letters bestaan of mogen cijfers of underscores (_) bevatten:
a0 a0 |
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:
Traceback (click to the left of this block for traceback) ... NameError: name 'w' is not defined Traceback (most recent call last): File "<stdin>", line 1, in <module> File "_sage_input_7.py", line 10, in <module> exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("c2luKHcp"),globals())+"\\n"); execfile(os.path.abspath("___code___.py")) File "", line 1, in <module> File "/var/sage/tmpK0iT5I/___code___.py", line 2, in <module> exec compile(u'sin(w) File "", line 1, in <module> NameError: name 'w' is not defined |
Sommige eenvoudige vereenvoudigingen worden automatisch gedaan, andere niet:
x x |
cos(x)^2 + sin(x)^2 cos(x)^2 + sin(x)^2 |
Om vereenvoudigingen te forceren, gebruik je de methode simplify_full (er bestaan een heleboel varianten van simplify):
1 1 |
2*cos(x)*sin(x) 2*cos(x)*sin(x) |
Voor sommige vereenvoudigingen heb je canonicalize_radical nodig:
3 3 |
canonicalize_radical is soms wel onveilig (waarom?)
x x |
Uitwerken van uitdrukkingen:
|
(x + y)^3 (x + y)^3 |
x^3 + 3*x^2*y + 3*x*y^2 + y^3 x^3 + 3*x^2*y + 3*x*y^2 + y^3 |
$g$ is een functie in twee veranderlijken:
log(x) + 1 log(x) + 1 |
Je kan nagaan hoe Sage x,z,f en g kent:
Symbolic Ring Symbolic Ring |
Callable function ring with argument x Callable function ring with argument x |
Symbolic Ring Symbolic Ring |
Callable function ring with arguments (x, y) Callable function ring with arguments (x, y) |
|
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:
[x == -1/2*sqrt(5) + 1/2, x == 1/2*sqrt(5) + 1/2] [x == -1/2*sqrt(5) + 1/2, x == 1/2*sqrt(5) + 1/2] |
Complexe oplossingen worden ook gevonden:
[x == 1/2*I*sqrt(3) - 1/2, x == -1/2*I*sqrt(3) - 1/2, x == 1] [x == 1/2*I*sqrt(3) - 1/2, x == -1/2*I*sqrt(3) - 1/2, x == 1] |
Een resultaat dat beter leesbaar is, krijg je als volgt:
|
solve dient enkel om symbolische oplossingen te vinden van een vergelijking. Als Sage geen symbolische oplossing kan vinden, krijg je gewoon de vergelijking terug:
[sin(x) == e^x] [sin(x) == e^x] |
Vergelijkingen mogen ook andere variabelen bevatten, deze worden dan gezien als parameter:
[x == -sqrt(a + 1) - 1, x == sqrt(a + 1) - 1] [x == -sqrt(a + 1) - 1, x == sqrt(a + 1) - 1] |
Om een stelsel op te lossen, steek je de vergelijkingen in een lijst:
[[x == (3/2), y == (1/2)]] [[x == (3/2), y == (1/2)]] |
De doorsnede van een cirkel en een ellips (4 punten in dit geval):
[[x == -1, y == -sqrt(2)], [x == -1, y == sqrt(2)], [x == 1, y == -sqrt(2)], [x == 1, y == sqrt(2)]] [[x == -1, y == -sqrt(2)], [x == -1, y == sqrt(2)], [x == 1, y == -sqrt(2)], [x == 1, y == sqrt(2)]] |
$S$ is een lijst van lijsten: de 4 oplossingen zijn S[0], S[1], S[2] en S[3] en elke S[i] een lijst met een oplossing voor $x$ en een oplossing voor $y$.
[x == -1, y == -sqrt(2)] [x == -1, y == -sqrt(2)] |
x == -1 x == -1 |
Het rechterlid van een gelijkheid:
-1 -1 |
y == -sqrt(2) y == -sqrt(2) |
Sage kan ook overweg met ongelijkheden, dan krijg je als oplossing een verzameling punten of intervallen:
[[x == 0], [x >= -sqrt(3) + 2, x <= sqrt(3) + 2]] [[x == 0], [x >= -sqrt(3) + 2, x <= sqrt(3) + 2]] |
|
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.
Je kan je werk op verschillende manieren bewaren:
|