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

Python调用solve_ivp模拟LTI系统时matmul维度错误如何解决

报错原因

核心问题是scipy.integrate.solve_ivp对传入的动力学函数参数顺序有强制要求:时间参数在前,状态参数在后,你当前定义的dynamics(x, t)顺序刚好相反:

  • solve_ivp调用动力学函数时,会先传入当前计算的时间标量,再传入状态向量
  • 你写的参数顺序会导致函数内的x实际拿到的是0维时间标量,执行A@x矩阵乘法时维度不匹配,触发报错。
修复方案

只要调换动力学函数的参数顺序即可,修改后完整可运行代码如下:

import numpy as np
from scipy import integrate
import matplotlib.pyplot as plt

# System Parameters
l = 1 # Pendulum length
g = 9.81 # gravity

# Initial Conditions
x0 = np.array([np.pi/2, 0])

# Simulation parameters
tStart = 0
tEnd = 4
t_span = [tStart, tEnd]
t = np.linspace(tStart,tEnd,10) # Simulation time

# System matrices
A = np.array([[0, 1],[-g/l, 0]])

# 仅修改参数顺序为 t 在前,x 在后
def dynamics(t, x):
    xdot = -A@x
    return xdot

# 可选添加t_eval参数,指定输出结果对应你定义的t数组时间点
y = integrate.solve_ivp(dynamics, t_span, x0, t_eval=t)

补充说明:如果你之前用过scipy.integrate.odeint,它的动力学函数参数要求是(x, t),和solve_ivp刚好相反,是很容易踩的坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:09:04