You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用odeint求解ODE时遭遇ValueError: setting an array element with a sequence

解决微分方程组代码的错误分析与修正

先来看你遇到的错误信息:

Traceback (most recent call last): File "test.py", line 18, in z=odeint(func1,Z0,t) File "C:\Python27\lib\site-packages\scipy\integrate\odepack.py", line 233, in odeint int(bool(tfirst))) ValueError: setting an array element with a sequence.

这个错误主要由两个关键问题导致,我来帮你逐一解决:

问题1:函数参数大小写不匹配

你定义的微分方程函数是func1(Z,T),第二个参数是大写的T,但在函数内部计算dx_dt时却用了小写的t——这个t是你外部定义的整个时间数组np.linspace(0,10),不是odeint传入的单个时间步值。这就导致函数返回的是一个数组而非单个时间点的导数序列,直接触发了“数组元素被序列赋值”的错误。

问题2:y变量的索引错误

最后一行y=z[:,0]是错误的,odeint返回的z数组中,每一行对应一个时间点的解,第一列(索引0)是x的数值解,第二列(索引1)才是y的数值解,所以这里必须改成y=z[:,1]。

另外,你的代码还缺少必要的库导入语句,这也是运行前需要补上的。

修正后的完整可运行代码:

import numpy as np
from scipy.integrate import odeint

# 求解微分方程组 dx/dt=3*exp(-t) 和 dy/dt=3-y(t)
def func1(Z, T):
    x = Z[0]
    y = Z[1]
    dx_dt = 3. * np.exp(-T)  # 改用函数参数T,匹配定义
    dy_dt = 3. - y
    return [dx_dt, dy_dt]

# 生成时间序列
t = np.linspace(0, 10)
# 初始条件
Z0 = [0, 0]
# 调用odeint求解
z = odeint(func1, Z0, t)
# 提取x和y的解
x = z[:, 0]
y = z[:, 1]  # 修正索引为1

# 可选:绘图查看结果
import matplotlib.pyplot as plt
plt.plot(t, x, label='x(t)')
plt.plot(t, y, label='y(t)')
plt.xlabel('t')
plt.ylabel('Solution')
plt.legend()
plt.show()

运行这段代码后,就能正常得到微分方程组的数值解,还能通过绘图直观看到x(t)和y(t)的变化趋势。

内容的提问来源于stack exchange,提问作者Supti Sadhukhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:24:31