簡體   English   中英

Runge-Kutta 四階方法。 向后整合

[英]Runge-Kutta fourth order method. Integrating backwards

我正在使用 Runge-Kutta 四階方法以數值方式求解具有四次勢的彎曲時空中背景標量場的通常運動方程:

$\phi^{''}=-3\left(1+\frac{H^{'}}{3H}\right)\phi^{'}-\lambda\phi^3/H^2$,

$'$ denoting the derivative w.r.t. the e-folds number $\textrm{d}N=H\textrm{d}t$ and, from the Friedmann equation:

$H^2=\frac{\lambda \phi^4}{4}\frac{1}{3M_{Pl}^2-(1/2)\phi^{'2}}$;

$H^{'}=-\frac{1}{2M_{Pl}^2}H\phi^{'2}$.

當使用前向積分后得到的最終值作為初始條件進行反向積分時,問題就出現了。 向前積分時,結果與之前獲得的值不匹配。 我根本不明白問題出在哪里,因為方程式和代碼都不是未知的。 首先,我整合了 0 到 64 個電子折疊。 然后我簡單地反轉整合方向。

我也附上代碼:

def rk4trial(f,v0,t0,tf,n,V):  
    t=np.linspace(t0,tf,n)
    h=t[1]-t[0]
    v=np.array((n+1)*[v0])
    for j in range(n):  
        V.append(v[j])
        V[j]=copy.deepcopy(V[j])
        k1=f(v[j],t[j])*h
        k2=f(v[j]+(1/2)*k1,t[j]+(1/2)*h)*h
        k3=f(v[j]+(1/2)*k2,t[j]+(1/2)*h)*h
        k4=f(v[j]+k3,t[j]+h)*h
        v[j+1]=v[j]+(k1+2*k2+2*k3+k4)/6
    return V, t, h


def Fdet(v,t):
    phi, sigma = v
    H=(((lamb/4)*phi**4)/(3*mpl**2-(1/2)*sigma**2))**(1/2)
    HH=-((1/2)*sigma**2)*(1/mpl**2)
    return np.array([sigma,-3*(1+HH/3)*sigma-lamb*phi**3/(H**2)])

PS:此問題也已發布在這里: https://scicomp.stackexchange.com/questions/33583/runge-kutta-fourth-order-method-integrating-backwards ,其中詳細顯示了方程式。

編輯:刪除了代碼中不必要的部分。

編輯:作為對@LutzL 的回應,我附上了 \phi/M_{Pl} 和 \phi^{'} 在向前(實線)和向后(虛線)積分后的圖,按照他所說的做. 如您所見,前向積分的結果突然出現了我無法解釋的偏差。

|\phi^{'}|與 N

\phi/M_{Pl} 與 N

我會將 RK4 方法更改為最低限度的必要條件。 沒有必要讓v數組部分復制V數組的內容,所以

def rk4trial(f,v0,t0,tf,n,V):  
    t=np.linspace(t0,tf,n)
    h=t[1]-t[0]
    v=v0
    for j in range(n):  
        V.append(v)
        k1=f(v,t[j])*h
        k2=f(v+0.5*k1,t[j]+0.5*h)*h
        k3=f(v+0.5*k2,t[j]+0.5*h)*h
        k4=f(v+k3,t[j]+h)*h
        v=v+(k1+2*k2+2*k3+k4)/6
    return V, t, h

這里沒有復制問題,因為v在每一步中都是重新構造的,因此附加到返回數組的對象都是獨立的。

后向集成應該和前向集成一樣簡單,

V1, t1, h1 = rk4trial(Fdet,v0,t0,tf,n,[])
V2, t2, h2 = rk4trial(Fdet,V1[-1],tf,t0,n,[])

在方法誤差的范圍內, V2[k]應該與V1[-k-1]相同。 只有在剛性 ODE 中才會出現較大差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM