Aufgaben

  1. Vektor-Klasse
    Entwerfen Sie ausgehend von dem Beispiel die ThreeVec Klasse.

    Führen Sie zusätzliche sinnvolle Methoden ein, z.B. Länge eines Vektors, Winkel zwischen zwei Vektoren, Skalarprodukt, Vektorprodukt, Ausgabe, Vergleich.

    Anschliessend sollte man diese Vektoren so benutzen können:


    from ThreeVec import ThreeVec
    u =  ThreeVec( 1., 0.5, 2.)
    v =  ThreeVec( 1., 2.5, -1.)
    
    w = u.Add( v)
    t = u.Subtract( v)
    t = t.Scale( 2.)
    print ("Vector w = ", w.x, w.y, w.z)
    print ("Vector t = ", t.x, t.y, t.z)
    r = u.CrossProduct(v)
    x = w.ScalarProduct(v)
    print  (w.Angle(u))
    #
    

    Und in späterer Variante mit Operator Overloading und __str__() Methode:


    from ThreeVec import ThreeVec
    u =  ThreeVec( 1., 0.5, 2.)
    v =  ThreeVec( 1., 2.5, -1.)
    w = u + v
    t = u - v
    t = t * 2.
    print ("Vector w = ", w)
    print ("Vector t = ", t)
    r = u.CrossProduct(v)
    x = w.ScalarProduct(v)
    angle = w.Angle(u)
    #
    

    (Ausgearbeitetes Beispiel: py, html)


  2. Statistik
    Die Klasse StatCalc.py. implementiert einige grundlegende Statistikfunktionen, wie Mittelwert, Standardabweichung, ...
    (a) Legen Sie ein Objekt an stat = StatCalc() und füllen in einer Schleife Zufallszahlen stat.enter(random-number) und bestimmen Mittelwert und Standardabweichung.
    (Zufallszahlen in Python über import random. Funktion random.gauss(0.,1.) liefert normal-verteilte Zufallszahlen, random.random() gleich-verteilte zwischen 0 und 1).

    (b) Erweitern Sie StatCalc.py um Methoden zur Ausgabe von Minimum und Maximum.
    (c) In semester.dat finden Sie die Semesterzahl bis zum Physikdiplom für zufällig ausgewählte Studenten. Die ersten 100 Einträge sind von Studenten der LMU, die restlichen 100 von Studenten der TUM. Lesen Sie die Daten ein und füllen LMU bzw TUM Zahlen jeweils in ein StatCalc Objekt. Sind die Mittelwerte im Rahmen der Schwankungen konsistent ?
    (d) Überlegen Sie wie man das Problem aus (c) (mehrere Statistiken parallel führen) in einer prozeduralen Sprache (Fortran, C) angehen könnte, d.h. ohne Klassen und Objekte, nur mit Arrays und Funktionen.

  3. Vererbung
    Leiten Sie die Lorentz-Vektor Klasse (Vierer-Vektor \ensuremath{ = \; (E, p_x, p_y, p_z) = (E, \vec{p}\,)} ) von der Dreier-Vektor Klasse ab.
    Lorentz-Vektoren sollten als zusätzliche Methoden die Masse berechnen können:

    $\displaystyle M = \sqrt{E^2 - \vec{p}^2}$

    sowie die invariante Masse zweier Lorentzvektoren:

    $\displaystyle M_{inv} = \sqrt{(E_1+E_2)^2 - (\vec{p_1}+\vec{p_2})^2}$

    Benutzung:


    a = LorentzVector(45.0002,0.,0.,45.0)
    b = LorentzVector(45.0002,31.8198,0.,31.8198)
    print ("Angle = " , a.Angle(b))
    print ("Mass a = " , a.Mass())
    print ("Mass b = " , b.Mass())
    print ("Mass a+b = " , b.InvMass(a))
    ...
    

    (Ausgearbeitetes Beispiel: py, html)


  4. Standard–Methoden
    Implementieren Sie die Standard Methoden für die ThreeVec–Klasse, d.h. __str__(self) und __lt__(self, other). Testen SIe es indem Sie eine größere Anzahl von ThreeVectors erzeugen, diese in eine list packen und anschliessend sortieren und ausgeben.


    from ThreeVec import ThreeVec
    import random # random numbers
    
    tvc = [] # empty list
    for i in range(100):
        # create random ThreeVec
        u = ThreeVec( random.gauss(0,1), random.gauss(0,1), random.gauss(0,1))
        tvc.append(u) # store in list
    #
    tvc.sort() # sort ThreeVec-list
    for tv in tvc:
        print (tv.Length(), tv) # output length and Threevec (via __str__())
    
    


  5. Vererbung und Polymorphismus 1:
    Übernommen von http://www.lrz-muenchen.de/ẽbner/C++/Uebung/aufgaben_004.html
    Das source file Particles.py (src, html) enthält ein Grundgerüst zu einer allgemeinen Basisklasse Particle und davon abgeleiteter Klassen.

    (a) Vervollständigen Sie die deklarierten __init__ Funktionen jeder Klasse.

    (b) Erstellen Sie eine Member-Funktion
    move ( dx, dy, dz) ,
    die ein Particle um die angegebenen Werte in den drei Koordinaten verschiebt (also x+dx, y+dy, z+dz).
    Hinweis: Überlegen Sie sich, wo diese Funktion überall deklariert/definiert werden muss, um möglichst wenig Arbeit zu haben. Zum Test löschen Sie die Kommentarzeichen in Schleife 1 in main().

    (Ausgearbeitetes Beispiel: py)


  6. Mondlandung
    Ein Spieleklassiker ist die Mondlandung:

    Erstellen Sie eine Python Klasse für Mondfähre, welche Datenelemente, welche Methoden werden benötigt?

    Lösungsbeispiel nach Buch Coding for Fun mit C++ bzw Python mondlandung.py.

    Modifizieren Sie das Programm, z.B. zufällige Starthöhe, zufällige Variation des Schubfaktors, etc.