Materi
Diagonalisasi hanya untuk matriks persegi, dan diagonalisasi ortogonal hanya untuk matriks simetris. Dekomposisi nilai singular berlaku untuk SETIAP matriks A berukuran m × n: A = UΣVᵀ, dengan U ortogonal m × m, V ortogonal n × n, dan Σ berukuran m × n yang hanya berisi bilangan tak negatif σ₁ ≥ σ₂ ≥ … di diagonalnya (Austin §7.4, Kuttler §7.4). Bilangan σᵢ disebut nilai singular, dan banyaknya nilai singular yang tidak nol sama dengan rank A.
Kunci menghitungnya adalah pelajaran sebelumnya. AᵀA simetris dan nilai eigennya tidak negatif, sehingga nilai singular A adalah akar nilai eigen AᵀA, dan kolom V adalah vektor eigen ortonormal AᵀA. Kolom U yang sepadan didapat dari uᵢ = Avᵢ/σᵢ untuk σᵢ ≠ 0. Ditulis sebagai jumlah, A = σ₁u₁v₁ᵀ + σ₂u₂v₂ᵀ + … + σᵣuᵣvᵣᵀ: setiap suku adalah matriks rank 1, dan sukunya terurut dari sumbangan yang paling besar.
Memotong jumlah itu setelah k suku memberi Aₖ, matriks rank k. Austin §7.5 mencatat bahwa Aₖ adalah matriks rank k yang paling dekat ke A; inilah dasar kompresi citra dan analisis komponen utama. np.linalg.svd(A) mengembalikan U, S, dan Vh, dengan S larik nilai singular yang sudah terurut turun dan Vh adalah Vᵀ, bukan V: BARIS Vh-lah yang merupakan vektor vᵢ. Ini menjelaskan mengapa kelas sebelumnya mengambil basis ruang nol dari baris-baris terakhir Vh: baris itu adalah vᵢ untuk σᵢ = 0.
A = [[2, 2], [−1, 1]]
AᵀA = [[5, 3], [3, 5]], nilai eigen 8 dan 2
σ₁ = √8 ≈ 2,828, σ₂ = √2 ≈ 1,414 rank 2, κ(A) = σ₁/σ₂ = 2
v₁ = (1, 1)/√2: Av₁ = (4, 0)/√2, u₁ = Av₁/σ₁ = (1, 0)
v₂ = (1, −1)/√2: Av₂ = (0, −2)/√2, u₂ = Av₂/σ₂ = (0, −1)
import numpy as np
U, S, Vh = np.linalg.svd(np.array([[2., 2], [-1, 1]]))
S # array([2.82842712, 1.41421356])