solve_ivp "ValueError: setting an array element with a sequence" issue

solve_ivp "ValueError: setting an array element with a sequence" issue

我正在尝试使用 solve_ivp 求解与耦合质量和 spring 系统相关的 ODE 系统。我遇到一个问题,指出“ValueError:使用序列设置数组元素”。请参阅下面的代码,了解我正在尝试使用的代码。

from scipy.integrate import solve_ivp
import numpy as np    

func(t, w, p):
        
#unpack the variables and parameters" 
x1, y1, x2, y2 = w
m1, m2, k1, k2, L1, L2, b1, b2 = p

# Create the functions
y1 = (-b1 * y1 - k1 * (x1 - L1) + k2 * (x2 - x1 - L2)) / m1,
y2 = (-b2 * y2 - k2 * (x2 - x1 - L2)) / m2

return y1, y2

# Parameter values
# Masses:
m1 = 1.0
m2 = 1.5
# Spring constants
k1 = 8.0
k2 = 40.0
# Natural lengths
L1 = 0.5
L2 = 1.0
# Friction coefficients
b1 = 0.8
b2 = 0.5

# Initial conditions
# x1 and x2 are the initial displacements; y1 and y2 are the initial velocities
x1 = 0.5
y1 = 0.0
x2 = 2.25
y2 = 0.0


# Pack up the parameters and initial conditions:
p = [m1, m2, k1, k2, L1, L2, b1, b2]
w0 = [x1, y1, x2, y2]
t_span = np.linspace(0, 15, 1000)

Sol = solve_ivp(lambda t, w: func(t, w, p), [t_span[0], t_span[-1]], y0=w0, t_eval=t_span) 

我不太确定哪里出错了,因为错误没有说明问题出在哪一行代码上。以前有人经历过吗?

如果 x 是位置,y 是速度,那么命名 z 加速度和 return 输入导数的矢量

def func(t, w, p):         
    #unpack the variables and parameters" 
    x1, y1, x2, y2 = w
    m1, m2, k1, k2, L1, L2, b1, b2 = p
    
    # Create the functions
    z1 = (-b1 * y1 - k1 * (x1 - L1) + k2 * (x2 - x1 - L2)) / m1,
    z2 = (-b2 * y2 - k2 * (x2 - x1 - L2)) / m2
    
    return y1, z1, y2, z2

其他一切看起来都应该有效。