最常用方法是使用numpy.linalg.solve()求解线性方程组,适用于系数矩阵可逆的情况,如A=[[2,1],[1,-1]]、b=[5,1]时,x=np.linalg.solve(A,b)得解[2.,1.];求解前应通过np.linalg.det(A)检查行列式是否非零以确保可逆;对于超定或欠定方程组可用scipy.linalg.lstsq求最小二乘解;若需解析解则推荐sympy库的solve函数进行符号运算。

Python求解线性方程组最常用的方法是利用numpy库中的linalg.solve()函数。这个方法适用于系数矩阵可逆的线性方程组,也就是方程个数等于未知数个数且方程之间线性无关的情况。
使用 numpy.linalg.solve 求解
假设我们要求解如下线性方程组:
2x + y = 5
x - y = 1
可以将其写成矩阵形式 Ax = b,其中:
- A 是系数矩阵:[[2, 1], [1, -1]]
- b 是常数向量:[5, 1]
- x 是未知数向量:[x, y]
代码实现如下:
立即学习“Python免费学习笔记(深入)”;
import numpy as npA = np.array([[2, 1],
[1, -1]])
b = np.array([5, 1])
x = np.linalg.solve(A, b)
print(x) # 输出: [2. 1.]
结果表示 x = 2,y = 1。
检查矩阵是否可逆
在求解前,最好确认系数矩阵 A 是否可逆。可以通过计算行列式判断:
det = np.linalg.det(A)if det == 0:
print("矩阵不可逆,无法用 solve 求唯一解")
else:
x = np.linalg.solve(A, b)
使用 scipy 处理更复杂情况
如果方程组是超定(方程多于未知数)或欠定(未知数多于方程),可以使用scipy.linalg.lstsq求最小二乘解:
A = np.array([[1, 2],
[3, 4],
[5, 6]])
b = np.array([1, 2, 3])
x, residuals, rank, s = lstsq(A, b)
print(x)
符号求解(适合教学或解析解)
如果想得到解析表达式而不是数值解,可以用sympy:
x, y = symbols('x y')
eq1 = Eq(2*x + y, 5)
eq2 = Eq(x - y, 1)
sol = solve((eq1, eq2), (x, y))
print(sol) # {x: 2, y: 1}
基本上就这些常用方法。数值计算推荐用 numpy,符号运算用 sympy,特殊情况考虑 scipy。











