我正在尝试将数组传递给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)。我不知道解决方案的哪个方面(两个)是实际的答案。
我真的很感激一些指导。 谢谢!
答案 0 :(得分:0)
据我所知,没有办法将数组作为Python中ODE函数的参数传递。有趣的是,我认为在Matlab中可行。解决问题(但效率低下)的唯一方法是使用FOR循环。