在Python中使用odeint解决二阶ODE

时间:2016-10-10 20:10:53

标签: python ode

我想解决这个等式:

y''+ A y' - B y = 0

其中y,A和B是相同变量“a”的函数

我尝试了以下代码:

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


x0 = 0.,0.1 # initial conditions 
oe = 0.0 # cosmological constant density parameter
om = 1. # matter density parameter
h = 2.3E-18 # Hubble constant
w = -1. 

a = np.linspace(0.1,1,10) # scale factor


def H(a): # Hubble rate equation 
    return h*np.sqrt((om/(a**3.))+(oe/(a**(3.*(1.+w)))))

def A(a): # differential equation term 
    return (-3./(2.*a))

def B(a): # differential equation term
    return (3.*om*(h**2.))/((2.*(a**5.))*(H(a)**2.))



def system(X,a): # differential equation system
    X0 = X[0]
    X1 = X[1]
    X2 = -A(a)*X1 + B(a)*X0

    return X1,X2



x = odeint(system,x0,a)



pyplot.semilogx(a,x, linestyle='-', c="k", linewidth="2")

它返回一个没有意义的情节。我应该得到一个图,其中“x”的最大值在a = 1时为1。但我得到以下情节:

我得到的情节:

Plot that I get

预期结果类似于下图的连续线:

enter image description here

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

请尝试在功能系统(X,a)中的B(a)* X0之前更改符号。根据你的初始等式,它应该是负数。