________________________________________________________________________________
Inhalt....: Positionsfindung von Geburtsdaten in PI
Kategorie.: Arbeitsblatt
Mathematik: Zahlentheorie, Analysis, Numerik
MuPAD.....: 3.0.0
Datum.....: 2002-12-23
Autoren...: Roman Seidel <lop.invitor@gmx.de>
Funktionen: expr2text, read, write, stringlib::contains, save
________________________________________________________________________________
Positionsfindung von Geburtsdaten in PI oder
die Frage: "Ist PI normal?"
Wir wollen MuPAD benutzen, um in der Zahl PI nach Geburtsdaten zu suchen. Über allem
steht die bisher unbewiesene Vermutung, dass PI eine sogenannte normale Zahl ist. Diese
Vermutung besagt, dass jede nur erdenkliche Ziffernfolge irgendwo und irgendwann in
den Nachkommastellen der Zahl PI auftauchen soll. Ist diese Vermutung tatsächlich korrekt,
so sollte es leicht sein, z.B. seinen Geburtstag und Geburtstmonat in PI zu finden.
Um PI nicht bei jeder Suche neu generieren zu müssen, wird PI mit einer
gewünschten Länge generiert und in einer Datei gespeichert. Legen
Sie sich z.B. einen Ordner "tmp" auf dem Datenträger "c:/" an, so kann
die folgende Prozedur dazu genutzt werden, um PI auf eine vorgesehene
Anzahl von Nachkommastellen mit MuPAD zu berechnen und anschließend
automatisch in der Textdatei "PI.txt" im genannten Ordner zu speichern.
(Man kann hier natürlich auch einen anderen Pfad und einen beliebigen
Ordner wählen, indem man die Variable dateiName entsprechend anders
definiert).
dateiName:="c:/tmp/PI.txt":
piGenerieren:= proc(anzahl, dateiName)
save piText;
begin
DIGITS:= anzahl;
piText:= float(PI);
piText:= stringlib::remove(expr2text(piText),".");
write(Text, dateiName,piText);
delete DIGITS;
print(Unquoted, "PI wurde generiert und gespeichert.");
return();
end_proc:
Nachdem PI mindestens einmal generiert wurde, kann PI aus der oben
angegebenen Datei mit Hilfe der folgenden Prozedur geladen werden:
piLaden:= proc(dateiName)
save piText;
begin
piText:= read(dateiName);
print(Unquoted, "Pi wurde geladen.");
return(piText);
end_proc:
Nachdem PI geladen wurde, wird nun mit Hilfe der Funktion stringlib::contains
in PI nach gewünschten Geburtsdaten gesucht werden.
geburtstag:= proc(datum, piText)
local ergebnis;
begin
ergebnis:= stringlib::contains(piText,datum,Index);
if ergebnis <> FALSE then
stringlib::contains(piText,datum,Index);
else
print(Unquoted, "Nicht enthalten");
end_if;
end_proc:
Hier sind einige Prozeduraufrufe als Beispiel: Zunächst generieren wir PI
auf 100 000 Nachkommastellen:
piGenerieren(100000, dateiName)
PI wurde generiert und gespeichert.
Jetzt laden wir PI in MuPAD (um es nicht jedesmal erneut berechnen
zu müssen - das spart eine Menge Zeit ;-)
piText:=piLaden(dateiName):
Pi wurde geladen.
Nun suchen wir einige Geburtsdaten in der Ziffernfolge:
geburtstag("1902", piText)
![]()
d.h. das Datum 19.02 taucht in PI zum ersten Mal an der Stelle 9846 auf.
geburtstag("0905", piText)
![]()
d.h. der 09.05 taucht zum ersten Mal an der Stelle 23683 auf.
geburtstag("2307", piText)
![]()
Dieser Geburtstag ist wohl nicht zu schlagen, denn er ist die erstmögliche
Ziffernkombination in PI, die tatsächlich einem Geburtstag entsprechen
kann. Überzeugen Sie sich selbst!
_______________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen finden Sie in der Buchreihe Mathematik 1 x anders. In dieser Reihe
wird eine Vielzahl unterschiedlichster mathematischer Probleme mit MuPAD gelöst. Die
Bücher können unter www.schule.mupad.de/literatur kostenfrei kopiert werden.
2. Weitere Notebooks zu Näherungsverfahren, mit denen man die Zahl PI berechnen kann, finden sich
unter www.schule.mupad.de/material zum freien Download.
3. Eine genauere Diskussion des Verfahrens von Archimedes findet sich auch in dem Notebook
"Berechnung_von_PI.mnb", das ebenfalls unter www.schule.mupad.de/material zum Download bereitsteht.
_______________________________________________________________________________