Untitled

 avatar
unknown
plain_text
5 days ago
643 B
4
Indexable
import numpy as np

def householder_qr(A):
    n = A.shape[0]
    Q = np.eye(n)
    R = A.copy()

    for k in range(n - 1):
        x = R[k:, k]
        e = np.zeros_like(x)
        e[0] = np.linalg.norm(x)
        if x[0] > 0:
            e[0] = -e[0]
        
        v = x - e
        v = v / np.linalg.norm(v)

        Q_k = np.eye(n)
        Q_k[k:, k:] -= 2.0 * np.outer(v, v)

        R = Q_k @ R
        Q = Q @ Q_k.T

    return Q, R

# Example Usage
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 10]], dtype=np.float64)
Q, R = householder_qr(A)

print("Matrix Q (Orthogonal):")
print(Q)
print("\nMatrix R (Upper Triangular):")
print(R)
Leave a Comment