Общая динамика (pyna.dynamics)#
pyna.dynamics - это широкий слой динамических систем. Он намеренно мал и
интероперабелен с pyna.topo:
вызываемые ODE-потоки с выборочными траекториями
канонические гамильтоновы системы и separable Hamiltonians
попарные гравитационные/электростатические системы N-тел
конечномерные отображения с якобианами, невязками неподвижных точек и оценками спектра Ляпунова
SDE Ито, Brownian motion и geometric Brownian motion
Классы используют соглашение state-first: rhs(x, t) для потоков и
step(x) для отображений.
Интеграция с геометрией#
Модуль возвращает те же классы геометрии, что используются тороидальной топологией:
TimeSeriesSolutionявляетсяpyna.topo.core.Trajectory.CallableMap.orbit_geometryвозвращаетpyna.topo.core.Orbit.CallableMap.periodic_orbitвозвращаетpyna.topo.core.PeriodicOrbit.pyna.topo.CoreTubeиpyna.topo.CoreIslandChainявляются общими конечномерными корнями;pyna.topo.Tubeостается тороидальной специализацией для обратной совместимости.
Это позволяет гамильтоновым системам, потокам N-тел, отображениям и выборочным
путям SDE разделять тот же словарь Cycle/Tube/IslandChain, что и
топология магнитных силовых линий.
Для учебных notebooks или workflows с большим количеством расширений см.
Рабочие процессы динамики и средства расширения о TopologyWorkflow и низкоуровневых helpers
adapter, builder, bridge и factory.
Непрерывные потоки#
Гамильтоновы системы#
Используйте HamiltonianSystem, когда можете предоставить H(q, p, t) или
его градиент. Используйте SeparableHamiltonianSystem для
H(q, p) = T(p) + V(q) и шага velocity-Verlet.
import numpy as np
from pyna.dynamics import SeparableHamiltonianSystem
oscillator = SeparableHamiltonianSystem(
kinetic=lambda p, t: 0.5 * np.dot(p, p),
potential=lambda q, t: 0.5 * np.dot(q, q),
grad_kinetic=lambda p, t: p,
grad_potential=lambda q, t: q,
dof=1,
)
x1 = oscillator.step_velocity_verlet(np.array([1.0, 0.0]), dt=0.01)
Системы N-тел#
NBodySystem хранит развернутые векторы состояния как
[positions.ravel(), velocities.ravel()] и предоставляет helpers для упаковки
и распаковки структурированных массивов. Он поддерживает ньютоновскую
гравитацию и электростатические кулоновские взаимодействия.
import numpy as np
from pyna.dynamics import NBodySystem
system = NBodySystem([1.0, 1.0], spatial_dim=2, interaction="gravity")
y0 = system.pack_state(
positions=np.array([[-1.0, 0.0], [1.0, 0.0]]),
velocities=np.zeros((2, 2)),
)
dy = system.vector_field(y0)
Отображения и локальные многообразия#
CallableMap обрабатывает произвольные конечномерные отображения.
fixed_point_eigenspaces классифицирует устойчивые, неустойчивые и
центральные собственные подпространства неподвижной точки и является полезным
bridge к построению локальных многообразий.
Стохастические дифференциальные уравнения#
Слой SDE использует форму Ито dX = a(X,t) dt + B(X,t) dW и детерминированную
реализацию Euler-Maruyama для воспроизводимых исследований и учебных примеров.
Для workflows оценки распределений см. SDE-распределения методом Монте-Карло.
from pyna.dynamics import GeometricBrownianMotion
stock = GeometricBrownianMotion(mu=[0.08], sigma=[0.20])
print(stock.expected_log_growth())
Связанный топологический слой#
Пакет topology хранит абстрактную математическую иерархию и механику Пуанкаре: