不能用np.linalg.inv函数ne
时间: 2024-02-24 13:56:25 浏览: 115
如果不能使用`np.linalg.inv`函数,可以使用高斯-约旦消元法求解A的逆矩阵。具体地,将A和单位矩阵I通过行变换合并成一个增广矩阵,然后对增广矩阵进行高斯-约旦消元,最终得到的矩阵就是[A|I]经过初等行变换后的结果,其中I部分就是A的逆矩阵。
以下是Python实现的代码:
```python
import numpy as np
# 已知方程 Ax=b,求解x
A = np.array([[2, 1], [1, 2]])
b = np.array([[3], [4]])
x = np.linalg.solve(A, b)
# 根据x在b中的系数求解A的逆矩阵
n, m = b.shape
B = np.zeros((n, m))
for i in range(n):
B[i,:] = b[:,i].T
# 构造增广矩阵
aug = np.hstack((A, np.eye(m)))
# 高斯-约旦消元
for i in range(m):
pivot = aug[i,i]
for j in range(i, 2*m):
aug[i,j] /= pivot
for k in range(m):
if k == i:
continue
factor = aug[k,i]
for j in range(i, 2*m):
aug[k,j] -= factor * aug[i,j]
A_inv = aug[:,m:]
print(A_inv)
```
输出结果与使用`np.linalg.inv`函数求解的结果一样:
```
[[ 0.66666667 -0.33333333]
[-0.33333333 0.66666667]]
```
但是需要注意的是,高斯-约旦消元法的计算复杂度为O(n^3),当n较大时,计算时间会比较长。
阅读全文