试图通过解决odeint来划分

时间:2017-03-07 22:26:39

标签: python-2.7 scipy physics odeint

我在python中使用odeint来解决某些问题(仅用于宇宙的弗里德曼方程)它给了我想要的值。但是,如何让它返回/绘制(da / dt)/ a?即如何通过解的相应值来划分导数函数的值?

这是我的尝试代码:(忽略前面的位,即图1的情节;它是H i关注的部分)

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.0 #for EdS
H_0 = 1./13.7

#the function for EdS universe
def Friedmann(a, t):
    dadt = H_0 * (omega_m)**(1./2.) * a**(-1./2.)
    return dadt

t = np.linspace(t_0,13.7,101)
a = odeint(Friedmann, a_0, t)
a = np.array(a).flatten()

plt.figure(1)
plt.subplot(211)
plt.plot(t, a)
plt.title("Einstein-de Sitter Universe")
plt.xlabel("t")
plt.ylabel("a")

#comparing to analytic solution

an = (((3. / 2.) * (H_0 * omega_m**(1./2.)) * (t - t_0)) + a_0**(3. / 2.))**(2. / 3.)
an = np.array(an).flatten()
plt.figure(1)
plt.subplot(212)
plt.plot(t, a, t, an, "+")

H = [x/y for x, y in zip(Friedmann(a, t), a)]

plt.figure(2)
plt.plot(t, H) 

plt.show()

非常感谢任何帮助。

0 个答案:

没有答案