SciPy中

时间:2016-12-20 05:22:54

标签: python scipy odeint

我正在尝试将数组传递给ODE,然后使用ODEINT函数解决该ODE。但是,我收到以下错误:

  

RuntimeError:func(50)返回的数组大小与y0(1)

的大小不匹配

以下是我的示例代码:

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


#First ODE
def eq1 (x,t):
    return (0.5*(x)+2*x**2)

#Second ODE
def eq2 (y,t,m):
    p = np.sqrt(y)+m*y**2
    return p

t = np.linspace(0,1,50)
IC = [2] # Initial Condition
m = [0.1]*len(t) # A random variable

#Solver for the first ODE
one = odeint(eq1,IC,t) 
plt.plot (t,one)

#Solver for the Second ODE
two = odeint (eq2,IC,t,(m,))
plt.plot (t,two)

第一个解算器工作正常,但第二个解决方案抛出错误。基于错误消息,我理解IC的尺寸与变量m的尺寸不同。因此,如果我注释掉与第一个ODE的求解器相关的行并将IC更改为IC = [2]*len(m),则错误消息将消失。但是,two.shape是(50,50)。我不知道解决方案的哪个方面(两个)是实际的答案。

我真的很感激一些指导。 谢谢!

1 个答案:

答案 0 :(得分:0)

据我所知,没有办法将数组作为Python中ODE函数的参数传递。有趣的是,我认为在Matlab中可行。解决问题(但效率低下)的唯一方法是使用FOR循环。