為了計算這個矩陣,我創建了一個函式(參見函式),它將一個由 組成并呼叫propagation的向量作為變數,并回傳。然后,結合這個函式來計算雅可比矩陣。當我運行我的代碼時(見下文),雅可比矩陣是為相對于(前 6 列)的偏導數正確計算的,但相對于偏導數的最后一列等于零。我知道這不可能,因為這些導數實際上是 t=T 時的最終速度和加速度。X_0TXX_fnumdifftools.JacobianX_fX_0X_fT

X_0為什么在進化程序中考慮了初始條件而沒有考慮X_f時間T?這沒有任何意義。在solve_ivp中,似乎時間跨度 ( tspan=(0,T)) 被完全忽略,但初始條件 ( y0=X_0) 沒有。這是為什么?我沒有正確使用solve_ivp嗎?numdifftools.Jacobian
如果我的問題需要更多詳細資訊,請告訴我,我很樂意在一天結束前提供更多解釋。
import numpy as np
from scipy.integrate import solve_ivp
import numdifftools as nd
def rhs_CR3BP(t, X0, mu):
"""Integrates the CR3BP equations of motion"""
x, y, z, v_x, v_y, v_z = X0
r = np.sqrt((x-1 mu)**2 y**2 z**2)
d = np.sqrt((x mu)**2 y**2 z**2)
a_x = 2*v_y x - (1-mu)*(x mu)/d**3 - mu/r**3*(x-1 mu)
a_y = -2*v_x y - (1-mu)*y/d**3 - mu*y/r**3
a_z = -(1-mu)*z/d**3 - mu*z/r**3
return np.array([v_x, v_y, v_z, a_x, a_y, a_z])
def propagation(X, mu):
X_0 = X[0:6]
T = X[6].real
sol = solve_ivp(fun=rhs_CR3BP, t_span=(0, T), y0=X_0, method='RK45', rtol=1e-10, atol=1e-10, args=(mu,), dense_output=True)
X_f = sol.y[:, -1]
return X_f
T = 0.732 # period
x, y, z, vx, vy, vz = 1.085, 0, 0, 0, -0.464, 0 # position and velocity components
X0 = [x, y, z, vx, vy, vz] # initial state vector
X = np.array([x, y, z, vx, vy, vz, T]) # X_0 and T
mu = 0.012 # arbitrary parameter
f = lambda X: propagation(X, mu)
f = nd.Jacobian(f, method='complex')
DF = np.real(f(X))
uj5u.com熱心網友回復:
替換nd.Jacobian(f, method='complex')為nd.Jacobian(f, method='central')產生以下矩陣:
array([[ -1.809, 0.609, 0. , -0.16 , 1.148, 0. , 0.027],
[ -5.119, 3.386, 0. , -1.052, 1.34 , 0. , 0.468],
[ 0. , 0. , -0.849, 0. , 0. , 0.153, 0. ],
[-22.765, 10.802, 0. , -3.568, 8.253, 0. , 1.907],
[ 0.836, -0.096, 0. , 0.103, 0.621, 0. , -0.156],
[ 0. , 0. , -1.532, 0. , 0. , -0.902, 0. ]])
最后一列中 df/dT 的這些條目看起來更加合理。
您的所有變數似乎都是實值的,但您method=complex在呼叫Jacobian. 這是自找麻煩,原因我將在下面展開。
實可微與復可微
如 numdifftools 檔案中所述:
如果區分函式是決議的,復雜的方法通常是最準確的
決議函式是可以用冪級數表示的函式,決議函式和復可微函式之間存在特殊關系:這兩類函式是相同的(略過一些技術細節)。相反,有許多沿實線可微但不是決議的函式。
重要的是,僅僅因為一個函式對于實數是可微的,并不意味著它也是復可微的(即決議的)。保證您的函式對于 是真正可微的T,但不能保證對于 complex 它將是復雜可微的T。
復數可微函式比實數可微函式更具選擇性,并且它們具有許多并非所有實數可微函式都為真的屬性(除了決議之外)。例如,如果一個復雜的函式可以被微分一次,那么它可以被無限次微分。不可復微分的實可微函式的一個例子是f(x) = |x|**3。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/410941.html
標籤:
上一篇:非軸交叉線性函式方程
