不用python自带的qr函数,先做QR分解再求逆矩阵
时间: 2024-01-05 08:10:02 浏览: 143
复数矩阵QR分解求逆矩阵
4星 · 用户满意度95%
好的,我们可以结合上面两个回答的内容,手动实现 QR 分解和求逆矩阵的过程。下面是 Python 代码实现:
```python
import numpy as np
def qr_decomposition(matrix):
m, n = matrix.shape
Q = np.zeros((m, n))
R = np.zeros((n, n))
for j in range(n):
v = matrix[:, j]
for i in range(j):
R[i, j] = np.dot(Q[:, i], matrix[:, j])
v = v - R[i, j] * Q[:, i]
R[j, j] = np.linalg.norm(v)
Q[:, j] = v / R[j, j]
return Q, R
def inverse(matrix):
# 对矩阵进行 QR 分解
Q, R = qr_decomposition(matrix)
# 求 R 的逆矩阵
R_inv = np.zeros_like(R)
for i in range(R.shape[0]):
R_inv[i, i] = 1 / R[i, i]
for j in range(i+1, R.shape[0]):
R_inv[i, j] = - R_inv[i, i] * np.dot(R[i, i:j], R_inv[i:j, j])
# 求逆矩阵 A^-1 = R^-1 * Q^T
A_inv = np.dot(R_inv, Q.T)
return A_inv
```
这里的 `qr_decomposition` 函数实现了手动计算 QR 分解的过程,返回的是 Q 矩阵和 R 矩阵。`inverse` 函数则实现了对矩阵求逆的过程,返回的是矩阵的逆矩阵。需要注意的是,这里默认输入的矩阵 A 是方阵,且满秩。如果输入的矩阵不是方阵或者不是满秩的,可能会出现计算错误。
阅读全文