Python:scipyodeint停止以最大值进行集成,只产生预期p的一半

2024-04-18 21:27:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一段模拟宇宙膨胀的代码,特别是我正在积分(使用scipy-odeint)Friedmann方程,得到不同曲率的标度因子与时间的关系图。我的代码是:

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轴相交的图,但我似乎无法得到这个(可能与积分有关)。你知道吗

非常感谢您的帮助。你知道吗


Tags: lambda代码importtrueasnppltscipy