Singular Value Decomposition
Singular Value Decomposition
Singular Value Decomposition
'''
I Kadek Agus Wahyu Raharja(23219019)
SVD Decomposition
'''
import numpy as np
from math import sqrt
#Fungsi transpose
def transpose(A):
result = [[A[j][i] for j in range(A.shape[0])]
for i in range(A.shape[1])]
result1 = np.array(result)
return result1
#Fungsi perkalian
def multiply(A,B):
rowA,rowB,colA,colB = len(A),len(B),len(A[0]),len(B[0])
result = []
for i in range (rowA):
row = []
for j in range(colB):
X = 0
for k in range(colA):
X += A[i][k]*B[k][j]
row.append(X)
result.append(row)
result1 = np.array(result)
return result1
#fungsi membuat matrix identitas
def make_identity(r,c):
identity = []
for i in range(0,r):
row = []
for j in range(0,c):
elem = 0
if i==j:
elem = 1
row.append(elem)
identity.append(row)
return identity
def make_householder(a):
v = a / (a[0] + np.copysign(norm(a), a[0]))
v[0] = 1
H = np.eye(a.shape[0])
H -= (2 / np.dot(v, v)) * np.dot(v[:, None], v[None, :])
return H
m = np.array(I)
return m
while(run):
Vs += 1
Q1, R1 = qr(np.array(CTC))
V = multiply(V,Q1)
CTC2 = multiply(R1,Q1)
for i in range(m):
for j in range(m):
if (i>j and CTC2[i][j]>0 and CTC2[i][j]<1.0e-05):
run = False
CTC = CTC2
Berdasarkan program dapat dilihat matriks A adalah matriks yang ditentukan secara acak dengan
dimensi matriks A (10x5) . Dari matriks A akan digunakan persamaan SVD sebagai berikut :
𝐴 = 𝜇∑𝑉 𝑇 ………………...….(1)
𝐴𝑇 𝐴 = 𝑉∑𝑇 ∑𝑉 𝑇 ……………….(2)
𝐴𝑉 = 𝜇∑……………………..(3)
Setelah menentukan nilai 𝐴𝑇 𝐴 selanjutnya kitan mendapatkan nilai eigen value yang merupakan
nilai dari ∑ dan nilai eigenvector yang merupakan nilai dari matriks V. Setelah mendapatkan nilai
∑ selanjutnya nilai ∑ akan dieleminasi, dimana apabila nilai ∑ < 0.1 maka akan dianggap nol.
Selanjutnya berdasarkan Persamaan (3) maka kita mendapatkan nilai 𝜇 . Untuk membuktikan
apakah nilai 𝜇, ∑, 𝑉 sudah benar maka kita masukan pada Persamaan (1). Maka output dari
program yang telah dibuat dapat dilihat sebagai berikut :
Output :
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC
v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more
information.
>>>
========================RESTART: D:/SVD.py ==========================
Matriks A dengan dimensi 10 x 5 :
[[4 4 2 8 5]
[7 2 6 6 3]
[6 7 5 5 3]
[2 6 1 6 4]
[7 2 4 1 8]
[5 2 8 6 2]
[1 6 1 2 8]
[6 1 8 6 7]
[1 5 1 3 6]
[8 2 8 1 6]]
Nilai Sigma adalah :
[[24.01425418 0. 0. 0. 0. ]
[ 0. 24.01425418 0. 0. 0. ]
[ 0. 0. 24.01425418 0. 0. ]
[ 0. 0. 0. 24.01425418 0. ]
[ 0. 0. 0. 0. 12.15720077]]
Setelah mengeleminasi nilai sigma dengan batas 0.1 maka nilai sigma :
[[24.01425418 0. 0. 0. 0. ]
[ 0. 24.01425418 0. 0. 0. ]
[ 0. 0. 2.40142542 0. 0. ]
[ 0. 0. 0. 2.40142542 0. ]
[ 0. 0. 0. 0. 1.21572008]]
Nilai matriks V adalah :
[[-0.48981484 0.39834159 0.09733972 0.14728551 -0.75514062]
[-0.3332145 -0.60981414 -0.09825936 0.71204821 0.02067022]
[-0.46667664 0.56141058 -0.04680224 0.23740399 0.63912438]
[-0.43072532 -0.20143614 -0.73982998 -0.4757362 -0.01502851]
[-0.49571982 -0.33718294 0.65675812 -0.43429107 0.14362994]]
Nilai matriks miu adalah :
[[-0.42266032 -0.12577833 -0.11377127 -0.08599901 -0.08733188]
[-0.45667477 0.11314366 -0.09430481 -0.01156694 -0.08794614]
[-0.46828686 -0.04540329 -0.08605988 0.14047974 -0.06866572]
[-0.33366951 -0.20230233 -0.09384536 0.00885652 -0.02161573]
[-0.43134062 0.03812342 0.20037622 -0.02270959 -0.12783661]
[-0.434105 0.14076563 -0.13365819 0.0140232 0.12961217]
[-0.32409866 -0.24150108 0.13472775 0.00962669 0.09270124]
[-0.5438398 0.11254244 0.01123033 -0.09991822 0.12486921]
[-0.28687374 -0.19641354 0.05331415 -0.00366551 0.06613603]
[-0.48818526 0.17630593 0.14193653 0.05913695 -0.00329339]]
Membuktikan dengan fungsi A = miu*sigma*V.T :
[[4. 4. 2. 8. 5.]
[7. 2. 6. 6. 3.]
[6. 7. 5. 5. 3.]
[2. 6. 1. 6. 4.]
[7. 2. 4. 1. 8.]
[5. 2. 8. 6. 2.]
[1. 6. 1. 2. 8.]
[6. 1. 8. 6. 7.]
[1. 5. 1. 3. 6.]
[8. 2. 8. 1. 6.]]
>>>
Berdasarkan output nilai 𝜇, ∑, 𝑉 sudah benar karena hasil dari (𝜇∑𝑉 𝑇 ) memiliki nilai yang sama
dengan matriks A.
Pseudocode Program SVD Decomposition
Berikut adalah pseudocode program utama dari SVD Decomposition
Pseudocode SVD Decomposition
Program ini menunjukan cara kerja sistem dimana sistem akan mencari
nilai 𝜇∑𝑉 𝑇 dan membuktikan apakah nilai output sudah benar dan
sesuai dengan input matriks
INPUT :
1. orde matriks A = m x n
2. Random matriks A
SET :
1. V matriks identitas dengan orde (m x n)
2. Run = True
3. CTC = transpose(A) * A
WHILE (Run) :
1. Qn += 1
2. Mencari nilai Q dan R dari CTCk
3. V = V*Q (untuk menentukan nilai eigenvector dengan
mengalikan semua nilai Q)
4. CTCk+1 = R*Q (mencari nilai matriks CTC baru)
5. FOR (nilai baris matriks CTC = i):
FOR(nilai kolom matriks CTC = j):
IF (i>j and CTC2[i][j]>0 and CTC2[i][j]<1.0e-05):
(jika nilai komponen
matriks A
pada diagonal bawah
bernilai mendekati
zeros)
Run = False
BREAK WHILE;
END FOR
END FOR
CTCk = CTC2k+1 (agar dapat memproses nilai A selanjutnya)
// mengeleminasi sigma < 0.1
6. Sigma = diagonal matriks dari CTC2
7. Batas = 0.1 * sigma
8. IF (any of batas < 0.1):
batas = 0
ELSE :
batas = batas
9. Miu = A*V*(sigma)-1
10. B = miu*sigma*transpose(V)
OUTPUT: