Sage/Python (Einführung in computerorientierte Mathematik)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MatheErsti
User
Beiträge: 4
Registriert: Mittwoch 4. Dezember 2013, 17:06

Hallo, ich habe letzte Woche ein Aufgabenblatt in meinem Modul "Einführung in die computerorientierte Mathematik" erhalten und damit schon einige Stunden zugebracht. Die Aufgaben 1 und 2 konnte ich in Sage umsetzen, jedoch fehlt mir für die Aufgabe 3 und 4 leider jeglicher Ansatz wie man das in Sage umsetzen könnte.

Ich habe hier die Aufgaben hochgeladen: http://postimg.org/image/52ao1wfwz/full/

Bei der Aufgabe 3 ist mir immerhin schon klar wie der "Pseudo-Code" aussehen soll. Es geht darum, dass man ein Dreckeck hat und einen beliebigen Punkt X_1 in der Ebene, der nicht auf einem der Eckpunkte des Dreiecks liegt. Nun soll man einen der drei Eckpunkte zufällig auswählen und den Abstand zwischen X_1 und dem ausgewählten Eckpunkt ermitteln. Genau auf der Hälfte dieser Strecke soll nun X_2 liegen. Nun wird wieder zufällig ein Punkt des Dreiecks ausgewählt und der Abstand zwischen dem Eckpunkt und X_2 bestimmt. X_3 liegt genau auf der Hälfte zwischen X_2 und dem Eckpunkt. Dieser Vorgang soll 1000 Mal wiederholt werden und anschließend sollen in ein Koordinatensystem das Dreieick samt der 1000 Punkte geplottet werden.

Meine bisherigen Ideen zur Umsetzung:
Aufgrund der vielen Schritte ist die Benutzung einer Schleife sinnvoll. Leider würde Sage 1000 Koordinatensysteme mit jeweils einem Punkt zeichnen, wenn in der Schleife ein Plot Befehl wäre, weshalb es sinnvoller ist, die Punkte irgendwie "zu sammeln" und erst anschließend samt dem Dreieck zu plotten.

Leider fehlt mir jeglicher Ansatz dafür wie eine solche Schleife aussehen könnte. Das Plotten eines Dreiecks habe ich hinbekommen.

Für die Aufgabe 4 habe ich leider keinen Ansatz, da ich den Binomialkoeffizienten bisher immer für eine feste Größe gehalten habe und ich nicht genau weiß inwiefern er sich durch die Fibonacci-Zahlen verändert.

Ich hoffe ihr könnt mir weiterhelfen!

Gruß MatheErsti
BlackJack

@MatheErsti: Wie man Punkte „sammelt” steht doch im Hinweis zu der Aufgabe. Man kann sie mit dem ``+``-Operator addieren um ein Grafikobjekt zu erhalten welches beide Punkte enthält. Dann muss man nur noch den Gedankensprung machen, dass man Grafikobjekte allgemein wahrscheinlich mit ``+`` zu einem neuen, erweiterten Grafikobjekt zusammenfügen kann. Oder man schaut einfach mal in die Dokumentation was für Argumente man point() noch so geben kann und sieht, dass man auch eine Liste mit Punktkoordinaten übergeben kann.
MatheErsti
User
Beiträge: 4
Registriert: Mittwoch 4. Dezember 2013, 17:06

Vielen Dank für deine Antwort.

Ja, dass ich mehrere Punkte (oder auch Linien) mit der Verknüpfung "+" in ein Koordinatensystem plotten lassen kann, habe ich schon benutzt, um das Dreieck zeichnen zu lassen. Mein Problem liegt hauptsächlich darin, dass ich nicht weiß, wie ich die von dir erwähnte Liste von Punkten anlege. Das müsste ja irgendwie als Schleife realisiert werden, da jeder Punkt ja von seinem Vorgänger abhängt. Könntest du mir einen Tipp geben, wie diese Schleife aussehen müsste?
BlackJack

@MatheErsti: Welches Python-Tutorial hast Du denn schon durchgearbeitet? Das sind nämlich sehr grundlegende Fragen die man nach einem Tutorial eigentlich können sollte. In der Python-Dokumentation befindet sich eines das man IMHO mal gemacht haben sollte. Absoluten Programmieranfängern wird zum Einstieg oft Learn Python The Hard Way empfohlen. (Nicht vom Namen irritieren lassen. :-)) Der Abschnitt „Programming” im Sage-Tutorial ist ziemlich knapp und oberflächlich gehalten. Das reicht IMHO nur wenn man schon programmieren kann und nur auf Sage umsteigt von einem der anderen Systeme.
BlackJack

@MatheErsti: Habe nun ein wenig mit dem Sagenotebook gespielt. Ist ja schick. Nur dass man das nicht statisch exportieren kann, ausser die Druckansicht im Browser (in eine Datei) zu drucken finde ich doof. Das scheint ein viel gefragtes Feature zu sein.

Und Überschriften und Fliesstext einfügen wäre nett. Das gibt es in anderen Systemen dieser Art. Vielleicht habe ich es auch nur noch nicht gefunden.

Egal — zurück zum Thema: Ich habe den Plot für die Aufgabe 3 jetzt mal gemacht und mir erst mal mit der Hand vor die Stirn geklatscht, dass ich nicht schon beim lesen des Algorithmus gemerkt habe was dabei heraus kommt. Das war wohl zu offensichtlich. :oops: Und ich denke mal ganz stark Du sollst *kein* Dreieck aus Linien einzeichnen, denn das ist unnötig, beziehungsweise stört sogar.

Was ich noch herausgefunden habe: `point()` nimmt auch generell iterierbare Objekte mit ”punktähnlichen” Elementen. Man muss also weder eine Liste mit den Punktdaten erstellen wenn man einen Iterator/Generator hat, noch müssen die Elemente Tupel oder Listen mit Koordinaten sein, sondern können auch andere Datentypen sein die als Sequenzen der Länge 2 verwendet werden können. Letzteres als Tipp falls Du noch nicht weisst oder herausgefunden hast wie man sich die Rechnung vereinfachen kann: Es gibt einen Datentyp der dem „Ding” entspricht mit dem man auch in der Geometrie rechnen würde.

Und man braucht `show()` nicht wenn man das Grafikobjekt mit den Punkten nicht an einen Namen bindet, sondern den `point()`-Aufruf einfach so als letzte Anweisung in der Zelle schreibt. Dann wird das Grafikobjekt automatisch als Grafik angezeigt.
MatheErsti
User
Beiträge: 4
Registriert: Mittwoch 4. Dezember 2013, 17:06

Vielen Dank, dass du dir so eine Mühe gibst! :D

Die Aufgabe 3 konnte ich nun lösen!
BlackJack

Bei mir kommt so etwas hier heraus:
Bild
Mit neun Zeilen Code (Kommentare nicht mitgerechnet).
MatheErsti
User
Beiträge: 4
Registriert: Mittwoch 4. Dezember 2013, 17:06

Meins sieht nun so aus: (10000 Iterationen)

http://s1.directupload.net/file/d/3465/8t75nl8t_jpg.htm
Antworten