Dynamique générale (pyna.dynamics)#
pyna.dynamics est la couche large des systèmes dynamiques. Elle est
volontairement compacte et interoperable avec pyna.topo :
flots ODE appelables avec trajectoires échantillonnées
systèmes hamiltoniens canoniques et hamiltoniens separables
systèmes à N corps gravitationnels/electrostatiques par paires
cartes de dimension finie avec jacobiens, residus de points fixes et estimations du spectre de Lyapunov
SDE d’Ito, mouvement brownien et mouvement brownien géométrique
Les classes suivent une convention etat-d’abord : rhs(x, t) pour les flots
et step(x) pour les cartes.
Integration géométrique#
Le module renvoie les memes classes de géométrie que celles utilisées par la topologie toroidale :
TimeSeriesSolutionest unepyna.topo.core.Trajectory.CallableMap.orbit_geometryrenvoiepyna.topo.core.Orbit.CallableMap.periodic_orbitrenvoiepyna.topo.core.PeriodicOrbit.pyna.topo.CoreTubeetpyna.topo.CoreIslandChainsont les racines generiques de dimension finie ;pyna.topo.Tubereste la spécialisation toroïdale pour compatibilité ascendante.
Ainsi les systèmes hamiltoniens, flots à N corps, cartes et chemins
échantillonnés de SDE partagent le même vocabulaire
Cycle/Tube/IslandChain que la topologie des lignes de champ
magnétique.
Pour les notebooks d’enseignement ou les workflows riches en extensions, voir
Workflows de dynamique et auxiliaires d’extension pour TopologyWorkflow et les auxiliaires
adaptateur, builder, bridge et factory de plus bas niveau.
Flots continus#
Systemes hamiltoniens#
Utilisez HamiltonianSystem lorsque vous pouvez fournir H(q, p, t) ou
son gradient. Utilisez SeparableHamiltonianSystem pour
H(q, p) = T(p) + V(q) et l’integration 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)
Systemes à N corps#
NBodySystem stocke les vecteurs d’etat aplatis sous la forme
[positions.ravel(), velocities.ravel()] et fournit des auxiliaires pour
empaqueter et depaqueter des tableaux structures. Il prend en charge la gravite
newtonienne et les interactions electrostatiques de Coulomb.
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)
Cartes et variétés locales#
CallableMap gere des cartes arbitraires de dimension finie.
fixed_point_eigenspaces classe les espaces propres stable, instable et
centre d’un point fixe ; c’est un bridge utile vers la construction de variétés
locales.
Équations différentielles stochastiques#
La couche SDE utilise la forme d’Ito dX = a(X,t) dt + B(X,t) dW et une
implementation deterministe d’Euler-Maruyama pour la recherche reproductible et
les exemples pedagogiques. Pour les workflows d’estimation de distribution,
voir Distributions SDE par Monte Carlo.
from pyna.dynamics import GeometricBrownianMotion
stock = GeometricBrownianMotion(mu=[0.08], sigma=[0.20])
print(stock.expected_log_growth())
Couche topologique associee#
Le paquet de topologie conserve la hierarchie mathématique abstraite et la mecanique de Poincaré :