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

sympy.linsolve求解耦合线性代数方程组返回错误结果的问题

Sympy求解欠定线性方程组的异常问题及修复方案

问题背景

本次涉及的耦合线性代数方程组为欠定系统,存在无穷多组解。使用Sympy的linsolve方法求解该系统时,返回的解空间不符合预期。

复现代码

import numpy as np
import sympy

A = np.array([[1,1,0,1,1,-3,-1,1,],[0,0,0,-1,-1,0,-1,-2,],[0,0,0,0,0,1,1,1,]])
b = np.array([[0],[0],[0]])

variable_symbols = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

# 转换为Sympy矩阵格式
A_sympy = sympy.Matrix(A)
b_sympy = sympy.Matrix(b)

# 生成符号变量
syms = sympy.symbols(variable_symbols)
syms = list(syms)

# 调用线性求解器
sol_sympy = sympy.linsolve((A_sympy,b_sympy),syms)
print(sol_sympy)

输出对比

异常输出(Sympy 1.6.1版本)

FiniteSet((-b - g - 2*h, b, c, -c - g - 2*h, e, -g - h, g, h))

正确预期输出

FiniteSet((-b - g - 2*h, b, c, -e - g - 2*h, e, -g - h, g, h))

错误验证

两种输出并非是自由参数选择不同导致的等价表达,可通过代入验证真伪:
取正确解的自由参数b=0、c=1、e=0、g=0、h=0,可得到合法解向量(a=0, b=0, c=1, d=0, e=0, f=0, g=0, h=0),该解无法通过Sympy 1.6.1返回的错误表达式构造得到。

修复方案

该问题为Sympy 1.6.1版本的已知缺陷,将Sympy升级至1.7.1及以上版本即可解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:18:01