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

如何用NumPy/LinAlg区分线性方程组无解与无穷多解

区分线性方程组无解与无穷多解的方法

当系数矩阵行列式为0时,要区分方程组是无解还是有无穷多解,核心是比较系数矩阵的秩和增广矩阵的秩:

  • 若两者秩相等,方程组存在无穷多解
  • 若系数矩阵秩小于增广矩阵秩,方程组无解

原代码

import numpy as np
from sympy import *
from scipy.linalg import solve


a = float(input("Enter coefficient a: "))
b = float(input("Enter coefficient b: "))
c = float(input("Enter coefficient c: "))
d = float(input("Enter coefficient d: "))
e = float(input("Enter coefficient e: "))
f = float(input("Enter coefficient f: "))
g = float(input("Enter coefficient g: "))
h = float(input("Enter coefficient h: "))
i = float(input("Enter coefficient i: "))
j = float(input("Enter coefficient j: "))
k = float(input("Enter coefficient k: "))
l = float(input("Enter coefficient l: "))

A = np.array([[a, b, c],
              [e, f, g],
              [i, j, k]])
b = np.array([d, h, l])


if (np.linalg.det(A)) != 0:
    print(np.linalg.solve(A, b))
elif (np.linalg.det(A)) == 0:
        print("Infinite or no solutions")

修改后的代码

利用np.linalg.matrix_rank计算秩,同时处理浮点数精度问题,避免误判:

import numpy as np

# 输入12个系数
a = float(input("Enter coefficient a: "))
b = float(input("Enter coefficient b: "))
c = float(input("Enter coefficient c: "))
d = float(input("Enter coefficient d: "))
e = float(input("Enter coefficient e: "))
f = float(input("Enter coefficient f: "))
g = float(input("Enter coefficient g: "))
h = float(input("Enter coefficient h: "))
i = float(input("Enter coefficient i: "))
j = float(input("Enter coefficient j: "))
k = float(input("Enter coefficient k: "))
l = float(input("Enter coefficient l: "))

A = np.array([[a, b, c],
              [e, f, g],
              [i, j, k]])
b_vec = np.array([d, h, l])

# 处理浮点数精度,用绝对值判断行列式是否接近0
det_A = np.linalg.det(A)
tolerance = 1e-9

if abs(det_A) > tolerance:
    print("方程组有唯一解:", np.linalg.solve(A, b_vec))
else:
    # 构造增广矩阵
    augmented_matrix = np.column_stack((A, b_vec))
    # 计算系数矩阵与增广矩阵的秩
    rank_A = np.linalg.matrix_rank(A, tol=tolerance)
    rank_augmented = np.linalg.matrix_rank(augmented_matrix, tol=tolerance)
    
    if rank_A == rank_augmented:
        print("方程组有无穷多解")
    else:
        print("方程组无解")

关键说明

  1. 浮点数精度处理:直接判断det(A) == 0会因浮点数计算误差出错,改用绝对值与小容差(如1e-9)比较
  2. 秩的计算:np.linalg.matrix_rank支持指定容差,确保秩的计算不受微小数值误差干扰
  3. 增广矩阵构造:用np.column_stack将系数矩阵和常数项列合并,得到完整的增广矩阵

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:25:19