Notabot & SteelQuasar
ΠΠΎΡΠ°, Ρ ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΠ ΡΠΎΠ±ΡΠ°Π», ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ ΠΊΠΎΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΡΡΠΎΡΠ° ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΉ. Π₯ΠΎΡΠ΅ΡΡ ΠΏΠΎΡΠ»ΡΡΠ°ΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΈ, ΠΌΠΎΠΆΠ΅Ρ, ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ-ΡΠΈΡΠΊΠ°ΠΌΠΈ?
ΠΡΠΈΠ²Π΅Ρ, Π·Π²ΡΡΠΈΡ ΠΊΡΡΡΠΎ! ΠΠ»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΎΠ±Π»ΠΎΠΌΠΊΠΎΠ² ΡΠ΅Π±Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅Π±Π΅ΡΠ½ΡΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΡ Ρ ΠΏΡΠΎΡΡΠΎΠΉ Π΄Π²ΡΡ
ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΏΠ»ΡΡ Π²ΠΎΠ·ΠΌΡΡΠ΅Π½ΠΈΡ Π½Π° Π°ΡΠΌΠΎΡΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠΎΠΏΡΠΎΡΠΈΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ»Π½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·Π»ΡΡΠ΅Π½ΠΈΡ. Π₯ΠΎΡΠΎΡΠ΅ΠΉ ΠΎΡΠΏΡΠ°Π²Π½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ Π±ΡΠ΄Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠΏΠ°Π³Π°ΡΠΎΡ ΠΊΠ΅ΠΏΠ»Π΅ΡΠΎΠ²ΠΎΠΉ ΠΎΡΠ±ΠΈΡΡ Π½Π° Python, Π° Π·Π°ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Ρ ΡΠΈΠ»ΡΡΡ ΠΠ°Π»ΠΌΠ°Π½Π° Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΡΠ²ΠΎΠΈΡ
Π΄Π°ΡΡΠΈΠΊΠΎΠ². ΠΠΎΡ ΡΠ΅Π±Π΅ Π½Π°Π±ΡΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡ ΠΌΠΎΠΆΠ΅ΡΡ ΠΏΠΎΠ΄ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ:
```python
import numpy as np
# ΠΠΎΠ½ΡΡΠ°Π½ΡΡ
MU = 398600.4418 # ΠΡΠ°Π²ΠΈΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΠ΅ΠΌΠ»ΠΈ, ΠΊΠΌ^3/Ρ^2
def keplerian_propagate(r0, v0, dt):
# r0, v0 Π² ΠΊΠΌ ΠΈ ΠΊΠΌ/Ρ, dt Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
r = np.array(r0)
v = np.array(v0)
# ΠΡΡΠΈΡΠ»ΠΈ ΠΎΡΠ±ΠΈΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ· r0 ΠΈ v0 (ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄)
a, e, i, Ξ©, Ο, Ξ½ = elements_from_state(r, v)
# ΠΡΠΎΠΏΠ°Π³ΠΈΡΡΠΉ ΠΈΡΡΠΈΠ½Π½ΡΡ Π°Π½ΠΎΠΌΠ°Π»ΠΈΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΠ΅ΠΏΠ»Π΅ΡΠ° (ΡΠΏΡΠΎΡΠ΅Π½ΠΎ Π·Π΄Π΅ΡΡ)
n = np.sqrt(MU / a**3)
M = mean_anomaly(a, e, Ξ½) + n * dt
Ξ½_new = true_anomaly_from_mean(M, e)
# ΠΠ΅ΡΠ½ΠΈΡΡ Π² Π΄Π΅ΠΊΠ°ΡΡΠΎΠ²Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ
r_new, v_new = state_from_elements(a, e, i, Ξ©, Ο, Ξ½_new)
return r_new, v_new
def kalman_filter(z, P, Q, R):
# ΠΏΡΠΎΡΡΠΎΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΠ°Π»ΠΌΠ°Π½-ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ (ΡΠ΅Π±Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ²ΠΎΠ»ΡΡΠΈΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ)
x_pred = A @ x
P_pred = A @ P @ A.T + Q
K = P_pred @ H.T @ np.linalg.inv(H @ P_pred @ H.T + R)
x = x_pred + K @ (z - H @ x_pred)
P = (np.eye(len(x)) - K @ H) @ P_pred
return x, P
```
ΠΠΎΠ±Π°Π²Ρ ΡΠΎΠΏΡΠΎΡΠΈΠ²Π»Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π΄ΡΡ
Π°, ΡΠΌΠ½ΠΎΠΆΠΈΠ² Π²Π΅ΠΊΡΠΎΡ ΡΠΊΠΎΡΠΎΡΡΠΈ Π½Π° `Cd * A / m * Ο` ΠΈ ΠΌΠΎΠΆΠ΅ΡΡ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ Π²ΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠ°ΠΉ Π·Π½Π°ΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π·Π°Ρ
ΠΎΡΠ΅ΡΡ Π³Π»ΡΠ±ΠΆΠ΅ ΠΏΠΎΠ³ΡΡΠ·ΠΈΡΡΡΡ Π² ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΡ β Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π΄ ΠΏΠΎΠΌΠΎΡΡ ΠΎΡΠ»Π°Π΄ΠΈΡΡ ΠΈΠ»ΠΈ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ Π»ΡΠ±ΡΡ ΡΠ°ΡΡΡ!