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

使用SymPy求解大型线性方程组时触发AssertionError问题咨询

问题原因与解决方案

核心原因

SymPy 的 solve_linear_system 函数对输入矩阵有严格要求:增广矩阵的列数必须等于变量数量 + 1。这是因为增广矩阵的结构是「变量系数列 + 方程右侧常数项列」——前 N 列对应 N 个变量的系数,最后 1 列是每个方程的常数项。

你的方程组是 2016×2015 规模,触发断言错误的情况无非两种:

  • 你传入的是系数矩阵(仅包含变量系数,无常数项列):此时列数为 2015,若变量数是 2015,则增广矩阵需要 2016 列(2015 系数列 + 1 常数项列),列数不匹配导致断言失败。
  • 你传入的是增广矩阵(已包含常数项列):此时变量数应该是 2015-1=2014,但你定义的 symbols 长度不是 2014,导致等式不成立。

具体解决步骤

情况1:传入的是系数矩阵

给矩阵添加常数项列,组成标准增广矩阵后再求解:

import sympy as sym

# 假设你的系数矩阵为A(2016行×2015列)
A = sym.Matrix([[...]])  # 替换为你的实际系数矩阵
# 添加常数项列(示例用全0,替换为你的方程右侧实际值)
augmented_matrix = A.row_join(sym.Matrix.zeros(2016, 1))
# 定义对应数量的变量(2015个)
vars = sym.symbols('x0:2015')
# 执行求解
solution = sym.solve_linear_system(augmented_matrix, *vars)

情况2:传入的是增广矩阵

调整变量数量为矩阵列数减1(2014个):

import sympy as sym

# 你的2016×2015增广矩阵
system = sym.Matrix([[...]])
# 定义2014个变量
vars = sym.symbols('x0:2014')
# 执行求解
solution = sym.solve_linear_system(system, *vars)

额外提示

你的方程组是超定系统(方程数2016 > 变量数2015),仅当方程间存在线性相关性时才有解。若方程组无解,solve_linear_system 会返回空字典,这是正常的数学结果,与本次断言错误无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:20:07