一般力学系(pyna.dynamics#

pyna.dynamics は広い力学系レイヤーです。意図的に小さく保たれており、 pyna.topo と相互運用できます。

  • callable ODE flow とサンプル trajectory

  • 正準 Hamiltonian 系と可分 Hamiltonian

  • 対ごとの重力/静電 N-body 系

  • Jacobian、固定点残差、Lyapunov スペクトル推定を備えた有限次元写像

  • Ito SDE、Brownian motion、geometric Brownian motion

クラスは state-first の規約を使います。flow は rhs(x, t)、写像は step(x) です。

幾何との統合#

このモジュールは、トロイダル topology と同じ幾何クラスを返します。

  • TimeSeriesSolutionpyna.topo.core.Trajectory です。

  • CallableMap.orbit_geometrypyna.topo.core.Orbit を返します。

  • CallableMap.periodic_orbitpyna.topo.core.PeriodicOrbit を返します。

  • pyna.topo.CoreTubepyna.topo.CoreIslandChain は汎用の有限次元ルートです。 pyna.topo.Tube は後方互換性のためトロイダル特殊化として残ります。

これにより Hamiltonian 系、N-body flow、写像、SDE サンプルパスは、磁力線トポロジーと 同じ Cycle/Tube/IslandChain 語彙を共有できます。

教育用 notebook や拡張の多い workflow では、TopologyWorkflow と低レベルの adapter、builder、bridge、factory helper を扱う 力学系ワークフローと拡張ヘルパー を参照して ください。

連続 Flow#

Hamiltonian 系#

H(q, p, t) またはその勾配を与えられる場合は HamiltonianSystem を使います。 H(q, p) = T(p) + V(q) と velocity-Verlet step には SeparableHamiltonianSystem を使います。

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-body 系#

NBodySystem はフラット化した状態ベクトルを [positions.ravel(), velocities.ravel()] として保存し、構造化配列を pack/unpack する helper を提供します。Newton 重力と静電 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)

写像と局所多様体#

CallableMap は任意の有限次元写像を扱います。fixed_point_eigenspaces は固定点の 安定、不安定、中心固有空間を分類し、局所多様体構成への有用な bridge になります。

確率微分方程式#

SDE レイヤーは Ito 形式 dX = a(X,t) dt + B(X,t) dW を使い、再現可能な研究と教育例の ために決定論的な Euler-Maruyama 実装を提供します。分布推定 workflow については SDEのモンテカルロ分布 を参照してください。

from pyna.dynamics import GeometricBrownianMotion

stock = GeometricBrownianMotion(mu=[0.08], sigma=[0.20])
print(stock.expected_log_growth())

関連する Topology レイヤー#

topology パッケージは抽象的な数学階層と Poincare 機構を保持します。