RuntimeError:func返回的数组必须是一维的,但得到ndim = 2

时间:2019-10-06 17:40:10

标签: python

我正在尝试使用scipy.integrate中的python odeint宏来解决MDF系统。

这是我的代码

import pylab
from scipy.integrate import odeint

"""
Définition des paramétres
"""
m1 = 100
m2 = 75
m3 = 50
k1 = 1e4
k2 = 5e4
k3 = 3e4
F0 = 100
xi = 0.03
V0 = 1

def eqmvt(t,x, M, K, C, F):
    D = block([[zeros((3,3)), eye(3)],[-dot(inv(M),K), -dot(inv(M),C)]])
    Dr = D*x + block([[zeros((3,1))],[dot(inv(M),F)]])
    return Dr

M=diag([m1,m2,m3])

K=array([[k1+k2, -k2, 0],
         [-k2, k2+k3, -k3],
         [0,-k3, k3]])

C=diag([2*m1*xi,2*m2*xi,2*m3*xi])

t=linspace(0,3.4,350)

om=45

F=F0*array([[0],[1],[0]]) # *sin(om*t)

eVal, Vect=eig(inv(K)*M)

u0=[0.2,.43,0.8,1.2,1.6,0.2]

U=odeint(eqmvt,u0,t, args=(M, K, C, F))

plot(t,U[:,0:3])

运行代码时,我收到一条错误消息。

 File "C:\ProgramData\Anaconda3\lib\site-packages\scipy\integrate\odepack.py", 
 line 244, in odeint
 int(bool(tfirst)))

 RuntimeError: The array return by func must be one-dimensional, but got 
 ndim=2.

通常具有两个自由度,效果很好。但是我试图将其设置为3度,但令我惊讶的是它不再起作用了。

有人知道吗?我读过类似的文章,但它们不能解决问题。

0 个答案:

没有答案