Materi
Matriks yang kolom-kolomnya ortonormal memenuhi QᵀQ = I, karena unsur (i, j) dari QᵀQ adalah qᵢ · qⱼ. Bila Q juga persegi, ia disebut matriks ortogonal dan inversnya tinggal transposnya, Q⁻¹ = Qᵀ (Kuttler §4.11). Perkalian dengan Q menjaga hasil kali titik, (Qx) · (Qy) = x · y, sehingga panjang dan sudut tidak berubah; rotasi dan pencerminan dari kelas Aljabar Linier adalah contohnya. Determinannya selalu 1 atau −1. Sistem Qx = b diselesaikan tanpa eliminasi: x = Qᵀb.
Gram–Schmidt pada kolom-kolom A yang bebas linear menghasilkan Q dengan kolom ortonormal yang merentang Col A. Setiap kolom aⱼ adalah kombinasi q₁, …, qⱼ saja, dengan koefisien rᵢⱼ = qᵢ · aⱼ. Dicatat sebagai matriks, A = QR dengan R = QᵀA segitiga atas, dan diagonalnya positif bila Q berasal dari Gram–Schmidt (Austin §6.4, Kuttler §7.4). Untuk A berukuran m × n, Q berukuran m × n dan R berukuran n × n.
np.linalg.qr(A) mengembalikan Q dan R dalam bentuk yang sama (mode "reduced" bawaan), tetapi menghitungnya dengan cara lain, sehingga sebagian unsur diagonal R bisa negatif. Faktorisasinya tetap sah: membalik tanda satu kolom Q bersama baris R yang sepadan tidak mengubah hasil kali QR. Bila diagonal positif dibutuhkan, kalikan kolom Q dan baris R dengan tanda unsur diagonal itu; np.sign memberi tanda tersebut.
A = [[1, 2],
[2, 0],
[2, 1]]
a₁ = (1, 2, 2), ‖a₁‖ = 3 → q₁ = (1/3, 2/3, 2/3), r₁₁ = 3
r₁₂ = q₁·a₂ = (2 + 0 + 2)/3 = 4/3
a₂ − r₁₂q₁ = (2, 0, 1) − (4/9, 8/9, 8/9) = (14/9, −8/9, 1/9)
r₂₂ = ‖(14, −8, 1)‖/9 = √261/9 ≈ 1,795
R = [[3, 4/3], [0, 1,795]]
import numpy as np
Q, R = np.linalg.qr(np.array([[1., 2], [2, 0], [2, 1]]))
R # diagonal bisa bertanda negatif; Q @ R tetap sama dengan A