使用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
相关产品推荐
相关产品推荐

