Python:scipy odeint停止以最大值积分并且只产生预期图的一半

时间:2018-02-26 18:58:04

标签: python numpy matplotlib scipy odeint

我正在研究一个模拟宇宙膨胀的代码,特别是我整合(使用scipy odeint)弗里德曼方程,以获得不同曲率的比例因子与时间的关系图。我的代码是:

import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
from scipy.integrate import odeint

t_0 = 0.0004
a_0 = 0.001
omega_m = 1
omega_r = 0
omega_lambda = 0
omega_k = 1 - omega_lambda - omega_m - omega_r
H_0 = 1./13.799

def Friedmann(a, t):
    dadt = H_0 * (((omega_m) * a**(-1)) + ((omega_r) * a**(-2)) + ((omega_lambda) * a**2) + (omega_k))**(1./2.)
    return dadt

plt.rc('text', usetex=True)
plt.rc('font', family='serif')

fig, ax = plt.subplots(nrows=1,ncols=1)

for omega_k in np.linspace(-1, 1, 3):
    t = np.linspace(t_0,50,200)
    a = odeint(Friedmann, a_0, t)
    a = np.array(a).flatten()
    ax.plot(t,a)

line1, = plt.plot(t, a, 'b')
plt.xlabel('Time/Gyr')
plt.ylabel('Scale factor a')
plt.grid(True)
plt.axis([0,50,0,5])
plt.show()

This是我得到的情节。我试图得到一个情节,其中底部(浅蓝色)线向下循环并在t~43 Gyr处遇到x轴但我似乎无法得到这个(可能与积分有关)。

非常感谢任何帮助。

0 个答案:

没有答案