from numpy.random import randint import numpy as np def inverse_matrix(A): # 获取矩阵A的行数和列数 n, m = A.shape # 构造增广矩阵 A_aug = np.hstack((A, np.eye(n))) # 对增广矩阵进行高斯-约旦消元 for i in range(n): # 如果A[i][i]为0,则交换当前行和下面行中A[i][i]不为0的行 if A_aug[i][i] == 0: for j in range(i+1, n): if A_aug[j][i] != 0: A_aug[[i,j]] = A_aug[[j,i]] break # 将A[i][i]归一 A_aug[i] = A_aug[i] / A_aug[i][i] # 将非当前行的第i列元素变为0 for j in range(n): if j != i: A_aug[j] = A_aug[j] - A_aug[j][i]*A_aug[i] # 返回矩阵A的逆矩阵 A_inv = A_aug[:, n:] return A_inv修改这段代码,实现目的不变,但是增广矩阵不是原矩阵加单位矩阵,而是加一个列矩阵
时间: 2023-10-03 14:05:28 浏览: 87
可以直接修改第5步,将增广矩阵的右半部分从单位矩阵改为一个列矩阵。具体修改代码如下:
```python
from numpy.random import randint
import numpy as np
def inverse_matrix(A):
# 获取矩阵A的行数和列数
n, m = A.shape
# 构造增广矩阵,右半部分是一个列矩阵
b = np.zeros((n, 1))
A_aug = np.hstack((A, b))
# 对增广矩阵进行高斯-约旦消元
for i in range(n):
# 如果A[i][i]为0,则交换当前行和下面行中A[i][i]不为0的行
if A_aug[i][i] == 0:
for j in range(i+1, n):
if A_aug[j][i] != 0:
A_aug[[i,j]] = A_aug[[j,i]]
break
# 将A[i][i]归一
A_aug[i] = A_aug[i] / A_aug[i][i]
# 将非当前行的第i列元素变为0
for j in range(n):
if j != i:
A_aug[j] = A_aug[j] - A_aug[j][i]*A_aug[i]
# 返回矩阵A的逆矩阵
A_inv = A_aug[:, n:]
return A_inv
```
这样,我们就可以实现与原代码相同的功能,只是增广矩阵的右半部分不再是单位矩阵,而是一个列矩阵。
阅读全文