💡 Aljabar Vektor, Matriks, Dekomposisi Matriks, dan Konsep Jarak

Pengertian, Contoh, dan Implementasi

Disusun oleh Nana Puspita Huwaina

Tanggal: 2025-09-09

1 Daftar Isi

2 Pendahuluan

::: Matriks adalah salah satu bagian penting dalam aljabar linear yang dapat didefinisikan sebagai Susunan angka-angka di dalam kotak yang dibagi ke dalam baris dan kolom. Matriks memiliki berbagai pengoperasian, antara lain: Penjumlahan, pengurangan, Perkalian, Transpose, invers, dan determinan menjadi dasar dalam penyelesaian dalam permasalahan matriks Selain itu, Konsep matriks lainnya yaitu Dekomposisi matriks, dekomposisi matriks sangat diperlukan untuk memecah matriks kompleks menjadi bentuk yang lebih sederhana, seperti Singular Value Dekomposisi yang memecah suatu matriks menjadi 3 bagian, SVD memudahkan analisis data maupun penyelesaian sistem persamaan linear. Di sisi lain, dalam analisis data dan statistika multivariat, diperlukan pula konsep jarak untuk mengukur kedekatan antar objek, baik dengan jarak Euclidean, Manhattan, Minkowski, maupun Mahalanobis. :::

3 Operasi Matriks

3.1 Pengertian dan Rumus

3.1.1 Penjumlahan

Menjumlahkan elemen-elemen yang terdapat pada matriks dengan posisi yang sama dan dijadikan dalam 1 bagian matriks

\[ (A + B)_{ij} = a_{ij} + b_{ij} \]

3.1.2 Pengurangan

Mengurangi elemen - elemen yang terdapat pada matriks dengan posisi yang sama dan dijadikan dalam 1 matriks

\[ (A -B)_{ij} = a_{ij} -b_{ij} \]

3.1.3 Perkalian elemen

Mengalikan elemen-elemen yang terdapat pada 2 matriks dengan cara mengalikan baris dari matriks pertama dengan kolom dari matriks kedua lalu menjumlahkan hasilnya.

\[ C_{ij} = a_{ij} \times b_{ij}\\ \]

3.1.4 Perkalian Matriks dengan Skalar

Mengalikan elemen-elemen yang berada dalam matriks dengan angka dalam bentuk skalar

\[ (kA)_{ij} = k \cdot a_{ij} \]

3.1.5 Perkalian dot product

Mengalikan elemen-elemen yang terdapat dalam 2 matriks dengan posisi yang sama kemudian hasil dari perkalian di jumlahkan sehinggal hasil dari dot product ini berbentuk skalar.

\[ (AB)_{ij} = \sum_{k=1}^n a_{ik} b_{kj} \]

3.1.6 Transpose

Transpose matriks merupakan operasi matriks dengan menukar baris menjadi kolom, dan kolom menjadi baris.

\[ \text{Jika } A = [a_{ij}], \text{ maka } A^T = [a_{ji}] \]

3.1.7 Invers

Invers merupakan operasi matriks dengan syarat matriks harus berbentuk persegi kemudian hasil dari invers ini adalah matriks yang kebalikan dari matriks itu sendiri

\[ A^{-1} = \frac{1}{ad - bc} \begin{bmatrix} d & -b \\ -c & a \end{bmatrix} \]

3.1.8 Determinan

Determinan Merupakan suatu bilangan skalar yang dihitung dari elemen-elemen sebuah matriks persegi. Determinan memberikan informasi apakah matriks tersebut memiliki invers atau tidak. $$

(A) =

\[\begin{vmatrix} a & b \\ c & d \end{vmatrix}\]

= ad - bc \det(A) =

\[\begin{vmatrix} a & b & c \\ d & e & f \\ g & h & i \end{vmatrix}\]

= a(ei - fh) - b(di - fg) + c(dh - eg) $$

3.2 Contoh dan Implementasi diberikan matriks X dan Y, yaitu

A = matrix(c(1.1, 2.2, 1.2,
             4.3, 2.1, 3.1,
             2.7, 3.6, 5.5),  nrow = 3, ncol = 3)

B = matrix(c(3.6, 2.5, 3.3,
             4.1, 5.1, 3.9,
             2.6, 3.8, 4.7), nrow = 3, ncol = 3, byrow = TRUE)

A
##      [,1] [,2] [,3]
## [1,]  1.1  4.3  2.7
## [2,]  2.2  2.1  3.6
## [3,]  1.2  3.1  5.5
B
##      [,1] [,2] [,3]
## [1,]  3.6  2.5  3.3
## [2,]  4.1  5.1  3.9
## [3,]  2.6  3.8  4.7

3.2.1 Penjumlahan

A+B
##      [,1] [,2] [,3]
## [1,]  4.7  6.8  6.0
## [2,]  6.3  7.2  7.5
## [3,]  3.8  6.9 10.2

3.2.2 Pengurangan

A-B
##      [,1] [,2] [,3]
## [1,] -2.5  1.8 -0.6
## [2,] -1.9 -3.0 -0.3
## [3,] -1.4 -0.7  0.8

3.2.3 Perkalian Elemen

A * B
##      [,1]  [,2]  [,3]
## [1,] 3.96 10.75  8.91
## [2,] 9.02 10.71 14.04
## [3,] 3.12 11.78 25.85

3.2.4 Perkalian Matriks dengan Skalar

3 * A
##      [,1] [,2] [,3]
## [1,]  3.3 12.9  8.1
## [2,]  6.6  6.3 10.8
## [3,]  3.6  9.3 16.5
4 * B
##      [,1] [,2] [,3]
## [1,] 14.4 10.0 13.2
## [2,] 16.4 20.4 15.6
## [3,] 10.4 15.2 18.8

3.2.5 Perkalian Matriks (Dot Products)

A %% B
##      [,1] [,2] [,3]
## [1,]  1.1  1.8  2.7
## [2,]  2.2  2.1  3.6
## [3,]  1.2  3.1  0.8
B %% A
##      [,1] [,2] [,3]
## [1,]  0.3  2.5  0.6
## [2,]  1.9  0.9  0.3
## [3,]  0.2  0.7  4.7

3.2.6 Transpose

t(A)
##      [,1] [,2] [,3]
## [1,]  1.1  2.2  1.2
## [2,]  4.3  2.1  3.1
## [3,]  2.7  3.6  5.5
t(B)
##      [,1] [,2] [,3]
## [1,]  3.6  4.1  2.6
## [2,]  2.5  5.1  3.8
## [3,]  3.3  3.9  4.7

3.2.7 Invers

solve(A) # inv(A)
##             [,1]        [,2]        [,3]
## [1,] -0.01821153  0.71351856 -0.45809012
## [2,]  0.36329675 -0.13121644 -0.09245856
## [3,] -0.20079384 -0.08171842  0.33387812
solve(B) # inv(B)
##            [,1]        [,2]        [,3]
## [1,]  0.5148838  0.04445445 -0.39840189
## [2,] -0.5137584  0.46930392 -0.02869844
## [3,]  0.1305498 -0.40402904  0.45636149

3.2.8 Determinan

det(A)
## [1] -21.415
det(B)
## [1] 17.771

4 Eigen Value dan Eigen Vector

4.1 Pengertian dan Rumus

4.1.1 Eigen Value

eigen value adalah suatu bilangan skalar λ yang menunjukkan seberapa besar suatu eigenvector berubah arah atau panjang ketika dikalikan dengan sebuah matriks.

\[ A v = \lambda v \] untuk mencari eigen value, digunakan rumus : \[ \det(A - \lambda I) = 0 \]

4.1.2 Eigen Vector

Egenvector adalah vektor khusus yang arahnya tidak berubah ketika dikenai transformasi linear oleh sebuah matriks, hanya panjangnya saja yang bertambah atau berkurang. perubahan panjang tersebut ditentukan oleh bilangan skalar yang disebut eigenvalue.

\[(A - \lambda I)v = 0\]

4.1.3 Pasangan Eigen

Pasangan Eigen merupakan kombinasi dari eigenvalue dan eigen vektor yang sesuai.

\[ (\lambda, v) \]

4.2 Contoh dan Implementasi

Diberikan sebuah matriks berukuran 3 x 3, yaitu

A = matrix(c(1,3,2,
             0,2,1,
             4,3,1), nrow=3, byrow=TRUE)

4.2.1 Eigen Value

eigA <- eigen(A)
eigA$values
## [1]  5.000000 -1.618034  0.618034

4.2.2 Eigen Vektor

eigA$vectors
##           [,1]       [,2]       [,3]
## [1,] 0.5797410  0.3958428  0.3406402
## [2,] 0.2576627  0.2446443 -0.5511674
## [3,] 0.7729880 -0.8851314  0.7616946

4.2.3 Pasangan Eigen

for (i in seq_along(eigA$values)) {
  cat("\nPasangan ke-", i, ":\n")
  cat("Eigenvalue =", eigA$values[i], "\n")
  cat("Eigenvector =\n")
  print(eigA$vectors[, i])
}
## 
## Pasangan ke- 1 :
## Eigenvalue = 5 
## Eigenvector =
## [1] 0.5797410 0.2576627 0.7729880
## 
## Pasangan ke- 2 :
## Eigenvalue = -1.618034 
## Eigenvector =
## [1]  0.3958428  0.2446443 -0.8851314
## 
## Pasangan ke- 3 :
## Eigenvalue = 0.618034 
## Eigenvector =
## [1]  0.3406402 -0.5511674  0.7616946

5 Singular Value Decompoasition (SDV)

5.1 Pengertian dan Rumus Singular

singular value decomposition (svd) adalah metode dalam aljabar linear yang memecah sebuah matriks 𝐴 menjadi tiga matriks, yaitu U dan V berisi matriks ortonormal dan sigma berisi matriks singular value.

\[ A \in \mathbb{R}^{m \times n} \] dapat dituliskan sebagai: \[ A = UDV^T \]

dengan :

\[ U \in \mathbb{R}^{m \times m}, U^TU = I_m\ (ortogonal)\\V \in \mathbb{R}^{n \times n}\, \ V^TV = I_n\ (ortogonal) \\D \in \mathbb{R}^{m \times n}\\ diagonal\ dengan\ elemen\ singular\ value: \ D = \begin{bmatrix} \ D_1 & 0 & \cdots & 0 \\ 0 & \ D_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \ D_r \end{bmatrix} \]

5.2 Contoh dan Implementasi

diberikan matriks sebagai berikut :

# Matriks A
A = matrix(c(2, -1, 3,
             4, 5, -1,
             -2, 3, 5,
             3, 4, 3), 4, 3, byrow = TRUE)
A
##      [,1] [,2] [,3]
## [1,]    2   -1    3
## [2,]    4    5   -1
## [3,]   -2    3    5
## [4,]    3    4    3

5.2.1 Singular Value Decomposition

svd_result <- svd(A)

singular_value <- svd_result$d
U <- svd_result$u
V <- svd_result$v

U
##            [,1]         [,2]       [,3]
## [1,] -0.1726703 -0.239947505 -0.8666270
## [2,] -0.5871644  0.626321632  0.1682518
## [3,] -0.4312181 -0.741653592  0.4251125
## [4,] -0.6629282 -0.009816237 -0.1998209
V
##            [,1]       [,2]       [,3]
## [1,] -0.4376174  0.5558645 -0.7067572
## [2,] -0.7684550  0.1769132  0.6149623
## [3,] -0.4668704 -0.8122293 -0.3497365
singular_value
## [1] 8.729879 6.259170 3.551339

6 Konsep Jarak

6.1 Pengertian dan Rumus

6.1.1 Jarak Euclidean

Jarak euclidean adalah ukuran jarak terpendek antara dua titik yang dihubungkan oleh garis lurus. konsep ini sama seperti menghitung jarak lurus antara dua titik di peta tanpa mengikuti jalan yang berliku.

\(p\) dimensi. \[ d_{\text{Euclidean}}(x,y) = \sqrt{\sum_{i=1}^p (x_i - y_i)^2} \]

6.1.2 Jarak Manhattan

Jarak manhattan adalah ukuran jarak antara dua titik dengan cara menjumlahkan perbedaan mutlak tiap koordinatnya. konsep ini seperti menghitung jarak di kota dengan jalan berbentuk kotak-kotak, di mana kita hanya bisa bergerak lurus ke arah horizontal dan vertikal, bukan secara diagonal.

\[ d_{\text{Manhattan}}(x,y) = \sum_{i=1}^p |x_i - y_i| \]

###Jarak Chebyshev J

Jarak chebyshev adalah ukuran jarak antara dua titik yang ditentukan oleh perbedaan terbesar di antara koordinatnya.

\[ d_{\text{Chebyshev}}(x,y) = \max_{i=1,\dots,p} |x_i - y_i| \]

6.1.3 Jarak Mahalanobis

Jarak Mahalanobis adalah ukuran jarak antar titik yang mempertimbangkan hubungan atau korelasi antar variabel dalam data. Jarak mahalanobis menyesuaikan skala dan keterkaitan antar variabel sehingga lebih akurat untuk data multivariat.

\[ d_{\text{Mahalanobis}}(x,y) = \sqrt{(x - y)^T S^{-1} (x - y)} \]

6.1.4 Jarak Minkowski

Jarak minkowski adalah ukuran jarak umum yang menjadi dasar dari jarak euclidean dan manhattan, tergantung nilai parameternya. Jarak minkowski memberikan fleksibilitas untuk mengatur cara menghitung jarak sesuai kebutuhan analisis data

\[ d_{\text{Minkowski}}(x,y;q) = \left( \sum_{i=1}^p |x_i - y_i|^q \right)^{\frac{1}{q}} \]

catatan: - \(q=1\) ⟶ Jarak Manhattan
- \(q=2\) ⟶ Jarak Euclidean
- \(q \to \infty\) ⟶ Jarak Chebyshev

6.2 Contoh dan Implementasi diberikan data dengan 3 variabel dalam bentuk

matriks adalah sebagai berikut

# Data eksplisit (5 observasi, 3 variabel)
data <- matrix(c(1,3,2,
                 7,4,5,
                 3,3,4,
                 1,5,6,
                 7,5,6), nrow = 5, byrow = TRUE)

colnames(data) <- c("X1", "X2", "X3")
rownames(data) <- paste("Obs", 1:5, sep = "")
data
##      X1 X2 X3
## Obs1  1  3  2
## Obs2  7  4  5
## Obs3  3  3  4
## Obs4  1  5  6
## Obs5  7  5  6

6.2.1 Jarak Euclidean

library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
dist.eucl <- dist(data, method = "euclidean"); dist.eucl
##          Obs1     Obs2     Obs3     Obs4
## Obs2 6.782330                           
## Obs3 2.828427 4.242641                  
## Obs4 4.472136 6.164414 3.464102         
## Obs5 7.483315 1.414214 4.898979 6.000000
fviz_dist(dist.eucl)

Interpretasi: Berdasarkan headmap diatas, observasi 1 dan observasi 5 memiliki jarak yang paling jauh ditandai dengan warna biru. Sedangkan jarak yang paling jauh adalah observasi ke 2 dan observasi ke 5 ditandai dengan warna mendekati merah.

6.2.2 Jarak Manhattan

dist.man <- dist(data, method = "manhattan"); dist.man
##      Obs1 Obs2 Obs3 Obs4
## Obs2   10               
## Obs3    4    6          
## Obs4    6    8    6     
## Obs5   12    2    8    6
fviz_dist(dist.man)

Interpretasi: Berdasarkan headmap diatas, observasi 1 dan observasi 5 memiliki jarak yang paling jauh ditandai dengan warna biru. Sedangkan jarak yang paling jauh adalah observasi ke 2 dan observasi ke 5 ditandai dengan warna mendekati merah.

6.2.3 Jarak Chebyshev

dist.cheb <- dist(data, method = "maximum"); dist.cheb
##      Obs1 Obs2 Obs3 Obs4
## Obs2    6               
## Obs3    2    4          
## Obs4    4    6    2     
## Obs5    6    1    4    6
fviz_dist(dist.cheb)

Interpretasi: Berdasarkan headmap diatas, observasi 1 dan observasi 4 memiliki jarak yang sangat jauh dengan observasi 2 dan observasi 5 ditandai dengan warna biru tua.Sedangkan jarak yang paling auh adalah observasi ke 2 dan observasi ke 5 ditandai dengan warna mendekati merah.

6.2.4 Jarak Mahalonabis

library(StatMatch)
## Loading required package: proxy
## 
## Attaching package: 'proxy'
## The following objects are masked from 'package:stats':
## 
##     as.dist, dist
## The following object is masked from 'package:base':
## 
##     as.matrix
## Loading required package: survey
## Loading required package: grid
## Loading required package: Matrix
## Loading required package: survival
## 
## Attaching package: 'survey'
## The following object is masked from 'package:graphics':
## 
##     dotchart
## Loading required package: lpSolve
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
dist.mah <- mahalanobis.dist(data); dist.mah
##          Obs1     Obs2     Obs3     Obs4     Obs5
## Obs1 0.000000 2.460499 2.741079 2.789943 2.578497
## Obs2 2.460499 0.000000 1.903056 2.671167 1.208081
## Obs3 2.741079 1.903056 0.000000 2.578497 2.789943
## Obs4 2.789943 2.671167 2.578497 0.000000 2.313299
## Obs5 2.578497 1.208081 2.789943 2.313299 0.000000
dist.mah_matrix <- as.matrix(dist.mah);dist.mah_matrix
##          Obs1     Obs2     Obs3     Obs4     Obs5
## Obs1 0.000000 2.460499 2.741079 2.789943 2.578497
## Obs2 2.460499 0.000000 1.903056 2.671167 1.208081
## Obs3 2.741079 1.903056 0.000000 2.578497 2.789943
## Obs4 2.789943 2.671167 2.578497 0.000000 2.313299
## Obs5 2.578497 1.208081 2.789943 2.313299 0.000000

6.2.5 Jarak Minskowski

# Fungsi jarak Minkowski untuk matriks data
minkowski_matrix <- function(data, q) {
  n <- nrow(data)
  D <- matrix(0, n, n)
  for (i in 1:n) {
    for (j in 1:n) {
      D[i, j] <- sum(abs(data[i, ] - data[j, ])^q)^(1/q)
    }
  }
  rownames(D) <- rownames(data)
  colnames(D) <- rownames(data)
  return(D)
}

# Hitung matriks jarak Minkowski untuk q = 3
dist.mink <- minkowski_matrix(data, q = 3)
dist.mink
##          Obs1     Obs2     Obs3     Obs4     Obs5
## Obs1 0.000000 6.248800 2.519842 4.160168 6.603854
## Obs2 6.248800 0.000000 4.041240 6.018462 1.259921
## Obs3 2.519842 4.041240 0.000000 2.884499 4.308869
## Obs4 4.160168 6.018462 2.884499 0.000000 6.000000
## Obs5 6.603854 1.259921 4.308869 6.000000 0.000000

7 Vektor Rata-rata

7.1 Pengertian dan Rumus

7.1.1 Matriks Rata-rata

Matriks rata-rata adalah matriks yang setiap elemennya berisi nilai rata-rata dari data pada posisi yang sama di beberapa matriks atau observasi. matriks ini membantu merangkum informasi sehingga lebih mudah melihat pola umum. tengah) dari data. Jika X adalah matriks data berukuran m x n, maka vektor rata-rata:

\[ \bar{x} = \begin{bmatrix} \bar{x}_1 \\ \bar{x}_2 \\ \vdots \\ \bar{x}_p \end{bmatrix} = \frac{1}{n} \sum_{i=1}^n x_i \]

7.1.2 Matriks Kovarians

Matriks kovarians adalah matriks yang menunjukkan hubungan kovarians antar variabel dalam sebuah dataset. Matriks ini membantu memahami seberapa kuat dua variabel berubah bersama-sama, apakah meningkat atau menurun secara bersamaan.

\[ S = \frac{1}{n-1} \sum_{i=1}^n (x_i - \bar{x})(x_i - \bar{x})^T \]

\[ S = \begin{bmatrix} s_{11} & s_{12} & \cdots & s_{1p} \\ s_{21} & s_{22} & \cdots & s_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ s_{p1} & s_{p2} & \cdots & s_{pp} \end{bmatrix} \]

7.1.3 Matriks Korelasi

Matriks korelasi adalah matriks yang berisi nilai koefisien korelasi antar variabel dalam suatu dataset. matriks ini menunjukkan kekuatan dan arah hubungan linear antar variabel, dengan nilai berkisar antara -1 sampai 1.

\[ R = D^{-1} S D^{-1} \] \[ D = \text{diag}\left(\sqrt{s_{11}}, \sqrt{s_{22}}, \dots, \sqrt{s_{pp}}\right) \] \[ r_{ij} = \frac{s_{ij}}{\sqrt{s_{ii} \cdot s_{jj}}} \]

7.1.4 Matriks Standardisasi

Matriks standarisasi adalah matriks yang diperoleh dengan menstandarkan setiap variabel sehingga memiliki rata-rata nol dan standar deviasi satu. matriks ini digunakan agar variabel dengan skala berbeda dapat dibandingkan secara adil. Untuk data \(X\), matriks data terstandardisasi \(Z\):

\[ Z = (X - \mathbf{1}\bar{x}^T) D_s^{-1} \]

dengan \(\mathbf{1}\) adalah vektor satuan, dan

\[ D_s = \text{diag}(\sqrt{s_{11}}, \sqrt{s_{22}}, \dots, \sqrt{s_{pp}}) \]

7.2 Contoh dan Implementasi diberikan data sebagai berikut berat badan

(BB) dan Tinggi Badan (TB) anak-anak sebagai berikut :

Pupuk <- c(10, 15, 20, 25, 30)
Waktu_Berjemur <- c(13, 26, 34, 27, 45)
Tinggi_Tumbuhan <- c(80, 83, 87, 84, 93)
data_b <- as.matrix(cbind(Pupuk, Waktu_Berjemur, Tinggi_Tumbuhan)); 
data_b
##      Pupuk Waktu_Berjemur Tinggi_Tumbuhan
## [1,]    10             13              80
## [2,]    15             26              83
## [3,]    20             34              87
## [4,]    25             27              84
## [5,]    30             45              93

7.2.0.1 Matriks Rata-Rata

vecMeans = as.matrix(colMeans(data_b)); vecMeans
##                 [,1]
## Pupuk           20.0
## Waktu_Berjemur  29.0
## Tinggi_Tumbuhan 85.4
vecRata = matrix(c(mean(Pupuk), mean(Waktu_Berjemur), mean(Tinggi_Tumbuhan)), nrow=3, ncol=1); vecRata
##      [,1]
## [1,] 20.0
## [2,] 29.0
## [3,] 85.4

7.2.1 Matriks Kovarians

varkov = cov(data_b); varkov
##                 Pupuk Waktu_Berjemur Tinggi_Tumbuhan
## Pupuk           62.50          81.25           33.75
## Waktu_Berjemur  81.25         137.50           56.50
## Tinggi_Tumbuhan 33.75          56.50           24.30

7.2.2 Matriks Korelasi

korel = cor(data_b); korel
##                     Pupuk Waktu_Berjemur Tinggi_Tumbuhan
## Pupuk           1.0000000      0.8764598       0.8660254
## Waktu_Berjemur  0.8764598      1.0000000       0.9774487
## Tinggi_Tumbuhan 0.8660254      0.9774487       1.0000000

7.2.3 Matriks Standardisasi (akar dari variansi masing-masing variabel)

n = nrow(data_b);n
## [1] 5
u = matrix(1,n,1); u
##      [,1]
## [1,]    1
## [2,]    1
## [3,]    1
## [4,]    1
## [5,]    1
xbar = cbind((1/n)*t(u)%*%data_b); xbar
##      Pupuk Waktu_Berjemur Tinggi_Tumbuhan
## [1,]    20             29            85.4
D = data_b - u %*% xbar; D
##      Pupuk Waktu_Berjemur Tinggi_Tumbuhan
## [1,]   -10            -16            -5.4
## [2,]    -5             -3            -2.4
## [3,]     0              5             1.6
## [4,]     5             -2            -1.4
## [5,]    10             16             7.6
S = (1/(n-1))*t(D)%*%D; S
##                 Pupuk Waktu_Berjemur Tinggi_Tumbuhan
## Pupuk           62.50          81.25           33.75
## Waktu_Berjemur  81.25         137.50           56.50
## Tinggi_Tumbuhan 33.75          56.50           24.30
Ds = diag(sqrt(diag(S))); Ds
##          [,1]     [,2]     [,3]
## [1,] 7.905694  0.00000 0.000000
## [2,] 0.000000 11.72604 0.000000
## [3,] 0.000000  0.00000 4.929503
R = solve(Ds) %*% S %*% solve(Ds); R
##           [,1]      [,2]      [,3]
## [1,] 1.0000000 0.8764598 0.8660254
## [2,] 0.8764598 1.0000000 0.9774487
## [3,] 0.8660254 0.9774487 1.0000000