Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws2223:protokolle

Protokolle

07.03.2023

Geschafft

Wir haben uns für eine Projektidee entschieden. Das Projekt befasst sich mit dem Einfluss der Temperatur auf die Brownsche Bewegung. Als ersten Schritt wollen wir die Temperatur als konstanten Faktor angeben und daraus die Anfangsgeschwindigkeit der einzelnen Teilchen berechnen und implementieren. Perspektivisch soll die Änderung der Temperatur, z.B durch einen Schieberegler, ebenfalls noch eine Rolle spielen.

offene Fragen/Probleme

Wir müssen die elastischen Stöße der einzelnen Teilchen noch korrekt in Python implementieren. Der Einfluss der Temperatur muss noch in Python implementiert werden. Wir wollen noch die Geschwindigkeitsverteilung visualisieren(Runden). Es wurde eine vorläufige Version mit Hilfe von Turtle angefertigt, welche wir als Basis verwenden werden, um eine Version mit Pygame zu schreiben.

Quellen und Dateien

brownturtle.py.zip

13.03.2023

Geschafft

Wir haben uns für ein zur Visualisierung verwendetes Paket entschieden: Pygame. Wir haben das Programm in Pygame umgeschrieben. Wir haben uns in die grundsätzliche Logik von Pygame eingearbeitet. Wir haben uns noch die Idee erschlossen, dass man einzelnen Wänden eine gewisse Wärmeenergie zuordnen kann und dies in der borderCollision Funktion implementieren kann.

offene Fragen/Probleme

Eine heute entstandene Frage ist, ob und wie wir die Proportionalität der Temperatur und Geschwindigkeit in die Python-Simulation einbauen können. Die für die Zeit und Geschwindigkeit verwendeten Beträge haben, sind andere als bei der Brownschen Bewegung in der Natur vorkommen. Fürs Erste haben wir uns entschieden, die Proportionalität ohne den Faktor k_B (Boltzmann-Konstante) in Betracht zu ziehen. Die Maßstäbe der Temperatur und der Geschwindigkeit, sowie der Masse werden in der Simulation andere als in der Realität sein. Wir werden uns noch in einen Artikel von Max Seddig einlesen, welcher sich mit dem Einfluss von Temperatur auf die Brownsche Bewegung befasst. Es stellt sich die Frage, wie man das „Ineinander Klemmen“ mancher Teilchen verhindert. Erster Ansatz könnte sein eine move_debug Funktion für den Aufruf in der der handle_colision Funktion zu implementieren.

Quellen und Dateien

brown_pygame.py.zip

14.03.2023

Geschafft

Wir haben heute in unser Pygame Programm die Stöße der Teilchen Implementiert. Wir haben als Hauptursache des „Ineinander Klemmen“ mancher Teilchen als Ursache festgestellt, dass die betroffenen Teilchen meist in einander erzeugt wurden. Wir haben eine for-Schleifen Konstruktion geschrieben, bei der vor dem Aufruf der Main-Funktion für jedes Teilchen Paar überprüft wird, ob sie ineinander erzeugt wurden und wenn dies der Fall war auch entsprechend verschoben wurden.

  for b1 in balls:
      for i in range(balls.index(ball) + 1, len(balls)):
          sv_x = balls[i].x - b1.x
          sv_y = balls[i].y - b1.y
          distance = np.sqrt(sv_x**2 + sv_y**2)
          distance_soll = b1.radius + balls[i].radius
              
          if distance < distance_soll:
              while distance < distance_soll:
                  b1.x += sv_x  
                  b1.y += sv_y
                  

Nach der Implementierung dieser Konstruktion hat sich zwar ein Fester geöffnet, welches geöffnet blieb, in diesem Fenster ist nichts passiert; Es wurden keine Teilchen initialisiert. War haben uns der Implementierung der Wärmeenergie gewisser Wände angenommen. Dabei haben wir die border_colision-Funktion so abgeändert, dass die SPEED-Faktoren der mit den bestimmten Wänden stoßenden Teilchen um 0,5 erhöht wurde, so dass ein fester Betrag auf die Geschwindigkeit dieser Teilchen addiert wird und der Geschwindigkeitszuwachs nicht von der Ursprungsgeschwindigkeit der Teilchen abhängt. Diese Implementierung funktioniert soweit. Wir haben angefangen die Geschwindigkeitsverteilung zu implementieren, diese soll nach beenden der Simulation mit mathplotlib geplottet werden.

offene Fragen/Probleme

Das in Ineinanderhängen der Teilchen wäre immer noch zu beheben. Es ist noch geplant einen/mehrere Schieberegler zu implementieren, welche die Wärmeenergie der einzelnen Wänden regeln. Manchmal klappt die Kollision von 2 Teilchen noch nicht ganz richtig, wofür wir aber bis jetzt keine Erklärung haben. Außerdem wird noch kein Balkendiagramm, weshalb wir uns noch etwas mehr mit matplotlib auseinandersetzen müssen.

Quellen und Dateien

brown_pygame1.py.zip

15.03.2023

Geschafft

Wir haben uns von der Idee eines Schiebereglers verabschiedet. Wir haben die Geschwindigkeitsaddition in der border_colision implementier und haben den SPEED-Faktor wieder konstant gelassen. Stattdessen haben wir im Falle einer Kollision eines Teilchens mit der entsprechenden Wand den Betrag seines Vektors berechnet und auf diesen einen festen Betrag addiert, daraus ergibt sich der Betrag der neuen Geschwindigkeitsvektor. Das Verhältnis von x und y-Komponente ist vor und nach dem Stoß gleich. Der Betrag des neuen V-Vektors zum Quadrat ist gleich x nach dem Stoß zum Quadrat plus y nach dem Stoß zum Quadrat. Für y nach dem Stoß zum Quadrat kann man, da das Verhältnis x/y gleich bleibt, x nach dem Stoß zum Quadrat geteilt durch das Verhältnis zum Quadrat substituieren. Diese Formel kann man nach x nach den Stoß umstellen. Dann kann man aus x nach dem Stoß geteilt durch das Verhältnis y nach dem Stoß berechnen.

   def borderCollision(self):
      if self.x >= WIDTH - self.radius:
        self.x = WIDTH - self.radius
        self.vxy[0] *= -1
      elif self.x <= self.radius:
        self.x = self.radius
        self.vxy[0] *= -1
      if self.y >= HEIGHT - self.radius:
        self.y = HEIGHT - self.radius
        self.vxy[1] *= -1
      elif self.y <= self.radius:
        self.y = self.radius
        self.vxy[1] *= -1
        v_add = 0.5
        betrag = np.sqrt(self.vxy[0]**2 + self.vxy[1]**2)
        betrag_neu = betrag + v_add
        verhaeltnis = self.vxy[0] / self.vxy[1]
        if self.vxy[0] > 0:
            self.vxy[0] = np.sqrt(((verhaeltnis**2) * (betrag_neu**2)) / (verhaeltnis**2 +1))
            self.vxy[1] = self.vxy[0] / verhaeltnis
        elif self.vxy[0] < 0:
           self.vxy[0] = -np.sqrt(((verhaeltnis**2) * (betrag_neu**2)) / (verhaeltnis**2 +1))
           self.vxy[1] = self.vxy[0] / verhaeltnis
           

Ohne dass uns der Grund bekannt ist hängen die Teilchen jetzt weniger häufig ineinander. Als einer der letzten Schritte haben wir die Geschwindigkeitsverteilung implementiert. Dabei wird nach schließen des Pygmae Fensters die Geschwindigkeit jedes einzelnen Teilchens erfasst und mit mathplotlib die Häufigkeiten der Geschwindigkeiten über diesen als Balkendiagramm geplottet, dabei gab es noch Probleme. Wir haben am Ende des Tages es geschafft die Probleme zu beheben.

offene Fragen/Probleme

Was nicht mehr verwirklicht wird, aber dennoch interessant wäre, ist ein Feature, dass man die Wärmestrahlung der erhitzten Wand implementiert. Ebenfalls gibt es noch Probleme bei der Geschwindigkeitsverteilungserfassung und der Darstellung dieser.

Quellen und Dateien

brown_pygame3.py.zip

16.03.2023

Geschafft

Die Geschwindigkeitsverteilung wird jetzt als Graph geplottet und weist Ähnlichkeit zur Maxwell/Boltzmann-Verteilung. Wir haben eine Präsentation erstellt, welche unser Projekt erklärt und reflektiert und die Präsentation am Ende des Tages gehalten.

offene Fragen/Probleme

Wenn man den v_add Faktor, also den Faktor welcher auf den Vektor der Geschwindigkeit eines Teilchen im Falle einer Kollision von diesen mit der erhitzten Wand addiert wird, zu hoch einstellt, verschwinden die Teilchen nach relativ kurzer Zeit aus dem Teilchenbad, was nicht der Realität entspricht. Wir hätten noch den Bewegungsverlauf des Brownschen Teilchens visualisieren wollen und die mittlere Verschiebung von diesem berechnen wollen, jedoch blieb uns dafür keine Zeit mehr.

Quellen und Dateien

ws2223/protokolle.txt · Zuletzt geändert: 2023/04/05 14:17 von max.liebscher