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

调用np.linalg.solve()报LinAlgError: Singular matrix错误如何解决

奇异方阵线性方程组的替代求解方案

np.linalg.solve 仅支持满秩非奇异方阵的精确求解,奇异方阵不存在唯一的逆矩阵,因此会触发报错,你可以根据业务需求选择以下几种替代方案:

1. 求最小二乘解(最常用)

如果可以接受残差最小的近似解,直接用numpy内置的最小二乘函数即可:

z_k1, residuals, rank, s = np.linalg.lstsq(M, w_k, rcond=None)
  • 返回的第一个值就是使得||M @ z_k1 - w_k||最小的解,兼容奇异矩阵、非方阵场景
  • 当方程组存在多组解时,默认返回2范数最小的解

2. 用伪逆矩阵直接求解

奇异矩阵可以计算摩尔-彭罗斯伪逆来替代逆矩阵做求解,最终结果和最小二乘解等价:

M_pinv = np.linalg.pinv(M)
z_k1 = M_pinv @ w_k

如果你的场景需要频繁对同一个M做多次求解,提前计算好伪逆复用的效率会更高。

3. 求方程组通解

当方程组M z = w_k是相容方程组(也就是w_k在M的列空间内)时会存在无穷多组解,你可以按以下逻辑构造所有可行解:

  • 先用上面的最小二乘或伪逆方法得到一个特解
  • 计算M的零空间所有基向量,通解 = 特解 + 零空间基向量的任意线性组合

注意:如果方程组是不相容的(w_k不在M的列空间),不存在精确解,只能用最小二乘方案求近似解。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:39:03