Diese Zusammenstellung erläutert die wichtigsten Dinge, um SAGE in der Zahlentheorie-Vorlesung zum Lösen der ersten Übungsblätter zu benutzen.
Dieses Dokument gibt es in zwei Varianten einmal als statisches PDF-Dokument und einmal als interaktives SAGE-Worksheet. Wenn Ihr die Worksheet-Variante aus dem Public-Bereich des Sage-Server http://sage.mathematik.uni-siegen.de:8000/pub geöffnet habt, so könnt Ihr oben links auf Log in to edit a copy klicken. Dann habt Ihr eine eigene Kopie dieses Dokumentes und Ihr könnt die Erläuterungen direkt ausprobieren: ändert den Text in den Zellen und klickt auf den evaluate links unterhalb der ausgwählten Zelle.
Zuerst müsst Ihr eine Zugang zu dem Siegener-Sage-Server (http://sage.mathematik.uni-siegen.de:8000) anlegen. Das ist aber ganz einfach über den Link Sign up for a new Sage Notebook account möglich.
Ihr könnt SAGE wie einen Taschenrechner verwenden. Es stehen die üblichen Operationen + - * / sowie ^ zur Verfügung:
(6, 9, 7, 9, 16) |
Wenn eine Zelle mehrere Zeilen enthält, so wird nur das Ergebnis der letzten Zeile angezeigt. Deswegen gibt es den print Befehl, der einfach sein Argument ausgibt:
Hallo Welt 7 5 |
SAGE bzw. Python unterscheidet zwischen Zahlen und Zeichenketten. Bei Zeichenketten sind Anführungszeichen (" oder ’) erforderlich. Wir brauchen nämlich einen Mechanismus, der die Variable a mit dem Wert 6 von dem Zeichen "a" unterscheidet.
6 19" Monitor |
Neben den üblichen Rechenoperationen gibt es in SAGE noch den Rest bei Division, der durch das Zeichen % berechnet wird, sowie die Division mit Rest, die durch das Zeichen // berechnet wird:
Division 7/5 Division mit Rest: 1 Rest bei Division: 2 7 |
4 |
0 |
Das Zeichen # leitet einen Kommentar bis zum Zeilenende ein. Ein solcher Kommentar kann als Hinweis z.B. für den Korrekteur oder für einen selbst dienen.
In der Zahlentheorie spielen die Teiler und die Faktorisierung einer Zahl, sowie die Primzahlen eine besondere Rolle. Es gibt in SAGE Funktionen, die uns bei der Untersuchung dieser Objekte behilflich sind:
[1, 2, 5, 10, 13, 26, 65, 130] |
Teiler: [1, 2, 5, 10, 13, 26, 65, 130] 1 False 2 True 5 True 10 False 13 True 26 False 65 False 130 False |
Die Funktion divisors berechnet eine Liste der Teiler der Zahl, die Funktion is_prime ist True (wahr), falls das Argument eine Primzahl ist, andernfalls ist der Wert False (falsch).
Die Zeile for d in D: oder eine entsprechende Konstruktion werden wir sehr häufig benötigen, um über die Elemente einer Liste zu laufen. Die Variable d nimmt nacheinander jeden Wert der Liste D an. Im Schleifenkörper, der durch die Einrückung kenntlich gemacht wird, können wir d benutzen. Oben haben wir z.B. geprüft, welche Teiler von n Primzahlen sind. Zu beachten sind der Doppelpunkt am Ende for Zeile, sowie die Einrückung des Schleifenkörpers.
Neben den Teilern werden wir auch häufig die Faktorisierung brauchen, dafür gibt es in SAGE die Funktion factor:
Faktorisierung von 130 : 2 * 5 * 13 (2, 1) (5, 1) (13, 1) |
Faktorisierung von 100: 2^2 * 5^2 (2, 2) (5, 2) |
Eine sehr nützliche Funktion von SAGE ist die automatische Ergänzung von Befehlen. Wenn wir wissen wollen, welche Funktionen mit prime beginnen, so geben wir diese Buchstaben in eine Zelle ein und drücken dann auf Tabulator, dadurch wird eine Liste mit möglichen Ergänzungen angezeigt:
|
|
Eine weitere nützliche Einrichtung von SAGE ist die Funktionsdokumentation. Wenn wir z.B. erfahren wollen, was die Funktion prime_range bewirkt, so liefert prime_range? die Antwort. Insbesondere der EXAMPLES Abschnitt zeigt die typische Verwendung der Funktion. Die Variante mit zwei Fragezeichen liefert sogar die Implementierung der Funktion.
|
|
Oben rechts gelang Ihr über Help an die umfangreiche Online-Hilfe. Das Reference Manual ist im Inhaltsverzeichnis nach Kategorien geordnet und enthält einen alphabetischen Index.
Mit prime_range sind wir in der Lage über die Primzahlen in einem Bereich zu iterieren ( for p in prime_range(100,1000): ...). Desweiteren gibt die Funktion primes_first_n Zugriff auf die ersten n Primzahlen.
Primzahlen zwischen 20 und 50: 23 29 31 37 41 43 47 Die ersten 25 Primzahlen: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 |
Die ersten 25 Primzahlen: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 |
Die Funktion prime_divisors listet die Primteiler einer Zahl auf (divisors listet alle Teiler auf).
Alle Teiler: [1, 2, 5, 10, 13, 26, 65, 130] Nur Primteiler: [2, 5, 13] |
Wir hatten oben schon die Division mit Rest gesehen. In diesem Zusammenhang wird in der Vorlesung auch der größte gemeinsame Teiler und der Satz von Bézout behandelt. In SAGE berechnen wir den größten gemeinsamen Teiler mittels der Funktion gcd. Und die Aussage des Satzes von Bézout wird durch den erweiterten euklidischen Algorithmus bzw. die Funktion xgcd repräsentiert:
Der ggT ist 7 Die Lösung ist: (7, 4, -3) True |
An dieser Stelle bietet sich ein kleiner Einschub über Listen an. Wir haben bereits einige Funktionen gesehen, die Listen zurückgeben (divisors, prime_range, xgcd). Eine Liste L ist eine Sammlung von Elementen einer bestimmten Länge. Die Länge einer Liste lässt sich mit len bestimmen. Auf die Elemente einer Liste L mit n Elementen greifen L[0] bis L[n-1] zu.
Alternativ bietet sich die Verwendung einer for Schleife an, die wir schon ein paar mal gesehen haben.
In SAGE ist auch eine Zeichenkette eine Liste von Buchstaben. Im Folgenden sehen wir einigen typische Operationen auf Listen:
Zahlentheorie hat die Länge 13 Z e n |
theorie |
e n Z |
Z a h l e n t h e o r i e |
0 Z 1 a 2 h 3 l 4 e 5 n 6 t 7 h 8 e 9 o 10 r 11 i 12 e e i r o e h t n e l h a Z |
In der Vorlesung werden sehr bald die Restklassenringe ℤ∕nℤ drankommen. Dabei werden Zahlen "bis auf den Rest bei Division durch n"betrachtet. Diese Menge hat die Struktur eines Ringes. D.h. man kann in diesen Restklassenringen Addieren und Multiplizieren.
Vorausgreifend sei hier ein Beispiel angegeben:
Ring of integers modulo 13 0 1 2 3 4 5 6 7 8 9 10 11 12 4 |
Ordnung von R(5) 13 multiplikative Ordnung von R(7) 12 2 |
|
|
|
|
|
|
|
|
|
|
|
|
Im nächsten Beispiel wird die Summe der Primzahlen kleiner 1000 berechnet:
|
|
Das letzte Beispiel ist schon fast der Körper einer Summe der Primzahlen kleiner als eine Zahl Funktion. Eine Funktion ist ein Name für eine Anweisungsfolge, damit wir diese Anweisungen später erneut aufrufen können. Damit das Ganze flexibel bleibt, wird die Anweisungsfolge parametrisiert. In obigem Beispiel bietet sich B als Parameter an.
|
|
Hier wird eine Funktion mit Namen SumOfPrimesLT und dem Argument B definiert. Der Funktionskörper ist wieder eingerückt. Der Schleifenkörper innerhalb der Funktion ist eine weitere Stufe eingerückt. Die erste Zeichenkette ist der Text, den wir per SumOfPrimesLT? abrufen können.
Wenn wir die Funktion mit SumOfPrimesLT(100) aufrufen, so enthält im Funktionskörper das Argument B den Wert 100. Wenn das Ergebnis der Berechnung vorliegt, so wird es per return an den Aufrufer zurückgegeben. Die Funktion wird verlassen, sobald die Ausführung auf eine return Anweisung trifft. Gelangt die Ausführung ans Ende der Funktion (ohne vorher auf ein return zu treffen), so endet die Funktion dort.
Hier folgt ein Beispiel mit zwei Argumenten. Wir hatten oben gesehen, dass wir durch die Division mit Rest entschieden können, wann eine Zahl eine andere teilt. Damit können wir eine Funktion is_divisible schreiben:
|
|
(is_divisible ist hier nur als Beispiel gedacht, in SAGE funktioniert die viel elegantere Schreibweise 10.divides(100).)
|
|
SAGE erlaubt es Arbeitsblätter interaktiv zu gestalten. Damit kann ein Arbeitsblatt soweit vorbereitet werden, dass ein Benutzer experimentieren kann, ohne SAGE zu kennen.
|
|
|
|
Um einen Eindruck zu bekommen, was mit den interaktiven Arbeitsblättern möglich ist, könnt Ihr die Seite http://www.math.usm.edu/sage/ besuchen. Klickt links auf Calc I und dann auf die Vorschau-Bilder unter SAGElets. Eine wachsende Sammlung von interaktiven Arbeitsblättern findet sich auch unter http://wiki.sagemath.org/interact
Abschließend möchte ich noch auf die SAGE-Homepage http://www.sagemath.org hinweisen. Dort findet Ihr ein Tutorial, sowie viele Beispiele im Wiki. Daneben gibt es sogar unter Stichwort Screencasts einige Videos rund um SAGE. Ihr findet ebenfalls einige Links zur Programmierung in Python.
Sehr nützlich sind auch die Sage Quick Reference Cards, die es unter http://wiki.sagemath.org/quickref gibt.
Ansonsten startet nächste Woche hier im CIP-Pool ein Tutorial rund um SAGE und Zahlentheorie im Allgemeinen.
|
|