python用QR方法求逆矩阵但不能用python自带的qr库和inv函数
时间: 2024-02-22 13:58:23 浏览: 108
Inv_matrix.rar_inv_matrix_inverse of matrix_矩阵 求逆_矩阵INV_逆矩阵
好的,我们可以手动实现 QR 分解和求逆矩阵的过程。下面是 Python 代码实现:
```python
import numpy as np
def qr_decomposition(matrix):
m, n = matrix.shape
Q = np.eye(m)
for j in range(n):
# 对第 j 列进行 Householder 变换,将其下方元素变为 0
v = matrix[j:m, j]
v[0] = v[0] + np.sign(v[0]) * np.linalg.norm(v)
v = v / np.linalg.norm(v)
matrix[j:m, j:n] = matrix[j:m, j:n] - 2 * np.outer(v, np.dot(v, matrix[j:m, j:n]))
# 构造 Q 矩阵
Qj = np.eye(m)
Qj[j:m, j:m] = np.eye(m-j) - 2 * np.outer(v, v)
Q = np.dot(Q, Qj)
R = np.triu(matrix)
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 是方阵,且满秩。如果输入的矩阵不是方阵或者不是满秩的,可能会出现计算错误。
阅读全文