21
MATHEMATIK PROGRAMMIEREN MIT PYTHON Univ.–Prof. Dr. Stefan M¨ uller-Stach AG Zahlentheorie 27. September 2006 JOGU Mainz

MATHEMATIK PROGRAMMIEREN MIT PYTHON · Starten von PYTHON Man startet das Programm mit Hilfe einer Konsole, am besten sogar eine interaktive Version wie z.B. IPYTHON. In folgender

  • Upload
    dobao

  • View
    224

  • Download
    0

Embed Size (px)

Citation preview

MATHEMATIK PROGRAMMIEREN MIT

PYTHON

Univ.–Prof. Dr. Stefan Muller-StachAG Zahlentheorie

27. September 2006

JOGU Mainz

PYTHON: Moglichkeiten einer Programmiersprache

PYTHON: Objektorientierte Sprache von Guido van Rossum [1]benannt nach der MONTY PYTHON TruppeGenutzt fur Content Management Systemewie PLONE/ZOPE und auch GOOGLE et.al.leicht erlernbar, geeignet fur Mathematik (longint)Plattformunabhangig (lauft auf Win, Mac, Linux etc.)Kostenlos erhaltlich, siehe http://python.org

JOGU Mainz

Starten von PYTHON

Man startet das Programm mit Hilfe einer Konsole, am bestensogar eine interaktive Version wie z.B. IPYTHON. In folgenderBeispielsitzung wird die Mathematik–Bibliothek math geladen:

>>> import math

>>> math.pi

3.1415926535897931

>>> math.e

2.7182818284590451

>>> 2**5

32

>>> math.cos(2*math.pi)

1.0

JOGU Mainz

>>> 221 % 17

0

>>> 4/3 (oder besser 4//3)

1

>>> from future import division

>>> 4/3

1.33333333333

>>> 2**190

1569275433846670190958947355801916604025588861116008628224L

>>> numbers=[i for i in range(1,8)]

>>> numbers

[1,2,3,4,5,6,7]

>>> [2**n for n in numbers]

[2,4,8,16,32,64,128]

>>> [x for x in range(-10,10) if (x**4-13*x**2+36==0)]

[-3, -2, 2, 3]

JOGU Mainz

Beispiel 1: Der ggT

Man kann kleine Programme wie hier den großten gemeinsamenTeiler von zwei ganzen Zahlen auch selbst auf der Konsoleprogrammieren:

>>> def ggt(a,b):

>>> while b:

>>> a,b=b,a%b

>>> return a

JOGU Mainz

Etwas allgemeiner kann man den erweiterten EuklidischenAlgorithmus programmieren, der auch noch eine Linearkombinationxa+ yb = ggt(a,b) ausgibt:

>>> def xggt(a,b):

>>> x1,x2,y1,y2=1,0,0,1

>>> while b:

>>> q=a//b

>>> x1,x2,y1,y2=x2,x1-q*x2,y2,y1-q*y2

>>> a,b=b,a%b

>>> return a,x1,y1

JOGU Mainz

Beispiel 2: Primzahlen

Mit PYTHON kann man auch Programme in Dateien schreibenund ausfuhren lassen. Schreiben Sie folgendes Programm in eineDatei z.B. mit dem Namen primzahltest.py:

from math import sqrt

def isprime(n):

if n % 2 == 0 and not n == 2:

return (0)

else:

limit = int(sqrt(n)) + 1

for l in range(3, limit, 2):

if n % l == 0:

return (0)

return (1)

JOGU Mainz

Jetzt kann man diese Datei laden und neu definierte Kommandoisprime benutzen:

>>> from primzahltest import isprime

>>> [i for i in range(1,30) if isprime(i)]

2,3,5,7,11,13,17,19,23,29

JOGU Mainz

Beispiel 3: Fibonacci Zahlen

def fibonacci(n):

a,b = 0,1

list=[1,1]

for x in range(1,n-1):

a,b=b,a+b

list.append(a+b)

return list

Das Kommando fibonacci(7) produziert nun die Liste der erstensieben Fibonaccizahlen [1,1,2,3,5,8,13].

JOGU Mainz

Beispiel 4: Fakultat

Rekursive Programmierung:

def factorial(n):

assert n>=0, "n nicht negativ!"

if n=1:

return 1

else:

return n*factorial(n-1)

Das Kommando factorial(5) ergibt das korrekte Ergebnis5! = 120.

JOGU Mainz

Beispiel 5: Binomialkoeffizenten

Die Binomialkoeffizienten tauchen im Pascalschen Dreieck auf undsind definiert durch

(

nk

)

:= n!k!(n−k)! = n(n−1)···(n−k+1)

1·2···k ∈ N.

def binomial(n,k):

out=1

for i in range(1,k+1):

out = (out*(n-i+1))//i

return out

Das Kommando binomial(5,3) ergibt das korrekte Ergebnis 10.

JOGU Mainz

Beispiel 6: Mersenne Primzahlen und Lucas–Lehmer Test

Der Lucas–Lehmer Test untersucht ob n = 2p−1 mit p prim eine

(Mersenne) Primzahl ist, die großten bekannten Primzahlen, z.B.derzeit die Zahl 232.582.657

−1 mit uber 9.8 Mio. Ziffern [6]. Dazukonstruiert man rekursiv eine Folge sn mit s1 = 4 und sn+1 = s2

n −2und testet, ob sp−1 durch n teilbar ist:

def lucas(p):

s=4

val=pow(2,p)-1

for i in range(3,p+1):

s=(s*s-2)%val

return not s

Die ersten funf Mersenne–Primzahlen sind 22−1 = 3, 23

−1 = 7,25

−1 = 31, 27−1 = 127 und 213

−1 = 8191.

JOGU Mainz

Beispiel 7: Sierpinski Grafik

1 1 1 1 1 1

1 3 5 7 9 · · ·

1 5 13 25 41 · · ·

1 7 25 63 129 · · ·

1 9 41 129 321 · · ·

1...

......

...

Bild wird durch PYTHON Imaging Library als JPEG–Bild erzeugt.

JOGU Mainz

PYTHON MATH LAB

PYTHON MATH LAB [3] ist eine Webseite, die zum Ziel hat,Mathematik mit PYTHON zu unterstutzen. Dort findet manBibliotheken fur viele mathematische Teilgebiete, wie z.B.Zahlentheorie, Geometrie, Kryptographie, Numerische Analysis.Ebenso findet man dort PYTHON–Programme, die aufSmartphones laufen (siehe unten).

JOGU Mainz

SAGE

SAGE [5] ist ein auf PYTHON aufgebautes freies und kostenlosesCAS. Es enthalt u.a. NTL, MWRANK, NUMERIC, SINGULAR,MAXIMA, GAP und PARI/GP.

sage: 2/3

2/3

sage: 2//3

0

sage: parent( )

Rational Field

sage: factor(232 +1)641 * 6700417

In der letzten Zeile sieht man, dass die 5–te Fermatzahl 232 +1nicht prim ist.

JOGU Mainz

NZMATH

NZMATH [7] ist ein eng auf die Zahlentheorie fokussiertes und inPYTHON geschriebenes CAS. Im Gegensatz zu SAGE sind alleAlgorithmen ausschließlich in PYTHON implementiert und bildendamit ein Lehrbeispiel fur die Programmierung in PYTHON.

JOGU Mainz

NOKIA PYTHON fur Series 60

Series 60 Telefone besitzen ein SYMBIAN Betriebssystem, fur daseine Opensource PYTHON Implementation von NOKIA existiert[2].

Features: 2D Grafik, BildbetrachtungKamera, Kalender und KontaktdatenbankzugangSoundaufnahme und PlaybackZugang zu Systeminformation (e.g. GSM Location)Telefon und SMS-NutzungGPRS, Webserver und Bluetooth ApplikationenStandalone Programme herstellbarAktives Developer Forum [2]

JOGU Mainz

Mathematik auf dem Telefon

Das kleine in PYTHON geschriebene CAS mathlab.py lauft aufSerie 60 Mobiltelefonen und lost viele kleine mathematischeProbleme der Zahlentheorie [3].

Features: Elementare ZahlentheorieAlgebraische Zahlentheorie (Klassenzahlen)Rationale Zahlen, Vektoren, Matrizen, GleichungenTaschenrechnerfunktionenElementare Kombinatorik

Eine Weiterentwicklung ist geplant. Gotz Schwandtner vomInstitut fur Informatik in Mainz hat z.B. einenspigot–Algorithmus zur Berechnung beliebig vieler Ziffern von πund e implementiert [13].

JOGU Mainz

Screenshots

JOGU Mainz

Andere PYTHON–Mathematik Links

In der numerischen Mathematik (Scientific Computing) werden oftextrem große Matrizen benutzt und manipuliert. Dazu gibt dieBibliothek NUMPY [4] (fruher NUMERIC oder NUMARRAY).Weitere Links: Kombinatorische Mathematik ALADIM [8],MATHGUIDE [9] (weiteres CAS), Kryptographische ToolsPYCRYPTO [9], 2D und 3D Visualierungs- und GeometrietoolsVPYTHON [10] und PYGEO [11].

JOGU Mainz

Bibliographie

[1 ] PYTHON, http://python.org

[2 ] NOKIA, http://opensource.nokia.com/projects/pythonfors60/

[3 ] PYTHON MATH LAB, http://hodge.mathematik.uni-mainz.de/∼stefan/python/index.html

[4 ] NUMPY, http://numeric.scipy.org/

[5 ] SAGE, http://modular.math.washington.edu/sage/

[6 ] GIMPS, http://www.mersenne.org

[7 ] NZMATH, http://sourceforge.net/projects/nzmath/

[8 ] ALADIM, http://www.math.uni-siegen.de/ring/aladim.html

[9 ] MATHGUIDE, http://www.math.uni-siegen.de/ring/mathGUIde/

[10 ] PYCRYPTO, http://www.amk.ca/python/code/crypto.html

[11 ] VPYTHON, http://vpython.org/

[12 ] PYGEO, http://home.netcom.com/∼ajs/index.html

[13 ] http://wombatz.informatik.uni-mainz.de/∼goetz/PyS60/

JOGU Mainz