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

Python绘图遇维度与形状不匹配错误,寻求解决方案

解决Matplotlib绘图时的维度不匹配错误

错误根源排查

  1. 仿真长度N的计算错误
    原代码中N = int(Tstop-Tstart/Ts)的运算优先级有误,Tstart/Ts会先计算(结果为0),导致N=60,x1和x2的长度为62。而时间数组t是np.arange(0,60+0.2,0.1),长度为602,两者维度完全不匹配,这是报错的直接原因。

  2. 变量名冲突
    循环变量用了k,但之前已定义刚度系数k=2,循环时会覆盖该值,导致a21的计算逻辑在循环中出错(虽未直接引发本次报错,但会影响仿真结果)。

  3. 状态方程输入项错误
    原代码直接将F加到状态方程中,正确的离散化输入应为b1*F和b2*F——b1、b2是输入增益系数,直接加F会导致仿真结果偏离预期。

修正后的代码

import numpy as np
import matplotlib.pyplot as plt

c = 4
k_stiff = 2  # 重命名避免与循环变量冲突
m = 20
F = 5
 
Ts = 0.1  # 采样时间
Tstart = 0
Tstop = 60
# 修正N的计算:先算时间差再除以采样时间
N = int((Tstop - Tstart) / Ts)
x1 = np.zeros(N + 1)  # N个采样点对应N+1个状态值,无需额外+2
x2 = np.zeros(N + 1)
x1[0] = 0
x2[0] = 0
 
a11 = 1
a12 = Ts
a21 = -(Ts * k_stiff) / m
a22 = 1 - (Ts * c) / m

b1 = 0
b2 = Ts / m

# 循环变量改用i,避免和刚度系数冲突
for i in range(N):
   # 修正输入项:F乘以对应增益b1/b2
   x1[i+1] = a11 * x1[i] + a12 * x2[i] + b1 * F
   x2[i+1] = a21 * x1[i] + a22 * x2[i] + b2 * F

# 时间数组长度与x1/x2匹配:从Tstart到Tstop,步长Ts,共N+1个点
t = np.arange(Tstart, Tstop + Ts, Ts)

plt.plot(t, x1, label='x1')
plt.plot(t, x2, label='x2')
plt.legend()
plt.xlabel('Time (s)')
plt.ylabel('State Values')
plt.show()

关键修改说明

  • 给刚度系数重命名为k_stiff,避免变量名冲突;
  • 修正N的计算逻辑,确保状态数组与时间数组长度一致;
  • 调整状态方程输入项,符合离散化模型的正确形式;
  • 精简数组初始化长度,让状态数组与时间点数量完全匹配;
  • 添加图例和坐标轴标签,提升绘图可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:30:56