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

使用欧拉法求解一阶ODE绘图时触发ValueError:x和y尺寸不匹配

欧拉法求解ODE绘图时出现尺寸不匹配错误的原因及解决办法

错误根源

你遇到的ValueError: x and y must be the same size,核心原因有两点:

  1. 你只将每个时间步长h对应的t数组存入了列表y,但没有保存对应每个h的N计算结果。当外部循环结束后,变量N仅保留了最后一次循环(也就是h=0.2时)的数组,它的长度和y[0](h=0.05对应的t数组)完全不同。
  2. 举个实际长度对比:h=0.05时,t的长度是(5/0.05)+1=101;h=0.2时,t的长度是(5/0.2)+1=26。最后N的长度是26,而y[0]长度是101,两者尺寸不匹配,绘图时自然报错。

你之前在循环内直接用t和N绘图能成功,是因为此时t和N属于同一h的计算结果,长度完全一致,所以不会触发尺寸错误。

修正方案

方案一:同时保存t和对应的N

修改代码,用两个列表分别存储每个h对应的时间数组和核数数组:

import numpy as np
import matplotlib.pyplot as plt

N_0 = 1000  # 假设初始核数
tau = 1.2   # 假设半衰期相关参数

t_list = []
N_list = []

for h in (0.05, 0.1, 0.2):
    t = np.arange(0, 5 + h, h)
    N = np.zeros(len(t))
    N[0] = N_0
    for i in range(len(t) - 1):
        N[i+1] = N[i] * (1.0 - h/tau)
    t_list.append(t)
    N_list.append(N)

# 绘制h=0.05对应的结果
plt.scatter(t_list[0], N_list[0], marker='o', facecolors='none', s=60, lw=2)
plt.show()

方案二:按需保存或即时绘图

如果不需要保留所有h的结果,可以在循环内直接绘图,或者只保存目标h的数据:

import numpy as np
import matplotlib.pyplot as plt

N_0 = 1000
tau = 1.2

target_h = 0.05
t_target = None
N_target = None

for h in (0.05, 0.1, 0.2):
    t = np.arange(0, 5 + h, h)
    N = np.zeros(len(t))
    N[0] = N_0
    for i in range(len(t) - 1):
        N[i+1] = N[i] * (1.0 - h/tau)
    if h == target_h:
        t_target = t
        N_target = N
    # 也可以在这里直接绘图每个h的结果
    # plt.scatter(t, N, marker='o', facecolors='none', s=60, lw=2, label=f'h={h}')

plt.scatter(t_target, N_target, marker='o', facecolors='none', s=60, lw=2)
# plt.legend()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:14:57