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:42] – 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 42: | Linia 36: | ||
Każde kliknięcie to nowy dziwny świat trajektorii. | Każde kliknięcie to nowy dziwny świat trajektorii. | ||
+ | |||
+ | ===== Matematyczne zaplecze: Runge-Kutta i mechanika Lagrange’a ===== | ||
+ | |||
+ | Zanim komputer może cokolwiek zasymulować, | ||
+ | Dla naszego podwójnego wahadła: | ||
+ | |||
+ | - model opisuje **mechanika Lagrange’a**, | ||
+ | - rozwiązanie daje **metoda Rungego-Kutty 4. rzędu (RK4)**. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | === Mechanika Lagrange’a === | ||
+ | |||
+ | Zamiast klasycznych sił z II zasady Newtona, Lagrange korzysta z zasad energii. Wprowadzamy funkcję **Lagrangian**: | ||
+ | |||
+ | $$ | ||
+ | L = T - V | ||
+ | $$ | ||
+ | |||
+ | Gdzie: | ||
+ | - $T$ — energia kinetyczna, | ||
+ | - $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**: | ||
+ | |||
+ | $$ | ||
+ | \frac{d}{dt} \left( \frac{\partial L}{\partial \dot{q}_i} \right) - \frac{\partial L}{\partial q_i} = 0 | ||
+ | $$ | ||
+ | |||
+ | W naszym przypadku: $q_1 = \theta_1$, $q_2 = \theta_2$ — kąty ramion. | ||
+ | |||
+ | Energie układu wyrażają się następująco: | ||
+ | |||
+ | - Energia kinetyczna: | ||
+ | |||
+ | $$ | ||
+ | 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 (w polu grawitacyjnym): | ||
+ | |||
+ | $$ | ||
+ | V = - (m_1 + m_2) g l_1 \cos\theta_1 - m_2 g l_2 \cos\theta_2 | ||
+ | $$ | ||
+ | |||
+ | 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 RK4 pozwala numerycznie rozwiązać układ równań różniczkowych pierwszego rzędu: | ||
+ | |||
+ | $$ | ||
+ | \dot{y} = f(t, y), \quad y(t_0) = y_0 | ||
+ | $$ | ||
+ | |||
+ | Aby znaleźć $y_{n+1}$ w punkcie $t_{n+1} = t_n + h$, obliczamy: | ||
+ | |||
+ | $$ | ||
+ | \begin{aligned} | ||
+ | k_1 &= f(t_n, y_n) \\ | ||
+ | k_2 &= f\left(t_n + \frac{h}{2}, | ||
+ | k_3 &= f\left(t_n + \frac{h}{2}, | ||
+ | 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) | ||
+ | \end{aligned} | ||
+ | $$ | ||
+ | |||
+ | To uśrednienie czterech oszacowań zmian stanu. Daje to dokładność lokalną rzędu $\mathcal{O}(h^5)$ i globalną rzędu $\mathcal{O}(h^4)$. | ||
+ | |||
+ | 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 działa === | ||
+ | |||
+ | Układ, który modelujemy: | ||
+ | - jest **nieliniowy** (kąty i ich pochodne pojawiają się w funkcjach trygonometrycznych), | ||
+ | - wykazuje **chaotyczne zachowanie** (olbrzymia wrażliwość na warunki początkowe), | ||
+ | - **nie ma rozwiązań analitycznych** — tylko symulacja numeryczna pozwala go przeanalizować. | ||
+ | |||
+ | 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:// | + | * [[https:// |
- | * [https://en.wikipedia.org/ | + | * [[https://pl.wikipedia.org/ |
- | * [https://pl.wikipedia.org/ | + | * [[https://en.wikipedia.org/ |
- | * [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 |