Seite 1 von 1
Serpinski Teppich
Verfasst: Samstag 21. Januar 2012, 16:33
von theo.puke
Hallo Forum,
Ich habe mich mit dem Serpinski-Teppich beschäftigt und habe herausbekommen, dass in jeder stufe 8^x Quadrate neu entstehen + die Quadrate, die schon in den früheren Stufen vorhanden waren:
Code: Alles auswählen
import time
def serpinski_quadrate_rekursiv(n,vorigesergebnis=0):
now = time.clock()
stufenergebnis = pow(8,n)+vorigesergebnis
if n <= 0:
print("Dauer: "+str(time.clock()-now))
return round(stufenergebnis)
stufenergebnis = serpinski_quadrate_rekursiv(n-1,stufenergebnis)
return stufenergebnis
def serpinski_quadrate_iterativ(n):
n+=1
now = time.clock()
ergebnis = 0
while n >0:
n-=1
ergebnis = pow(8,n)+ergebnis
print("Dauer: "+ str(time.clock()-now))
return ergebnis
a = serpinski_quadrate_rekursiv(5)
print (a)
b = serpinski_quadrate_iterativ(5)
print(b)
Das ist die Implementierung.
Aber die Funktion hier kennt keine Verallgemeinerung. Ich benötige eine Summenformel für Potenzen mit immer der gleichen Basis, damit ich eine solche Funktion verallgemeinern kann. Kennt hier jemand eine und weiß sie zu implementieren?
Re: Serpinski Teppich
Verfasst: Samstag 21. Januar 2012, 17:27
von BlackJack
@theo.puke: Du solltest die Zeitmessung aus den Funktionen heraus lassen und das ausserhalb machen. So kann man den Quelltext dafür *einmal* schreiben und in beiden Fällen wieder verwenden. Und sogar noch auf weitere Implementierungen oder ganz andere Funktionen anwenden. Es ist auch nicht so günstig `time.clock()` direkt zu verwenden, denn ob `time.clock()` oder `time.time()` für diese Aufgabe besser geeignet ist, hängt von der Plattform ab, unter der man das laufen lässt. Die Standardbibliothek enthält deshalb das `timeit`-Modul für solche Messungen.
Bei der rekursiven Funktion ist das `round()` unsinnig, denn es wird nur mit ganzen Zahlen gerechnet. Das führt bei grossen Zahlen sogar zu einem Verlust von Rechengenauigkeit, weil Gleitkommazahlen im Gegensatz zum Ganzzahlentyp von Python, in ihrem Wertebereich eingeschränkt sind.
Die iterative Funktion ist unnötig kompliziert. Eine ``while``-Schleife verwendet man wenn man nicht weiss wie oft der Schleifenkörper durchlaufen wird. Wenn man das aber weiss, dann nimmt man eine ``for``-Schleife. Da die Addition kommutativ ist, spielt es auch keine Rolle in welcher Reihenfolge die Terme addiert werden, also muss man nicht von `n` an runter zählen, sondern kann auch bis `n` hoch zählen. Mit `sum()` und einem Generatorausdruck ist das in Python ein Einzeiler:
Als geschlossene Formel sähe das so aus:
Der gute Mann hiess übrigens S
ierpińkski.
Re: Serpinski Teppich
Verfasst: Samstag 21. Januar 2012, 18:01
von theo.puke
Ja stimmt, dankeschön. Ich benutze Python nur als "Taschenrechner" für Funktionen, für die ich keine Allgemeinerung gefunden habe. Also bin ich nicht so vertraut mit Generatorenausdrücke etc.. btw. Das ist mein zweiter Beitrag und sage allen Forenmitgliedern ein herzliches "hallo".
Re: Serpinski Teppich
Verfasst: Donnerstag 26. Januar 2012, 16:27
von Dobi
BlackJack hat geschrieben:Der gute Mann hiess übrigens Sierpińkski.
Fast.

Re: Serpinski Teppich
Verfasst: Donnerstag 26. Januar 2012, 16:46
von theo.puke
@Dobi Nein nach Wikipedia heißt er: Wacław Franciszek Sierpiński , so.
Re: Serpinski Teppich
Verfasst: Donnerstag 26. Januar 2012, 18:48
von Dobi
Das weiß ich. Ich wollte nur lustig sein, weil sich BlackJack beim Korrigieren von dir selber vertippt hat.

Re: Serpinski Teppich
Verfasst: Donnerstag 26. Januar 2012, 21:57
von BlackJack

Wobei ich mich jetzt echt frage wo das `k` herkommt, denn den Namen hatte ich kopiert, gerade um zu vermeiden, dass ich mich vertippe.

Re: Serpinski Teppich
Verfasst: Donnerstag 26. Januar 2012, 21:59
von /me
BlackJack hat geschrieben:
Wobei ich mich jetzt echt frage wo das `k` herkommt, denn den Namen hatte ich kopiert, gerade um zu vermeiden, dass ich mich vertippe.

Das Forum ist in PHP geschrieben. Damit ist doch die schuldige Komponente eindeutig identifiziert?

Re: Serpinski Teppich
Verfasst: Donnerstag 26. Januar 2012, 22:09
von Dobi
Och, ich find BlackJacks Variante eigentlich ganz cool:

Re: Serpinski Teppich
Verfasst: Freitag 27. Januar 2012, 22:17
von theo.puke
Haha. Cooles Bild
Re: Serpinski Teppich
Verfasst: Freitag 27. Januar 2012, 22:31
von Dobi
Kann zwar sein, dass ich den Witz damit kaputt mache, aber weil ich das Gefühl hab', dass er gar nicht angekommen ist: Aus BlackJacks Sierpiń
kski wird Sir Pink Ski, und der Herr auf dem Bild ist der zum Ritter geschlagene
Sir Isaac Newton.

Re: Serpinski Teppich
Verfasst: Freitag 27. Januar 2012, 23:05
von theo.puke
Achso, das is ja noch besser. Ich dachte mir schon, das mit den skiern hab ich kapiert. haha