import numpy as np
# 定义系数矩阵A和结果矩阵b
#
# | 1 -2 1 | | 0 |
# A = | 0 2 -8 |, b = | 8 |
# | 5 0 -5 | | 10 |
#
A = np.array([[1, -2, 1], [0, 2, -8], [5, 0, -5]])
b = np.array([0, 8, 10])
# 使用numpy.linalg.solve求解线性方程组 Ax = b
x = np.linalg.solve(A, b)
print(x) # 输出x的值,结果为[ 1. 0. -1.]
numpy.linalg.solve() 只能解非奇异矩阵(Nonsingular matrix),也就是满秩的方阵,意味着Ax=b只有一个解。
如果传入一个奇异矩阵(Singular matrix),意味着Ax=b有无穷解或者无解,就会报错
numpy.linalg.LinAlgError: Singular matrix
如果要解奇异矩阵,那么应该用numpy.linalg.svd()方法。
附录:
首先,看这个矩阵是不是方阵(即行数和列数相等的矩阵,若行数和列数不相等,那就谈不上奇异矩阵和非奇异矩阵)。如是方阵,再看此矩阵的行列式|A|是否等于0,若等于0,称矩阵A为奇异矩阵;若不等于0,称矩阵A为非奇异矩阵。 同时,由|A|≠0可知矩阵A可逆,这样可以得出另外一个重要结论:可逆矩阵就是非奇异矩阵,非奇异矩阵也是可逆矩阵。 如果A为奇异矩阵,则AX=0有无穷解,AX=b有无穷解或者无解。如果A为非奇异矩阵,则AX=0有且只有唯一零解,AX=b有唯一解。