我正在使用 Runge-Kutta 四阶方法以数值方式求解具有四次势的弯曲时空中背景标量场的通常运动方程:
,
表示对 e-folds 数的导数并且,从弗里德曼方程:
;
.
当使用前向积分后得到的最终值作为初始条件进行反向积分时,问题就出现了。向前积分时,结果与之前获得的值不匹配。我根本不明白问题出在哪里,因为方程式和代码都不是未知的。首先,我整合了 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):
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/H)**2)*(1/mpl**2)
return np.array([sigma,-3*(1+HH/3)*sigma-lamb*phi**3/(H**2)])