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

Python中使用sympy求解简单矩阵方程的报错原因及实现方法

报错原因
  • 核心冲突是你混用了numpy数组和sympy的符号运算逻辑:numpy数组 * sympy符号得到的是内嵌sympy对象的numpy数组,sym.Eq无法直接将这类numpy数组转换为sympy自身可识别的表达式结构,因此抛出SympifyError。
  • 其次你没有提前声明sympy类型的符号变量y,这也是报错的诱因之一。
  • 标量代码能正常运行,是因为你提前定义了x为sympy原生标量符号,所有运算生成的都是sympy可识别的表达式,sym.Eq可以正常解析。
正确实现方式

sympy的矩阵方程求解请统一使用sympy自身的Matrix类型做矩阵运算,不要和numpy数组混用,以下是两种常见场景的实现代码:

场景1:y为标量,求满足矩阵等式的标量解

import sympy as sym

# 第一步:声明符号变量
y = sym.symbols('y')
# 第二步:用sympy原生接口构造矩阵
a = sym.eye(3) * 3
# 第三步:构造等式,右侧也要用sympy的零矩阵
eq = sym.Eq(a * y, sym.zeros(3, 3))
# 第四步:求解
print(sym.solve(eq, y))
# 输出结果:[0]

场景2:y为3维列向量,求解线性方程组

import sympy as sym

# 第一步:声明向量分量的符号变量
y1, y2, y3 = sym.symbols('y1 y2 y3')
y = sym.Matrix([y1, y2, y3])
# 第二步:构造系数矩阵
a = sym.eye(3) * 3
# 第三步:构造等式,右侧为3行1列的零向量
eq = sym.Eq(a * y, sym.zeros(3, 1))
# 第四步:求解
print(sym.solve(eq, (y1, y2, y3)))
# 输出结果:{y1: 0, y2: 0, y3: 0}

如果必须使用numpy生成的数组,需要先转换为sympy的Matrix类型再参与符号运算:

import sympy as sym
import numpy as np

# numpy生成数组
a_np = np.eye(3) * 3
# 转换为sympy矩阵
a = sym.Matrix(a_np)
y = sym.symbols('y')
eq = sym.Eq(a * y, sym.zeros(3, 3))
print(sym.solve(eq, y))

内容的提问来源于stack exchange,提问作者Marek Umiński

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:06:05