Dekomposisi mengurai satu matriks menjadi hasil kali matriks-matriks yang strukturnya lebih sederhana, sehingga sifat tersembunyi seperti arah tetap dan sebaran energi dapat dibaca langsung. Topik ini membahas dekomposisi nilai eigen dengan eig beserta verifikasi pasangan nilai dan vektornya, serta diagonalisasi matriks simetrik. Dekomposisi nilai singular dengan svd dibahas untuk matriks persegi panjang, lengkap dengan makna nilai singular sebagai energi dan penerapannya pada kompresi peringkat rendah sebuah matriks data. Setelah membaca topik ini, struktur sebuah matriks dapat diperiksa, diverifikasi, dan diringkas berdasarkan hasil dekomposisinya.
Nilai dan vektor eigen#
Nilai eigen menyatakan arah yang tidak berubah ketika matriks bekerja. Sebuah vektor disebut vektor eigen dari dengan nilai eigen apabila
artinya perkalian oleh hanya meregangkan dengan faktor tanpa memutar arahnya. Pemanggilan [V, D] = eig(A) menghasilkan kedua hal sekaligus, yaitu matriks V yang kolom-kolomnya adalah vektor eigen dan matriks diagonal D yang elemen diagonalnya adalah nilai eigen. Pasangannya ketat, yaitu kolom ke- dari V berpasangan dengan elemen diagonal ke- dari D, sehingga verifikasi cukup mengalikan A dengan satu kolom lalu membandingkannya dengan hasil kali skalar kolom tersebut.
A = [2 1; 1 2];
[V, D] = eig(A);
d = diag(D)
disp('matriks V:')
disp(V)
disp('ruas kiri, A * V(:, 1):')
disp(A * V(:, 1))
disp('ruas kanan, d(1) * V(:, 1):')
disp(d(1) * V(:, 1))
fprintf('norm(A*V - V*D) = %.2e\n', norm(A*V - V*D));d =
1
3
matriks V:
-0.7071 0.7071
0.7071 0.7071
ruas kiri, A * V(:, 1):
-0.7071
0.7071
ruas kanan, d(1) * V(:, 1):
-0.7071
0.7071
norm(A*V - V*D) = 0.00e+00Matriks memiliki nilai eigen 1 dan 3 dengan vektor eigen dan , yaitu arah diagonal bidang. Ruas kiri dan ruas kanan tampil identik, dan pemeriksaan serentak norm(A*V - V*D) bernilai nol membuktikan seluruh kolom terpenuhi sekaligus. Rumus karena itu dapat digunakan sebagai uji mutu hasil eig pada matriks apa pun, sebagaimana sisa menjadi uji mutu penyelesaian sistem.
Diagonalisasi matriks simetrik#
Matriks simetrik memenuhi . Dekomposisi eigen matriks semacam ini sangat rapi, yaitu seluruh nilai eigen merupakan bilangan riil dan seluruh vektor eigen saling tegak lurus. Kumpulan vektor eigen yang saling tegak lurus membentuk matriks ortogonal dengan , sehingga matriks simetrik dapat ditulis sebagai
dengan matriks diagonal nilai eigen. Bentuk ini disebut diagonalisasi, dan memanfaatkannya berarti membongkar menjadi urutan peregangan murni pada arah-arah vektor eigennya. Kedua identitas tersebut dapat diperiksa langsung dari hasil eig.
S = [4 1 0; 1 4 1; 0 1 4];
[W, E] = eig(S);
e = diag(E)
fprintf("norm(W' * W - I) = %.2e\n", norm(W' * W - eye(3)));
fprintf("norm(W' * S * W - E) = %.2e\n", norm(W' * S * W - E));e =
2.5858
4.0000
5.4142
norm(W' * W - I) = 1.10e-15
norm(W' * S * W - E) = 3.07e-15Nilai eigen 2.5858, 4, dan 5.4142 adalah , 4, dan . Norma W' * W - I berorde menegaskan kolom-kolom W saling tegak lurus hingga batas pembulatan, dan norma W' * S * W - E pada orde yang sama menegaskan hasil kali tersebut memang diagonal. Angka ini bukan kegagalan melainkan jejak pembulatan bilangan floating point yang wajar, dan membandingkan norma selisih dengan toleransi kecil adalah cara baku memverifikasi identitas numerik.
Dekomposisi nilai singular#
Matriks persegi panjang tidak memiliki nilai eigen karena vektor masukan dan hasil kali berada pada ruang berdimensi berbeda, sehingga persamaan tidak dapat dipenuhi. Peran struktural dekomposisi nilai eigen digantikan oleh dekomposisi nilai singular. Pemanggilan [U, S, V] = svd(A) untuk matriks menghasilkan
dengan U matriks ortogonal , V matriks ortogonal , dan S matriks persegi panjang yang hanya berisi diagonal tak negatif yang disebut nilai singular. Nilai singular menyatakan energi karena jumlah kuadrat seluruh elemen sama dengan jumlah kuadrat nilai singularnya,
dengan norma Frobenius, sehingga nilai singular terbesar menyimpan porsi energi terbesar dari matriks tersebut.
% svd_energi.m: mengurai matriks persegi panjang dengan svd dan memeriksa energinya
A = [2 1;
1 3;
2 2;
4 1]; % 4 x 2
[U, S, V] = svd(A);
s = diag(S);
disp('nilai singular:')
disp(s)
fprintf('ukuran U: %s, ukuran S: %s, ukuran V: %s\n', ...
mat2str(size(U)), mat2str(size(S)), mat2str(size(V)));
fprintf('energi A, jumlah kuadrat elemen : %.4f\n', sum(A(:).^2));
fprintf('energi nilai singular : %.4f\n', sum(s.^2));
fprintf("norm(A - U*S*V') : %.2e\n", norm(A - U*S*V'));nilai singular:
5.8248
2.4641
ukuran U: [4 4], ukuran S: [4 2], ukuran V: [2 2]
energi A, jumlah kuadrat elemen : 40.0000
energi nilai singular : 40.0000
norm(A - U*S*V') : 1.72e-15Matriks pada contoh memiliki dua nilai singular, 5.8248 dan 2.4641, karena hanya ada paling banyak dua arah bebas pada kolomnya. Ukuran S mengikuti bentuk A sedangkan U dan V persegi, dan rekonstruksi U*S*V' mengembalikan A hingga norma selisih . Kedua nilai energi yang sama, yaitu 40, menegaskan hubungan norma Frobenius dengan nilai singular. Penggunaan kata energi menjadi konkret karena menyimpan sekitar 85 persen dari total kuadrat elemen matriks ini.
Kompresi peringkat rendah#
Nilai singular yang menurun tajam menyediakan cara meringkas matriks, yaitu buang suku-suku bernilai kecil dan simpan sisanya. Rekonstruksi peringkat menggunakan nilai singular teratas,
yang dalam kode ditulis sebagai U(:, 1:k) * S(1:k, 1:k) * V(:, 1:k)'. Hasilnya adalah aproksimasi peringkat terbaik terhadap dalam arti norma Frobenius, sehingga error relatifnya dapat dihitung sebagai norm(A - Ak, 'fro') / norm(A, 'fro'). Matriks data yang saling berkorelasi antar kolomnya adalah kasus yang cocok karena informasinya berulang sehingga sebagian kecil nilai singular menangkap hampir seluruh isi.
Contoh berikut menggunakan matriks data berisi catatan tiga saluran suhu. Ketiga saluran mencatat tren yang sama dengan ofset dan deviasi tetap yang berbeda. Kolom-kolom yang hampir sejajar membuat energi terpusat pada nilai singular pertama, sehingga aproksimasi peringkat satu diharapkan sudah mewakili hampir seluruh matriks.
% kompresi_peringkat.m: merekonstruksi matriks data dengan sebagian nilai singular
%
% tiga saluran pengukuran suhu mencatat tren yang sama tiap menit,
% sehingga matriks data mendekati peringkat rendah
waktu = (0:5)';
sinyal = 20 + 2*waktu; % tren suhu dasar
A = [sinyal, sinyal + 0.5, sinyal - 0.5]; % tiga saluran dengan ofset
A = A + [ 0.0 0.2 -0.1;
-0.1 0.0 0.2;
0.1 -0.2 0.0;
0.2 0.1 -0.2;
-0.2 0.0 0.1;
0.1 0.2 0.0]; % deviasi tetap tiap sel
disp('matriks data A:')
disp(A)
[U, S, V] = svd(A);
s = diag(S);
disp('nilai singular:')
disp(s)
for k = 1:3
Ak = U(:, 1:k) * S(1:k, 1:k) * V(:, 1:k)';
error_relatif = norm(A - Ak, 'fro') / norm(A, 'fro');
energi = sum(s(1:k).^2) / sum(s.^2);
fprintf('peringkat %d: energi %.6f, error relatif %.4f\n', k, energi, error_relatif);
endmatriks data A:
20.000 20.700 19.400
21.900 22.500 21.700
24.100 24.300 23.500
26.200 26.600 25.300
27.800 28.500 27.600
30.100 30.700 29.500
nilai singular:
107.1658
0.4696
0.3347
peringkat 1: energi 0.999971, error relatif 0.0054
peringkat 2: energi 0.999990, error relatif 0.0031
peringkat 3: energi 1.000000, error relatif 0.0000Nilai singular pertama, 107.1658, menonjol jauh dibandingkan dua nilai sisanya yang berorde sepersepuluh, sehingga satu arah saja menangkap 99.997 persen energi. Aproksimasi peringkat satu menghasilkan error relatif hanya 0.0054, artinya matriks berisi 18 angka dapat diwakili oleh satu kolom elemen, satu kolom elemen, dan satu skalar. Peringkat dua memperbaiki sedikit karena ofset antar saluran ikut tertangkap, dan peringkat tiga mengembalikan matriks asalnya secara penuh karena pangkat matriksnya memang tiga. Prinsip yang sama bekerja pada matriks data yang jauh lebih besar, misalnya matriks citra dan matriks pengukuran bertahun-tahun, ketika sebagian kecil nilai singular menyimpan hampir seluruh informasi.
Kesalahan umum#
- Mengandaikan urutan nilai eigen menaik atau menurun. Fungsi
eigtidak menjanjikan urutan tertentu, sehingga urutan pada satu implementasi atau satu versi dapat berbeda dari yang lain. Nilai singular darisvdselalu menurun, tetapi untuk nilai eigen, gunakand = sort(diag(D))ketika urutan memang dibutuhkan. - Mengambil baris
Vsebagai vektor eigen. Vektor eigen adalah kolomV, sehinggaV(k, :)tidak berpasangan denganD(k, k)dan perbandingannya menyesatkan. Selalu verifikasi denganA * V(:, k)dibandingkanD(k, k) * V(:, k). - Tertukar antara vektor nilai singular dan matriksnya. Pemanggilan
s = svd(A)mengembalikan vektor nilai singular, sedangkan[U, S, V] = svd(A)mengembalikan matriks diagonal diS. Keduanya berbeda bentuk meskipun berisi angka yang sama, dandiag(S)menjadi jembatan antara keduanya.
Ringkasan#
[V, D] = eig(A)menghasilkan vektor eigen pada kolomVdan nilai eigen pada diagonalD, dengan pasangan kolom ke- dan elemen diagonal ke- yang diverifikasi lewat .- Matriks simetrik memiliki vektor eigen ortogonal sehingga dengan verifikasi
norm(W' * W - eye(n))dannorm(W' * S * W - E)berorde pembulatan. [U, S, V] = svd(A)berlaku untuk matriks persegi panjang, dan jumlah kuadrat nilai singularnya sama dengan energi .- Rekonstruksi dengan nilai singular teratas memberi aproksimasi peringkat terbaik, dan error relatifnya memutuskan berapa nilai singular yang layak disimpan.
Referensi#
- eig — MathWorks — Rujukan resmi dekomposisi nilai eigen beserta struktur keluarannya.
- svd — MathWorks — Rujukan resmi dekomposisi nilai singular untuk matriks persegi dan persegi panjang.
- norm — MathWorks — Rujukan norma vektor dan matriks, termasuk norma Frobenius yang digunakan untuk mengukur error relatif.