17370845950

python如何求解线性方程组?
最常用方法是使用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]

代码实现如下:

import numpy as np

A = 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求最小二乘解:

from scipy.linalg import 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

from sympy import symbols, Eq, solve

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。