Narzędzia użytkownika

Narzędzia witryny


narzedzia:pendulum_py

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Poprzednia rewizja po obu stronachPoprzednia wersja
Nowa wersja
Poprzednia wersja
narzedzia:pendulum_py [2025/05/07 15:45] administratornarzedzia:pendulum_py [2025/05/16 18:48] (aktualna) administrator
Linia 1: Linia 1:
-===== Symulator Wahadła Podwójnego =====+===== PY: Symulator Wahadła Podwójnego =====
  
 {{ :narzedzia:pednulum.gif?500 |Podwójne wahadło w akcji}} {{ :narzedzia:pednulum.gif?500 |Podwójne wahadło w akcji}}
-{{ :narzedzia:double_pendulum.py |}}+
  
 To nie jest zwykłe wahadło — to **wahadło podwójne** (ang. _double pendulum_), jeden z najprostszych układów fizycznych pokazujących zjawisko **deterministycznego chaosu**.   To nie jest zwykłe wahadło — to **wahadło podwójne** (ang. _double pendulum_), jeden z najprostszych układów fizycznych pokazujących zjawisko **deterministycznego chaosu**.  
 Dwa ramiona, dwie masy, grawitacja — a efekt to piękny, nieprzewidywalny taniec, w którym drobna zmiana kąta startowego potrafi całkowicie zmienić przyszły ruch. Dwa ramiona, dwie masy, grawitacja — a efekt to piękny, nieprzewidywalny taniec, w którym drobna zmiana kąta startowego potrafi całkowicie zmienić przyszły ruch.
- 
-Zobacz więcej:  
- 
-[https://pl.wikipedia.org/wiki/Chaos_deterministyczny Chaos deterministyczny] 
- 
-[https://en.wikipedia.org/wiki/Double_pendulum Double Pendulum (Wikipedia)] 
  
 === Co tu się właściwie dzieje? === === Co tu się właściwie dzieje? ===
Linia 23: Linia 17:
 Równania ruchu pochodzą z zasad dynamiki Newtona albo bezpośrednio z mechaniki Lagrange’a: Równania ruchu pochodzą z zasad dynamiki Newtona albo bezpośrednio z mechaniki Lagrange’a:
  
-$$ +%% 
 \begin{align*} \begin{align*}
 \delta &= \theta_2 - \theta_1 \\ \delta &= \theta_2 - \theta_1 \\
Linia 29: Linia 23:
 \ddot{\theta}_2 &= \frac{-(m_1 + m_2) l_1 \omega_1^2 \sin\delta + (m_1 + m_2) g \sin\theta_1 \cos\delta - m_2 l_2 \omega_2^2 \sin\delta \cos\delta - (m_1 + m_2) g \sin\theta_2}{\left( \frac{l_2}{l_1} \right)((m_1 + m_2) l_1 - m_2 l_1 \cos^2\delta)} \ddot{\theta}_2 &= \frac{-(m_1 + m_2) l_1 \omega_1^2 \sin\delta + (m_1 + m_2) g \sin\theta_1 \cos\delta - m_2 l_2 \omega_2^2 \sin\delta \cos\delta - (m_1 + m_2) g \sin\theta_2}{\left( \frac{l_2}{l_1} \right)((m_1 + m_2) l_1 - m_2 l_1 \cos^2\delta)}
 \end{align*} \end{align*}
-$$+%%
  
-Wygląda dziko? Tak właśnie wygląda fizyka nieliniowa :)\\+Wygląda dziko? Tak właśnie wygląda fizyka nieliniowa :)
  
 Ruch symulowany jest numerycznie (metodą Rungego-Kutty) i animowany z pomocą biblioteki **matplotlib** w Pythonie. Kod pozwala interaktywnie zmieniać: Ruch symulowany jest numerycznie (metodą Rungego-Kutty) i animowany z pomocą biblioteki **matplotlib** w Pythonie. Kod pozwala interaktywnie zmieniać:
Linia 45: Linia 39:
 ===== Matematyczne zaplecze: Runge-Kutta i mechanika Lagrange’a ===== ===== Matematyczne zaplecze: Runge-Kutta i mechanika Lagrange’a =====
  
-Zanim komputer może cokolwiek zasymulować, potrzebujemy dwóch rzeczy: **modelu fizycznego** (czyli równań) i **metody ich rozwiązania** (bo ręcznie nikt nie będzie liczył setek tysięcy kroków). Dla naszego podwójnego wahadła:   +Zanim komputer może cokolwiek zasymulować, potrzebujemy dwóch rzeczy: **modelu fizycznego** (czyli równań) i **metody ich rozwiązania**.   
-- model daje nam **mechanika Lagrange’a**, +Dla naszego podwójnego wahadła:
-- rozwiązanie zapewnia **metoda Rungego-Kutty 4. rzędu** (RK4).+
  
----+- model opisuje **mechanika Lagrange’a**, 
 +- rozwiązanie daje **metoda Rungego-Kutty 4. rzędu (RK4)**. 
 + 
 +----
  
 === Mechanika Lagrange’a === === Mechanika Lagrange’a ===
  
-Zamiast klasycznych sił z II zasady Newtona, Lagrange korzysta z zasad energii. Definiujemy tzw. **Lagrangian**:+Zamiast klasycznych sił z II zasady Newtona, Lagrange korzysta z zasad energii. Wprowadzamy funkcję **Lagrangian**:
  
 $$ $$
Linia 60: Linia 56:
  
 Gdzie: Gdzie:
-\( \) – energia kinetyczna układu+$T$ — energia kinetyczna, 
-\( \) – energia potencjalna.+$V$ — energia potencjalna.
  
-Dla układu o współrzędnych uogólnionych \( q_i \), równania ruchu wyprowadza się z tzw. **równań Lagrange’a**:+Dla układu o współrzędnych uogólnionych $q_i$, równania ruchu wyprowadza się z tzw. **równań Lagrange’a**:
  
 $$ $$
Linia 69: Linia 65:
 $$ $$
  
-W naszym przypadku współrzędnymi uogólnionymi są kąty\( q_1 = \theta_1 \)\( q_2 = \theta_2 \)  +W naszym przypadku: $q_1 = \theta_1$$q_2 = \theta_2$ — kąty ramion
-Energię całego układu da się zapisać jako:+ 
 +Energie układu wyrażają się następująco: 
 + 
 +- Energia kinetyczna:
  
-- Energia kinetyczna (oba ramiona, uwzględniając ruch względny): 
 $$ $$
 T = \frac{1}{2} m_1 l_1^2 \dot{\theta}_1^2 + \frac{1}{2} m_2 \left[ l_1^2 \dot{\theta}_1^2 + l_2^2 \dot{\theta}_2^2 + 2 l_1 l_2 \dot{\theta}_1 \dot{\theta}_2 \cos(\theta_1 - \theta_2) \right] T = \frac{1}{2} m_1 l_1^2 \dot{\theta}_1^2 + \frac{1}{2} m_2 \left[ l_1^2 \dot{\theta}_1^2 + l_2^2 \dot{\theta}_2^2 + 2 l_1 l_2 \dot{\theta}_1 \dot{\theta}_2 \cos(\theta_1 - \theta_2) \right]
 $$ $$
  
-- Energia potencjalna (grawitacja działa dół):+- Energia potencjalna (w polu grawitacyjnym): 
 $$ $$
 V = - (m_1 + m_2) g l_1 \cos\theta_1 - m_2 g l_2 \cos\theta_2 V = - (m_1 + m_2) g l_1 \cos\theta_1 - m_2 g l_2 \cos\theta_2
 $$ $$
  
-Wstawiając \( L = T - V \) do równań Lagrange’aotrzymujemy dwie nieliniowe równania różniczkowe drugiego rzędu, które później przekształcamy do układu czterech równań pierwszego rzędu (bo tak działa solver numeryczny).+Podstawiamy do $L = T - V$, a następnie wstawiamy do równań Lagrange’a. W efekcie otrzymujemy dwa nieliniowe równania różniczkowe drugiego rzędu, które potem przekształcamy do układu równań pierwszego rzędu.
  
----+----
  
 === Metoda Rungego-Kutty 4. rzędu (RK4) === === Metoda Rungego-Kutty 4. rzędu (RK4) ===
  
-RK4 to klasyczna metoda numeryczna do rozwiązywania układów równań różniczkowych pierwszego rzędu postaci:+Metoda RK4 pozwala numerycznie rozwiązać układ równań różniczkowych pierwszego rzędu:
  
 $$ $$
Linia 94: Linia 93:
 $$ $$
  
-Jeśli chcemy znaleźć wartość \( y_{n+1} \) w punkcie \( t_{n+1} = t_n + h \)to robimy cztery obliczenia pośrednie:+Aby znaleźć $y_{n+1}w punkcie $t_{n+1} = t_n + h$obliczamy:
  
 $$ $$
-\begin{align*}+\begin{aligned}
 k_1 &= f(t_n, y_n) \\ k_1 &= f(t_n, y_n) \\
 k_2 &= f\left(t_n + \frac{h}{2}, y_n + \frac{h}{2}k_1\right) \\ k_2 &= f\left(t_n + \frac{h}{2}, y_n + \frac{h}{2}k_1\right) \\
Linia 103: Linia 102:
 k_4 &= f(t_n + h, y_n + h k_3) \\ k_4 &= f(t_n + h, y_n + h k_3) \\
 y_{n+1} &= y_n + \frac{h}{6}(k_1 + 2k_2 + 2k_3 + k_4) y_{n+1} &= y_n + \frac{h}{6}(k_1 + 2k_2 + 2k_3 + k_4)
-\end{align*}+\end{aligned}
 $$ $$
  
-To coś jak „inteligentne uśrednienie” kilku przybliżeń kierunku w którym idziemy  +To uśrednienie czterech oszacowań zmian stanuDaje to dokładność lokalną rzędu $\mathcal{O}(h^5)$ i globalną rzędu $\mathcal{O}(h^4)$.
-RK4 jest kompromisem między dokładnością a szybkością — błąd lokalny to \( \mathcal{O}(h^5) \), a globalny \( \mathcal{O}(h^4) \).+
  
-W naszym kodzie zastosowaliśmy bibliotekę `solve_ivp()` z `scipy`, która pod spodem domyślnie używa **RK45** — adaptacyjną wersję RK4 z kontrolą błędu i automatycznym dobieraniem kroku.+W naszym kodzie użyto `solve_ivp()` z biblioteki `scipy`, która domyślnie używa wersji **RK45** — adaptacyjnej metody z kontrolą błędu i dynamicznym doborem kroku.
  
----+----
  
-=== Dlaczego to wszystko działa ===+=== Dlaczego to działa ===
  
-Pod spodem mamy+Układ, który modelujemy
-- **nieliniowy** układ dynamiczny (współrzędne pojawiają się wewnątrz trygonometrii), +jest **nieliniowy** (kąty i ich pochodne pojawiają się w funkcjach trygonometrycznych), 
-- **chaotyczne zachowanie**, czyli ogromną wrażliwość na warunki początkowe, +wykazuje **chaotyczne zachowanie** (olbrzymia wrażliwość na warunki początkowe)
-- **brak zamkniętego rozwiązania analitycznego** — potrzebna jest symulacja numeryczna.+- **nie ma rozwiązań analitycznych** — tylko symulacja numeryczna pozwala go przeanalizować.
  
-Dzięki mechanice Lagrange’a możemy spisać równania tak, by szanowały zasady zachowania energii i symetrii, a Runge-Kutta pozwala je dokładnie i stabilnie rozwiązać.+Mechanika Lagrange’a pozwala zbudować poprawny fizycznie model oparty o zasady zachowania, a metoda Rungego-Kutty pozwala ten model **skutecznie i dokładnie zasymulować** na komputerze.
  
----+ 
 +----
  
 === Linki dla ciekawskich === === Linki dla ciekawskich ===
-  * [https://en.wikipedia.org/wiki/Lagrangian_mechanics Mechanika Lagrange’a (EN)] +  * [[https://en.wikipedia.org/wiki/Lagrangian_mechanicsMechanika Lagrange’a (EN)]
-  * [https://en.wikipedia.org/wiki/Double_pendulum#Equations_of_motion Równania ruchu dla podwójnego wahadła (EN)+  * [[https://pl.wikipedia.org/wiki/Chaos_deterministyczny| Wikipedia: Chaos deterministyczny]
-  * [https://pl.wikipedia.org/wiki/Wahad%C5%82o_dwuprzegubowe Wahadło dwuprzegubowe (PL)+  * [[https://en.wikipedia.org/wiki/Double_pendulum| Wikipedia: Double Pendulum]
-  * [https://myphysicslab.com/pendulum/double-pendulum-en.html Interaktywny model online (MyPhysicsLab)] +  * [[https://myphysicslab.com/pendulum/double-pendulum-en.htmlInteraktywny model online (MyPhysicsLab)]
-  *   * [https://www.myphysicslab.com/ MyPhysicsLab — symulacje fizyczne online] +  * [[https://www.myphysicslab.com/MyPhysicsLab — symulacje fizyczne online]
-  * [https://demonstrations.wolfram.com/topic.html?topic=Classical+Mechanics Wolfram Demonstrations: Classical Mechanics] +  * [[https://demonstrations.wolfram.com/topic.html?topic=Classical+MechanicsWolfram Demonstrations: Classical Mechanics]
-  * [https://people.maths.ox.ac.uk/suli/numerical_analysis/ Lecture notes: Numerical Analysis, Oxford]+  * [[https://people.maths.ox.ac.uk/suli/numerical_analysis/Lecture notes: Numerical Analysis, Oxford]
 + 
 +----
  
 +==== Kod programu ====
  
-<code python>+<code python double_pendulum.py>
 import numpy as np import numpy as np
 import matplotlib.pyplot as plt import matplotlib.pyplot as plt
narzedzia/pendulum_py.1746625544.txt.gz · ostatnio zmienione: 2025/05/07 15:45 przez administrator