Python 数组大小上的Scipy odeint ODE错误

Python 数组大小上的Scipy odeint ODE错误,python,numpy,scipy,ode,Python,Numpy,Scipy,Ode,我正试图解决一个常微分方程,它源于物理学场论中的N体问题。为此,我考虑使用scipy.integrate.odeint函数,并编写了以下代码: (自问题首次提出后更新) 但是,当我尝试执行它时,会出现以下错误: Traceback (most recent call last): File "./main.py", line 87, in <module> solution = odeint(ODE,XV0,t,args=(M,)) File "/usr/lib/py

我正试图解决一个常微分方程,它源于物理学场论中的N体问题。为此,我考虑使用scipy.integrate.odeint函数,并编写了以下代码:

自问题首次提出后更新)

但是,当我尝试执行它时,会出现以下错误:

Traceback (most recent call last):
  File "./main.py", line 87, in <module>
    solution = odeint(ODE,XV0,t,args=(M,))
  File "/usr/lib/python2.7/site-packages/scipy/integrate/odepack.py", line 143, in odeint
    ixpr, mxstep, mxhnil, mxordn, mxords)
ValueError: object too deep for desired array
回溯(最近一次呼叫最后一次):
文件“/main.py”,第87行,在
解决方案=odeint(ODE,XV0,t,args=(M,)
文件“/usr/lib/python2.7/site packages/scipy/integrate/odepack.py”,第143行,在odeint中
ixpr、mxstep、mxhnil、mxordn、mxords)
ValueError:对象对于所需数组太深
有人能指出我做错了什么吗?为什么我的代码不起作用?另外,我想问一下在我的例子中使用ode和odeint函数是否有什么区别

谢谢

编辑:纠正了愚蠢的错误(shape()->shape),感谢Talonmes指出了这一点。上面的链接现在应该指向正确的脚本

编辑2:我怀疑odeint函数不喜欢ODE函数返回的元组。如果需要求解耦合向量ODE,有人能帮助我们格式化元组吗?我发现一些例子是人们正在解耦合常微分方程或向量常微分方程,但不是两者都解


编辑3:我修改了示例,为odeinit函数提供了一个初始条件矩阵,从名为ODE的函数返回的矩阵是一个维度相同的矩阵。。。但是,我也遇到了同样的错误。

pastebin代码中存在大量语法错误。显然,您甚至从未测试过
ODE
函数,因为如果您测试过,您会很快意识到
ndarry.shape
不是一个可调用的函数,它是一个元组,
ndarray
没有
dot
方法等等。在担心ODE集成之前,我会先把重点放在让你的代码工作上。。。我试图从头重写所有东西,显然我犯了一些错误。。。然而,你在点的方法上是错误的。如果我有t=numpy.array([0,4,3]),那么t.dot(t)给出25,这是预期的。如果t=numpy.random.rand(3),也会发生同样的情况。实际上,我们在
ndarray.dot
这件事上都是对的。十年来,ndarray没有
dot
方法(matrix没有)。它似乎被添加到了最新版本的numpy中。当然1.6和更早版本没有。我没有时间深入研究,但您似乎希望
odeint
处理非一维数组。我不确定它是否有。IIRC在过去,我不得不使用包装器将数据展平,然后再将其展平,这样数据才会令人满意。[我没有比这更自信的了,因为我已经有一段时间没有使用它了,就像发生在@Talonmes身上一样,在此期间可能会发生一些变化。]@gns ank:不可能。使用
ndarray.flatte()
获取标准ODE解算器可以处理的“向量输入向量输出”函数。