Om een eerste gevoel te krijgen voor Sage beginnen we met een kort overzicht. Het volstaat gewoon om telkens SHIFT-ENTER te typen of op evaluate te klikken. Probeer wel telkens te begrijpen waarom je een bepaalde uitvoer krijgt!
2 2 |
Merk op dat Sage hier gewoon de breuk laat staan en die niet omzet naar een kommagetal:
4/3 4/3 |
31/12 31/12 |
5/3 5/3 |
1048576/59049 1048576/59049 |
Sage heeft geen moeite met grote getallen:
114813069527425452423283320117768198402231770208869520047764273682576626\ 139237031385665948631650626991844596463898746277344711896086305533142593\ 135616665318539129989145312280000688779148240044871428926990063486244781\ 615463646388363947317026040466353970904996558162398808944629605623311649\ 536164221970332681344168908984458505602379484807914058900934776500429002\ 716706625830522008132236281291761267883317206598995396418127021779858404\ 042159853183251540889433902091920554957783589672039160081957216630582755\ 380425583726015528348786419432054508915275783882625175435528800822842770\ 817965453762184851149029376/13220708194808066368904552597521443659654220\ 327521481676649203682268285973467048995407783138506080619639097776968725\ 823559509545821006189118653427252579536740276202251983208038780147742289\ 648412743904001175886180411289478156230944380615661730540866744905061781\ 254803444055470543970388958174653682549161362208302685637785822902284163\ 983078878969185564040848989376093732421718463599386955167650189405881090\ 604260896714388641028143503856487471658320106143661321731027689028552200\ 01 114813069527425452423283320117768198402231770208869520047764273682576626139237031385665948631650626991844596463898746277344711896086305533142593135616665318539129989145312280000688779148240044871428926990063486244781615463646388363947317026040466353970904996558162398808944629605623311649536164221970332681344168908984458505602379484807914058900934776500429002716706625830522008132236281291761267883317206598995396418127021779858404042159853183251540889433902091920554957783589672039160081957216630582755380425583726015528348786419432054508915275783882625175435528800822842770817965453762184851149029376/1322070819480806636890455259752144365965422032752148167664920368226828597346704899540778313850608061963909777696872582355950954582100618911865342725257953674027620225198320803878014774228964841274390400117588618041128947815623094438061566173054086674490506178125480344405547054397038895817465368254916136220830268563778582290228416398307887896918556404084898937609373242171846359938695516765018940588109060426089671438864102814350385648747165832010614366132173102768902855220001 |
Als je een kommagetal ingeeft, zal Sage de berekening altijd uitvoeren met kommagetallen:
3.64000000000000 3.64000000000000 |
4.14159265358979323846264338327950288419716939937510582097 4.14159265358979323846264338327950288419716939937510582097 |
log() is de natuurlijke logaritme (die op rekenmachines meestal met ln aangeduid wordt):
0.999999999831127 0.999999999831127 |
2.82842712474619 2.82842712474619 |
Bij exacte invoer worden functies symbolisch toegepast:
2*sqrt(2) 2*sqrt(2) |
log(3/4) log(3/4) |
Toekennen aan een variabele gebeurt met "=". Merk op dat de waarde niet getoond wordt als die toegekend wordt.
|
Toon de waarde van a en 1/a:
27 27 |
1/27 1/27 |
Meerdere lijnen in één cel, merk op dat alleen het laatste resultaat getoond wordt:
3600 3600 |
Gebruik het print commando om eender waar een resultaat te tonen:
b is gelijk aan 60 b*b is gelijk aan 3600 b is gelijk aan 60 b*b is gelijk aan 3600 |
Een eenvoudige for-lus:
1 8 27 64 125 216 343 512 729 1000 1 8 27 64 125 216 343 512 729 1000 |
Een foutmelding:
Traceback (click to the left of this block for traceback) ... ZeroDivisionError: rational division by zero Traceback (most recent call last): File "<stdin>", line 1, in <module> File "_sage_input_110.py", line 10, in <module> exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("MS8w"),globals())+"\\n"); execfile(os.path.abspath("___code___.py")) File "", line 1, in <module> File "/var/sage/tmpCfvssu/___code___.py", line 3, in <module> exec compile(u'_sage_const_1 /_sage_const_0 File "", line 1, in <module> File "sage/rings/integer.pyx", line 1845, in sage.rings.integer.Integer.__div__ (/opt/sage/sage-7.4/src/build/cythonized/sage/rings/integer.c:12532) ZeroDivisionError: rational division by zero |
Onderbreken van een lange berekening kan met de ESC toets of met Action/Interrupt in het menu bovenaan:
|
Het zou niet mogen, maar soms kan iets niet onderbroken worden of werkt Sage in het geheel niet meer. In dit geval kan je wel nog Action/Restart worksheet doen. Dit stopt het volledige werkblad. Het gevolg is onder andere dat alle variabelen verloren gaan.
|
Probeer zelf eens alle volgende dingen in Sage:
Tekstblokken ondersteunen ook (elementaire) LaTeX-wiskunde: $x^{25} \equiv y^2 + y \pmod{17}$.
Let op de fijne rode lijntjes links van de cellen: deze geven aan dat een cel nog niet uitgevoerd is.
|
|
We hebben eerder al gezien dat Sage de getallen "3" en "3.0" anders interpreteert. Het commando parent geeft de wiskundige verzameling terug waarvan het object een element is. Dit toont inderdaad een duidelijk verschil (de "with 53 bits of precision" mag je voorlopig negeren):
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. 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 dus types veranderen:
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 |
3.00000000000000 3.00000000000000 |
Real Field with 53 bits of precision Real Field with 53 bits of precision |
1/4 1/4 |
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_128.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/tmpLmjfU1/___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:
pi pi |
-1 -1 |
3.14159265358979 3.14159265358979 |
Bij de reële en complexe velden zie je een precisie in bits, die standaard gelijk is aan 53 (dit lijkt een raar getal maar dit is een precisie die heel vaak gebruikt wordt voor computerberekeningen, de zogenaamde double precision). Deze 53 bits komen overeen met ongeveer 16 decimale cijfers. Als je een getal met meer cijfers ingeeft krijg je een grotere precisie:
Real Field with 193 bits of precision Real Field with 193 bits of precision |
3.14159265358979323846264338327950288419716939937510582097 3.14159265358979323846264338327950288419716939937510582097 |
Je vraagt je misschien af waarom Sage hier het laatste cijfer van a schijnbaar weglaat: dit heeft te maken met de manier waarop getallen door de computer worden voorgesteld. Intern gebeurt alles binair en de decimale uitvoer die Sage weergeeft is "slechts" een voorstelling van dat binair getal (in de cursus Numerieke Analyse wordt hier verder op ingegaan). Dit heeft onder andere ook het bizarre gevolg dat volgend resultaat niet exact 0 is:
5.55111512312578e-17 5.55111512312578e-17 |
Een getal x omzetten naar een kommagetal met een expliciet gekozen precisie gebeurt met de methode x.numerical_approx(bits) of het veel kortere x.n(bits):
0.60000000000000000000000000000 0.60000000000000000000000000000 |
Real Field with 100 bits of precision Real Field with 100 bits of precision |
2.0000 2.0000 |
Je kan ook het argument digits gebruiken, dit geeft de precisie in decimale cijfers. Hieronder staat $\pi$ met 999 cijfers na de komma (in de 1000 cijfers is de $3$ voor de komma ook meegerekend):
3.1415926535897932384626433832795028841971693993751058209749445923078164\ 062862089986280348253421170679821480865132823066470938446095505822317253\ 594081284811174502841027019385211055596446229489549303819644288109756659\ 334461284756482337867831652712019091456485669234603486104543266482133936\ 072602491412737245870066063155881748815209209628292540917153643678925903\ 600113305305488204665213841469519415116094330572703657595919530921861173\ 819326117931051185480744623799627495673518857527248912279381830119491298\ 336733624406566430860213949463952247371907021798609437027705392171762931\ 767523846748184676694051320005681271452635608277857713427577896091736371\ 787214684409012249534301465495853710507922796892589235420199561121290219\ 608640344181598136297747713099605187072113499999983729780499510597317328\ 160963185950244594553469083026425223082533446850352619311881710100031378\ 387528865875332083814206171776691473035982534904287554687311595628638823\ 53787593751957781857780532171226806613001927876611195909216420199 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303598253490428755468731159562863882353787593751957781857780532171226806613001927876611195909216420199 |
We komen nog eens terug op het omzetten naar een rationaal getal met QQ(x). Dit geeft altijd een benaderende breuk terug op basis van de gegeven precisie van x. Hieronder zien we dus twee benaderingen van $\pi$:
3.1416 3.1416 |
355/113 355/113 |
22/7 22/7 |
De syntax a.numerical_approx(100) geeft een zogenaamde methode aan: het is een functie numerical_approx() die op een bepaald object inwerkt, in dit geval a. We schrijven object.methode(argumenten). Dit in tegenstelling tot een gewone functie-oproep zoals sin(1.5). Doordat Sage zo object-georiënteerd is, zal je vaak met methodes moeten werken. We geven hieronder enkele voorbeelden:
False False |
11 11 |
[ 1 2 3] [ 4 5 6] [ 7 8 -9] [ 1 2 3] [ 4 5 6] [ 7 8 -9] |
54 54 |
54 54 |
In al deze gevallen hierboven werkt een gewone functie ook. Dit is zeker geen algemene regel, enkel voor de meest gebruikte methoden:
True True |
11 11 |
54 54 |
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:
|
|
Zet je cursus op het einde van de cel hieronder en druk op [TAB]:
|
Dit werkt ook voor functies die geen methode zijn, maar dan enkel als je al een letter getypt hebt. Druk hier op de TAB-toets:
|
Als je een functie/methode en het haakje ( getypt hebt, geeft TAB de documentatie:
|
De documentatie van een specifieke functie/methode bekijken kan ook met ?. Alles wordt goed geïllustreerd met voorbeelden (EXAMPLES):
|
Twee vraagtekens ?? geven de broncode weer. Zo kan je zien hoe een bepaalde functie/methode in Sage geprogrammeerd is. Het is uiteraard geen probleem als je hier niets van begrijpt.
|
Voor uitgebreiderde help kan je terecht bij de Sage help, bijvoorbeeld door rechtsbovenaan het werkblad op "Help" te klikken.
|