我正在尝试使用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度,但令我惊讶的是它不再起作用了。
有人知道吗?我读过类似的文章,但它们不能解决问题。