Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws2223:protokoll_14.03

Protokoll 14.03.

geschafft

Nach Reflektion des gestrigen Programms haben wir uns entschieden, zusätzlich zur beziehungsweise an Stelle der Seitenansicht (X-Z-Ebene) eine Draufsicht (X-Y-Ebene) zu visualisieren, die dem näherkommt, was Perrin gesehen haben könnte, das heißt der Hauptunterschied ist die Eigenschaft der Teilchen, aus der beobachteten Zone zu verschwinden oder in ihr aufzutauchen. Das ergibt, wenn man sich beide Arten der Visualisierung gleichzeitig anschaut, interessante Bewegungsmuster. Da diese Beobachtungen sich aber auf eine bestimmte Horizontalschicht mit einer spezifischen Höhe beziehen, war eine bloße Projektion hier nicht mehr ausreichend. Wir mussten dementsprechend die Berechnungsmethoden anpassen, um in den einzelnen Simulationsschritten auch verschiedenformatige Datensätze annehmen zu können. Verbunden haben wir das auch mit dem Ausbau des in den vorigen Protokollen schon erwähnten precompute-Zweigs unserer Simulation, der es uns inzwischen ermöglicht, mit ~2,5 Minuten Rechenzeit 500 Teilchen 500 Schritte lang zu simulieren und dabei sowohl eine der beiden Arten von Ebenendarstellungen und die 3D-Visualisierung gleichzeitig zu animieren. Um Nutzen daraus zu ziehen, haben wir im Weiteren versucht, die Anzahl der in der Horizontalschicht verbrachten Schritte und die Zahl der Austritte zu berechnen und auszugeben, die wir zunächst für die Kennziffern für den Vergleich mit den Perrinschen Experimenten halten:

def update_graph2(num2):
    '''\Ebenenprojektion\:zeichnet die Verschiebung der Position ins Koordinatensystem
    ACHTUNG: funktioniert  nur, wenn vorher auch update_graph1 aufgerufen wurde.'''
    global xlist,ylist,zlist,brown_pos,vanishes, sizes2, colors,plane_graph, in_layer, ent_time, count, layer_time
    layered_xlist = xlist.copy()
    layered_ylist = ylist.copy()
    for index in reversed(range(len(zlist))):
        if index == 0:
            if zlist[index]+ BROWNSCHESTEILCHEN_RADIUS < bot_layer or zlist[index]-BROWNSCHESTEILCHEN_RADIUS > top_layer:
                layered_xlist[index] = None
                layered_ylist[index] = None
        elif zlist[index]+ zlist[index] < bot_layer or zlist[index]- BALL_RADIUS > top_layer:
            layered_xlist[index] = None
            layered_ylist[index] = None
    if (brownsches_teilchen.position[2]+BROWNSCHESTEILCHEN_RADIUS < bot_layer or brownsches_teilchen.position[2]-BROWNSCHESTEILCHEN_RADIUS > top_layer) and in_layer:
        vanishes +=1
        in_layer = False
        layer_time = num2 - ent_time
        count = 0
    if (brownsches_teilchen.position[2]- BROWNSCHESTEILCHEN_RADIUS <= top_layer and brownsches_teilchen.position[2] + BROWNSCHESTEILCHEN_RADIUS >= bot_layer) and count == 0:
        in_layer = True
        ent_time = num2
        count += 1
    # Für Projektion in die x-y-Ebene:
    line2.set_data(brown_pos[:num2,:2].T)
    plane_graph.set_offsets(np.column_stack([layered_xlist, layered_ylist]))
    #plane_graph = ax2.scatter(layered_xlist,layered_ylist,s= sizes2, c =colors)
    title2.set_text('Top-Down Ansicht, Anzahl Schichtaustritte ={}, Schichtzeit ={}'.format(vanishes, layer_time))

Die Funktion für den Ebenen-Plot, die in der Animationsschleife wiederholt aufgerufen wird. Die meisten Variablen wurden bereits außerhalb deklariert, sind in diesem Kontext aber sehr sprechend benannt.
Neben diesem neuen Ansatz haben wir arbeitsteilig auch die VPython-Umstellung sekundär weitergeführt und weitere, in vorherigen Sitzungen erarbeitete Eigenschaften auch auf diese Art umgesetzt, um Hürden von matplotlib (siehe unten) zu umgehen oder aber eine zweite Anschauungsart zu eröffnen.

Offene Fragen, Probleme

Problematisch sind dabei noch einige (vermutlich Syntax-)Fehler, die in einer der lokalen Versionen des Programms auftreten und die wir noch nicht einmal in anderen, älteren Instanzen repliziert kriegen. Allerdings ist diese Version auch die, bei der die meisten anderen (nicht fehlerhaften) Änderungen vorgenommen wurden, so dass es sich als schwierig erwies, den funktionierenden Teil mehrerer Programme zusammenzubringen. Die „Unhandlichkeit“ von matplotlib bezogen auf einige speziellere Anwendungen erwies sich außerdem weiterhin als problematisch, wenngleich über einige der Fehler hinsichtlich ihrer Nicht-Offensichtlichkeit bei der Betrachtung der Simulation vielleicht hinweggesehen werden kann.

stand_14.03._hoehenformel.zip ← Im Wesentlichen hat sich zu gestern nur main_2_precompute.py geändert, an main_1.py wurden geringfügige Änderungen vorgenommen.

ws2223/protokoll_14.03.txt · Zuletzt geändert: 2023/03/14 16:13 von Jakob_Hoffmann