Różnice między wybraną wersją a wersją aktualną.
Poprzednia rewizja po obu stronachPoprzednia wersjaNowa wersja | Poprzednia wersja | ||
narzedzia:pendulum_py [2025/05/07 15:45] – administrator | narzedzia:pendulum_py [2025/05/16 18:48] (aktualna) – administrator | ||
---|---|---|---|
Linia 1: | Linia 1: | ||
- | ===== Symulator Wahadła Podwójnego ===== | + | ===== PY: Symulator Wahadła Podwójnego ===== |
{{ : | {{ : | ||
- | {{ : | + | |
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:// | ||
- | |||
- | [https:// | ||
=== 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ć, | + | Zanim komputer może cokolwiek zasymulować, |
- | - 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. | + | Zamiast klasycznych sił z II zasady Newtona, Lagrange korzysta z zasad energii. |
$$ | $$ | ||
Linia 60: | Linia 56: | ||
Gdzie: | Gdzie: | ||
- | - \( T \) – energia kinetyczna | + | - $T$ — energia kinetyczna, |
- | - \( V \) – energia potencjalna. | + | - $V$ — energia potencjalna. |
- | Dla układu o współrzędnych uogólnionych | + | Dla układu o współrzędnych uogólnionych |
$$ | $$ | ||
Linia 69: | Linia 65: | ||
$$ | $$ | ||
- | W naszym przypadku | + | W naszym przypadku: |
- | Energię całego | + | |
+ | Energie | ||
+ | |||
+ | - 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 | + | - 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’a, otrzymujemy | + | Podstawiamy do $L = T - V$, a następnie wstawiamy |
- | --- | + | ---- |
=== Metoda Rungego-Kutty 4. rzędu (RK4) === | === Metoda Rungego-Kutty 4. rzędu (RK4) === | ||
- | RK4 to klasyczna metoda numeryczna do rozwiązywania | + | Metoda |
$$ | $$ | ||
Linia 94: | Linia 93: | ||
$$ | $$ | ||
- | Jeśli chcemy | + | Aby znaleźć |
$$ | $$ | ||
- | \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}, | k_2 &= f\left(t_n + \frac{h}{2}, | ||
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 | + | To uśrednienie |
- | RK4 jest kompromisem między | + | |
- | W naszym kodzie | + | W naszym kodzie |
- | --- | + | ---- |
- | === Dlaczego to wszystko | + | === Dlaczego to działa === |
- | Pod spodem mamy: | + | Układ, który modelujemy: |
- | - **nieliniowy** | + | - jest **nieliniowy** (kąty i ich pochodne |
- | - **chaotyczne zachowanie**, czyli ogromną | + | - wykazuje |
- | - **brak zamkniętego | + | - **nie ma rozwiązań analitycznych** — tylko symulacja numeryczna |
- | Dzięki mechanice | + | Mechanika |
- | --- | + | |
+ | ---- | ||
=== Linki dla ciekawskich === | === Linki dla ciekawskich === | ||
- | * [https:// | + | * [[https:// |
- | * [https://en.wikipedia.org/ | + | * [[https://pl.wikipedia.org/ |
- | * [https://pl.wikipedia.org/ | + | * [[https://en.wikipedia.org/ |
- | * [https:// | + | * [[https:// |
- | * * [https:// | + | * [[https:// |
- | * [https:// | + | * [[https:// |
- | * [https:// | + | * [[https:// |
+ | |||
+ | ---- | ||
+ | ==== Kod programu ==== | ||
- | <code python> | + | <code python |
import numpy as np | import numpy as np | ||
import matplotlib.pyplot as plt | import matplotlib.pyplot as plt |