Lecture Notes
Pemrograman Komputer II
disusun oleh
Nanda Arista Rizki, M.Si.
PROGRAM STUDI MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS MULAWARMAN
2018
Daftar Isi
Daftar Isi i
1 String Matching 1
1.1 Algoritma Naive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Algoritma Rabin-Karp . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Sorting 7
2.1 Insertion Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Selection Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Bubble Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3 Eigen Value and Eigen Vector 14
3.1 Eigen Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Power Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3 Shifted-inverse Power Method . . . . . . . . . . . . . . . . . . . . . . 25
3.4 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
i
BAB 1
String Matching
Dalam bahasa pemrograman komputer, string dapat diartikan sebagai kalimat atau
kumpulan dari karakter. Jika diperhatikan lebih dalam lagi, suatu karakter terdiri
dari 26 huruf alfabet (baik huruf besar maupun huruf kecil), angka-angka, spasi
putih, dan tanda baca; yang biasa dikenal dengan karakter ASCII1. Selain standar
pengkodean karakter ASCII, komputer juga mengenali himpunan glyph (simbol-
simbol tertentu seperti karakter China) menggunakan sistem unicode.
Tipe data string merupakan kumpulan hingga yang dipilih dari suatu him-
punan alfabet Σ. Misalkan Σ adalah himpunan hingga tak kosong dan Σ = {0, 1},maka t = 0110101 adalah string atas Σ. Panjang suatu string t adalah banyaknya
karakter/simbol dalam t dan dinyatakan dengan |t|. Himpunan semua string atas
Σ dengan panjang n dinyatakan dengan Σn Sebagai contoh, jika Σ = {0, 1} maka
Σ2 = {00, 01, 10, 11}. Selain alfabet biner (Σ = {0, 1}), juga ada alfabet DNA2
(Σ = {A,C,G, T}) yang sering digunakan dalam bioinformatika.
Tugas program yang berkaitan dengan string biasanya adalah mencari suatu
tempat atau posisi dimana suatu pola (string) ditemukan dalam string yang besar
atau teks. Algoritma pencarian string teks ini disebut String Matching. Algoritma
ini paling sering digunakan dalam mencari pola spesifik dalam rangkaian DNA.
Mesin pencari internet juga menggunakan algoritma ini untuk mencari halaman
web yang relevan.
1ASCII=American Standard Code for Information Interchange2DNA=Deoxyribonucleic acid
1
Diasumsikan bahwa teks T adalah suatu larik (array) dengan panjang |T | = n,
sedangkan pola P adalah suatu larik dengan panjang |P | = m ≤ n. Setiap elemen
atau unsur dari T dan P adalah karakter alfabet Σ. Dalam hal ini, larik karakter dari
T dan P merupakan string dari karakter. Selanjutnya, misal diketahui himpunan
alfabet Σ = {a, b, c, . . . , z}, suatu teks T = abcabaabcabac dan pola P = abaa.
Berdasarkan Gambar 1.1 bahwa, pola P terjadi dengan shift s dalam teks T . Dengan
kata lain, pola P terjadi mulai dari posisi s+ 1 dalam teks T .
Gambar 1.1: Contoh permasalahan string-matching. Pola P terjadi hanya sekalidalam teks T di shift s = 3.
Teks T dengan panjang n dapat ditulis sebagai suatu larik T [1..n], sedangkan
pola P yang memiliki panjang m ditulis sebagai P [1..m]. Pandang kembali kasus
pada Gambar 1.1, dimana pola P terjadi dengan shift s dalam teks T . Hal ini
terjadi jika 0 ≤ s ≤ n−m dan T [s+ 1..s+m] = P [1..m] (atau jika T [s+ j] = P [j]
untuk 1 ≤ j ≤ m). Jika pola P terjadi dengan shift s dalam teks T , maka dapat
dikatakan bahwa s adalah shift yang valid.
Beberapa algoritma string-matching beserta waktu persiapan dan waktu pen-
cocokannya dapat dilihat pada Tabel 1.1. Waktu total pengerjaan setiap algoritma
adalah penjumlahan dari waktu persiapan dan waktu pencocokan.
Tabel 1.1: Beberapa Algoritma String-Matching
Algoritma Waktu persiapan Waktu pencocokanNaive 0 O((n−m+ 1)m)Rabin-Karp Θ(m) O((n−m+ 1)m)Finite automaton O(m|Σ|) Θ(n)Knuth-Morris-Pratt Θ(m) Θ(n)
1.1 Algoritma Naive
Algoritma Naive adalah algoritma yang paling sederhana dalam pencocokan string.
Algoritma ini akan menemukan semua shift yang valid mengunakan perulangan yaitu
Pemprograman Komputer II 2 Nanda Arista Rizki, M.Si.
mengecek kondisi P [1..m] = T [s + 1..s + m] untuk setiap n −m + 1 kemungkinan
dari s. Adapun langkah-langkah dalam pengerjaan algoritma Naive adalah sebagai
berikut.
1 //NAIVE−STRING−MATCHER(T,P)2 n=length(T)
3 m=length(P)
4 for s=0 to n−m5 if P[1..m]==T[s+1..s+m]
6 print "pola P terjadi dengan shift" s
Misalkan T = acaabc dan P = aab, selanjutnya ilustrasi algoritma ini dapat dilihat
pada Gambar 1.2. Dari 4 kemungkinan untuk s, algoritma ini hanya terjadi sekali
di shift s = 2.
Gambar 1.2: Ilustrasi algoritma Naive
1.2 Algoritma Rabin-Karp
Algoritma Rabin-Karp menggunakan notasi teoritis bilangan dasar yang ekivalen
dengan bilangan kedua modulo bilangan ketiga. Secara umum, setiap karakter da-
lam algoritma ini adalah suatu digit dalam notasi radiks-d dimana d = |Σ|. Sebagai
contoh, misalkan himpunan alfabet Σ = {0, 1, . . . , 9}, maka setiap karakter adalah
suatu digit desimal. Dalam hal ini, suatu string dengan k karakter yang berurutan
menggambarkan bilangan desimal dengan panjang k. Artinya string 31415 diperla-
kukan sama seperti bilangan desimal 31, 415.
Diberikan pola P [1..m], lalu dimisalkan p menyatakan nilai desimal yang ber-
korespondensi. Kemudian diberikan teks T [1..n], lalu dimisalkan ts menyatakan
bilangan desimal dengan panjang m yang merupakan sub-string T [s+ 1..s+m] un-
tuk s = 0, 1, . . . , n−m. Tentu ts = p jika dan hanya jika T [s+ 1..s+m] = P [1..m];
selanjutnya s adalah shift yang valid jika dan hanya jika ts = p.
Pemprograman Komputer II 3 Nanda Arista Rizki, M.Si.
Berdasarkan aturan Horner, bahwa perhitungan p adalah
p = P [m] + 10(P [m− 1] + 10(P [m− 2] + · · ·+ 10(P [2] + 10P [1]) · · · )).
Misalkan p = 2468, artinya
2468 =P [4] + 10(P [3] + 10(P [2] + 10P [1]))
=8 + 10(6 + 10(4 + 10(2)))
=8 + 60 + 400 + 2000 = 2468.
Dengan cara yang sama, dapat dihitung t0 dari T [1..m]. Selanjutnya adalah meng-
hitung t1, t2, . . . , tn−m. Dapat diamati bahwa menghitung ts+1 dapat diperoleh dari
ts, karena
ts+1 = 10(ts − 10m−1T [s+ 1]) + T [s+m+ 1].
Sebagai ilustrasi, misalkan m = 5 dan saat ini ts = 31415, lalu ingin menghilangkan
digit order tertinggi T [s + 1] = 3 dan membawa digit order terendah yang baru
(misalkan T [s+ 5 + 1] = 2) maka
ts+1 =10(31415− 10000 · 3) + 2
=14152.
Secara umum, algoritma Rabin-Karp adalah sebagai berikut.
1 //RABIN−KARP−MATCHER(T,P,d,q)2 n=length(T)
3 m=length(P)
4 h=dˆ(m−1) mod q
5 p=0
6 t0=0
7 //persiapan
8 for i=1 to m
9 p=(d*p+P[i]) mod q
10 t0=(d*t0+T[i]) mod q
11 //pencocokan
12 for s=0 to n−m
Pemprograman Komputer II 4 Nanda Arista Rizki, M.Si.
13 if p==ts
14 if P[1..m]==T[s+1..s+m]
15 print "pola P terjadi dengan shift" s
16 if s<n−m17 t[s+1]=(d(t[s]−T[s+1]h)+T[s+m+1]) mod q
Nilai q dalam algoritma Rabin-Karp adalah suatu bilangan prima. Semakin besar
nilai q, maka semakin sedikit hasil modulus yang sama dengan p. Sebagai contoh,
misalkan T = 2359023141526739921, P = 31415, dan q = 13. Pada tahap persi-
apan, perhitungan nilai p = P mod q = 31415 mod 13 = 7 dapat dilakukan dengan
langsung atau menggunakan iterasi sebagai berikut.
(i = 1) p = 3 mod 13 = 3
(i = 2) p = 31 mod 13 = 5
(i = 3) p = 54 mod 13 = 2
(i = 4) p = 21 mod 13 = 8
(i = 5) p = 85 mod 13 = 7.
Cara yang sama dapat dilakukan untuk memperoleh nilai t0. Selanjutnya ilustrasi
algoritma ini dapat dilihat pada Gambar 1.3. Misal ingin mengetahui nilai t8, maka
dihitung melalui cara berikut.
14152 ≡ (31415− 3 · 10000) · 10 + 2 (mod 13)
≡ (7− 3 · 3) · 10 + 2 (mod 13)
≡ 8 (mod 13),
karena h = 10000 mod 13 = 3. Berdasarkan Gambar 1.3, karena ada dua ts yang
sama dengan p = 7 maka yang dipilih adalah ts yang T [s+1..s+5] = P [1..5] = 31415.
Gambar 1.3: Ilustrasi algoritma Rabin-Karp
Pemprograman Komputer II 5 Nanda Arista Rizki, M.Si.
1.3 Latihan
1. Misalkan T = programstudimatematika.
a. Buatlah program yang dapat mencocokan apakah pola P = ima terdapat
dalam teks T !
b. Tentukan pada posisi ke berapakah pola tersebut terjadi!
2. Diberikan 10 string yang ditampilkan dalam Tabel 1.2. Buatlah program yang
dapat mengecek apakah pola P = nur terjadi untuk beberapa string tersebut!
Tabel 1.2: Teks atas Σ = {a, b, . . . , z}
No. Teks1 erlina2 nurul3 ghony4 stefanny5 elisa6 ersin7 vika8 latifah9 nur
10 muliya
Pemprograman Komputer II 6 Nanda Arista Rizki, M.Si.
BAB 2
Sorting
Seperti halnya Bab 1, bahwa perulangan (baik for , while , maupun repeat) dalam
materi pengurutan ini memainkan peranan yang sangat penting. Dalam pemro-
graman, masalah pengurutan tidaklah lepas dari variabel larik (array). Sehingga
perulangan menjadi senjata yang cocok ketika berhadapan dengan masalah larik.
2.1 Insertion Sort
Diberikan himpunan dari n bilangan, yaitu {a1, a2, . . . , an}. Selanjutnya akan di-
berikan algoritma yang akan menghasilkan suatu permutasi {a′1, a′2, . . . , a′n} dengan
cara menata ulang sedemikian sehingga a′1 ≤ a′2 ≤ · · · ≤ a′n. Algoritma yang seder-
hana untuk menjawab permasalahan ini adalah insertion sort. Algoritma ini efisien
untuk mengurutkan sejumlah kecil elemen.
Algoritma insertion sort menggunakan suatu ’wadah’ untuk digunakan dalam
proses pengurutan. Contoh sederhana dalam penggunaan ’wadah’ ini diterapkan
pada array A = {5, 2}. Karena elemen pertama dari A lebih besar dari elemen
kedua dari A, sehingga perlu dilakukan penukaran posisi dalam array A. Nilai dari
variabel ’wadah’ adalah elemen kedua dari A yaitu 2. Nilai elemen kedua disalin
dari elemen pertama, lalu diperoleh A = {5, 5}. Kemudian elemen pertama disalin
dari nilai ’wadah’ sehingga diperoleh A = {2, 5}. Tentu penggunaan ’wadah’ ini
digunakan ketika ada elemen yang ingin ditukar.
7
Misal diberikan suatu array A = {5, 2, 4, 6, 1, 3}. Selanjutnya ilustrasi dari ite-
rasi algoritma ini dapat dilihat pada Gambar 2.1. Perhatikan bahwa elemen pertama
dari A lebih besar dari elemen kedua dari A, sehingga perlu dilakukan cara yang
sama seperti penjelasan sebelumnya. Pada proses ketiga, karena elemen pertama
hingga elemen keempat telah terurut maka tidak perlu dilakukan pengaturan ulang
posisi. Namun pada proses keempat (lihat Gambar 2.1d), karena ’wadah’ bernilai
1 lebih kecil dari pada elemen sebelumnya, maka posisi ’wadah’ ditaruh di elemen
pertama. Proses berlanjut hingga semua elemen dari A seperti pada Gambar 2.1f,
yaitu telah diurutkan dari yang terkecil hingga terbesar.
(a) (b) (c)
(d) (e) (f)
Gambar 2.1: Ilustrasi algoritma insertion sort
Adapun langkah-langkah algoritma insertion sort adalah sebagai berikut.
1 // INSERTION−SORT(A)2 for j=2 to length(A)
3 begin
4 wadah=A[j]
5 i=j−16 while i>0 and A[i]>wadah
7 begin
8 A[i+1]=A[i]
9 i=i−110 end;
11 A[i+1]=wadah
12 end;
Pemprograman Komputer II 8 Nanda Arista Rizki, M.Si.
2.2 Selection Sort
Algoritma selection sort melakukan pekerjaannya berdasarkan urutan (terkecil). Al-
goritma ini membagi dua bagian yaitu sub-array yang sudah diurutkan dan sub-
array sisanya. Misal diberikan suatu array dengan enam elemen yaitu
A0 = {5, 2, 4, 6, 1, 3}.
Tahap pertama adalah mencari elemen terkecil, lalu ditempatkan di posisi pertama:
A1 = {1, 5, 2, 4, 6, 3}.
Kemudian mencari elemen terkecil kedua dan ditempatkan di posisi kedua:
A2 = {1, 2, 5, 4, 6, 3}.
Dengan cara yang sama, diperolehlah permutasi berikut:
A3 = {1, 2, 3, 5, 4, 6}
A4 = {1, 2, 3, 4, 5, 6}
A5 = {1, 2, 3, 4, 5, 6}
A6 = {1, 2, 3, 4, 5, 6}.
Dengan kata lain, hasil yang diperoleh setelah iterasi ke k adalah terbentuknya array
dimana k elemen pertama (dari string awal) telah terurut.
Pada dasarnya, algoritma selection sort membagi dua himpunan, yaitu sub
himpunan yang telah diurutkan dan sub himpunan yang belum diurutkan. Pada
tahapan awal, array A0 = {5, 2, 4, 6, 1, 3} merupakan sub himpunan yang belum
diurutkan. Selanjutnya, perhatikan iterasi pada Tabel 2.1 berikut. Elemen terkecil
pada tabel tersebut merupakan nilai terkecil dari sub himpunan yang belum diurut-
kan. Elemen terkecil akan dimasukan ke dalam sub himpunan yang telah diurutkan
pada iterasi setelahnya.
Pemprograman Komputer II 9 Nanda Arista Rizki, M.Si.
Tabel 2.1: Ilustrasi Algoritma Dua Himpunan
Iterasi ke-Sub himpunan
Elemen terkecilTelah diurut Belum diurutkan
0 5,2,4,6,1,3 11 1 5,2,4,6,3 22 1,2 5,4,6,3 33 1,2,3 5,4,6 44 1,2,3,4 5,6 55 1,2,3,4,5 6 66 1,2,3,4,5,6
Adapun langkah-langkah dalam pengerjaan algoritma selection sort adalah
sebagai berikut.
1 //SELECTION−SORT(A)2 for i=1 to length(A)−13 min=i
4 for j=i+1 to length(A)
5 if A[j] < A[min]
6 min=j
7
8 if min != i
9 wadah=A[i]
10 A[i]=A[min]
11 A[min]=wadah
2.3 Bubble Sort
Algoritma bubble sort merupakan algoritma yang sederhana. Dimulai dari mem-
bandingkan dua nilai elemen pertama dari array dan menukarnya jika tidak sesuai
letak urutannya. Lalu membandingkan nilai elemen kedua dan ketiga, kemudian
menukarnya jika kedua elemen tersebut belum terurut. Proses ini berlanjut hingga
semua elemen telah diurutkan.
Sebagai ilustrasi, misal A = {5, 2, 4, 6, 1, 3} adalah suatu array dengan enam
Pemprograman Komputer II 10 Nanda Arista Rizki, M.Si.
elemen. Berikut adalah hasil dari iterasi pertama.
{5, 2, 4, 6, 1, 3} → {2, 5, 4, 6, 1, 3}
{2, 5, 4, 6, 1, 3} → {2, 4, 5, 6, 1, 3}
{2, 4, 5, 6, 1, 3} → {2, 4, 5, 6, 1, 3}
{2, 4, 5, 6, 1, 3} → {2, 4, 5, 1, 6, 3}
{2, 4, 5, 1, 6, 3} → {2, 4, 5, 1, 3, 6}.
Pada iterasi kedua diperoleh hasil berikut.
{2, 4, 5, 1, 3, 6} → {2, 4, 5, 1, 3, 6}
{2, 4, 5, 1, 3, 6} → {2, 4, 5, 1, 3, 6}
{2, 4, 5, 1, 3, 6} → {2, 4, 1, 5, 3, 6}
{2, 4, 1, 5, 3, 6} → {2, 4, 1, 3, 5, 6}
{2, 4, 1, 3, 5, 6} → {2, 4, 1, 3, 5, 6}.
Iterasi ini berlanjut hingga diperoleh permutasi yang diinginkan yaitu {1, 2, 3, 4, 5, 6}.
Adapun langkah-langkah dalam pengerjaan algoritma bubble sort adalah se-
bagai berikut.
1 //BUBBLE−SORT(A)2 n = length(A)
3 repeat
4 tertukar = false
5 for i = 2 to n
6 if A[i−1] > A[i]
7 wadah=A[i−1]8 A[i−1]=A[i]9 A[i]=wadah
10 tertukar = true
11 n = n − 1
12 until not tertukar
Pemprograman Komputer II 11 Nanda Arista Rizki, M.Si.
2.4 Latihan
1. Diberikan suatu array A = {1, 3, 0, 9, 2, 0, 1, 6}. Buatlah program untuk meng-
urutkan elemen-elemen A dari terkecil hingga terbesar!
2. Data hasil kuesioner tentang Indeks Prestasi Kumulatif (IPK) mahasiswa pro-
gram studi Matematika angkatan 2017 disajikan dalam Tabel 2.2. Buatlah
program yang dapat menghitung nilai median dari data tersebut! (dengan
menggunakan algoritma pengurutan)
Tabel 2.2: IPK Mahasiswa Program Studi Matematika
No responden IPK No responden IPK No responden IPK1 3.32 11 3.97 21 3.342 3.36 12 3.68 22 3.553 3.89 13 3.38 23 3.864 3.42 14 3.79 24 3.905 3.27 15 3.30 25 3.976 3.68 16 3.52 26 3.557 3.70 17 3.668 3.37 18 3.919 3.63 19 3.3610 3.84 20 3.48
3. Buatlah program yang dapat menghitung nilai kuartil bawah (Q1) dan kuartil
atas (Q3) untuk data yang disajikan dalam Tabel 2.2!
4. Buatlah perbandingan untuk ketiga algoritma pengurutan dengan memperha-
tikan waktu proses:
1 uses crt, DateUtils, SysUtils;
2 var
3 mulai, selesai: TDateTime;
4 selisih: Integer;
5
6 begin
7 ClrScr;
8 mulai := Now;
9
10 {Taruh proses algoritma Anda disini}
Pemprograman Komputer II 12 Nanda Arista Rizki, M.Si.
11
12 selesai := Now;
13
14 //selisih := SecondsBetween(mulai,selesai);
15 //Writeln('Waktu yang diperlukan adalah ',
16 // IntToStr(selisih) ,' detik');
17
18 selisih := MilliSecondsBetween(mulai,selesai);
19 Writeln('Waktu yang diperlukan adalah ',
20 IntToStr(selisih) ,' mili detik');
21
22 Read;
23 end;
Pemprograman Komputer II 13 Nanda Arista Rizki, M.Si.
BAB 3
Eigen Value and Eigen Vector
Sebelum masuk ke materi tentang nilai eigen dan vektor eigen, maka terlebih dahulu
dijelaskan sedikit materi tentang vektor dan matriks. Dalam bahasa pemrograman,
array satu dimensi dapat mewakili suatu vektor, sementara array dua dimensi dapat
mewakili suatu matriks. Jika ingin mendefinisikan vektor v =[v1 v2
]dimana v1
dan v2 merupakan bilangan bulat (integer) dalam bahasa Pascal, maka salah satu
caranya adalah menuliskan program berikut.
1 var
2 v: array[1..10] of integer;
3 i:integer;
4
5 begin
6 for i:=1 to 2 do
7 begin
8 write('v[',i,']= ');
9 readln(v[i]);
10 end;
11 end.
Ingat bahwa banyaknya elemen dalam variabel v yang diinginkan tidak boleh me-
lebihi variabel array v yang telah dideklarasikan sebelumnya. Jadi dalam baha-
sa Pascal, penulisan ”array[1..10]” diperbolehkan walaupun hanya memanfaatkan
array-nya hingga elemen ke dua saja. Untuk memperdalam pemahaman tentang
14
vektor, perhatikan rumus Euclidean norm untuk vektor v berikut.
‖v‖2 :=
√√√√ 2∑i=1
v2i =√v21 + v22.
Dengan mengetahui pola tentang perhitungan Euclidean norm untuk vektor v, se-
hingga dalam Pascal dapat ditulis sebagai berikut.
1 var
2 jumlah, euclidean norm: integer;
3
4 begin
5 jumlah:=0;
6 for i:=1 to 2 do
7 begin
8 write('v[',i,']= ');
9 readln(v[i]);
10 jumlah:=jumlah+sqr(v[i]);
11 //sqr(v[i]) dapat diganti dengan v[i]*v[i]
12 end;
13 writeln('Euclidean norm = ', sqrt(jumlah));
14 end.
Pemahaman yang dipelajari selanjutnya adalah mengenai matriks. Misal A
adalah matriks berukuran 2 × 2 dimana semua elemennya adalah bilangan real,
maka salah satu cara mendefinisikan matriks A dalam bahasa Pascal adalah sebagai
berikut.
1 var
2 A: array[1..2,1..2] of real;
3 i,j:integer;
4
5 begin
6 for i:=1 to 2 do
7 begin
8 for j:=1 to 2 do
9 begin
10 write('A[',i,',',j,']= ');
Pemprograman Komputer II 15 Nanda Arista Rizki, M.Si.
11 readln(A[i,j]);
12 end;
13 writeln;
14 end;
15 end.
Perlu diingat bahwa matriks 3 × 3, 3 × 4, 4 × 4, dan seterusnya juga merupakan
array dua dimensi.
Berbicara tentang matriks, biasanya tidak lepas dengan operasinya. Misalkan
A =
[a11 a12
a21 a22
]dan B =
[b11 b12
b21 b22
]adalah dua matriks berukuran 2× 2, maka
AB =
[a11 a12
a21 a22
][b11 b12
b21 b22
]=
[a11 · b11 + a12 · b21 a11 · b12 + a12 · b22a21 · b11 + a22 · b21 a21 · b12 + a22 · b22
].
Oleh karena itu, perhitungan matriks AB dalam bahasa Pascal dapat ditulis sebagai
berikut.
1 for i:= 1 to 2 do
2 for j:= 1 to 2 do
3 begin
4 jumlah:=0;
5 for k:=1 to 2 do
6 jumlah:=jumlah+A[i,k]*B[k,j];
7 AB[i,j]:= jumlah;
8 end;
Misal C =
c11 c12 c13
c21 c22 c23
c31 c32 c33
adalah matriks 3× 3 sedangkan D =[d1 d2 d3
]′adalah vektor kolom berukuran 3× 1, maka
CD =
c11 · d1 + c12 · d2 + c13 · d3c21 · d1 + c22 · d2 + c23 · d3c31 · d1 + c32 · d2 + c33 · d3
.
Pemprograman Komputer II 16 Nanda Arista Rizki, M.Si.
Sehingga, hasil perkalian antara matriks dan vektor dalam Pascal dapat ditulis
menjadi:
1 for i:=1 to 3 do
2 begin
3 jumlah:=0;
4 for j:=1 to 3 do
5 jumlah:=jumlah+C[i,j]*D[j];
6 CD[i]:=jumlah;
7 end;
Pemrograman bahasa Pascal menyediakan unit untuk mempermudah dalam
perhitungan sederhana untuk vektor dan matriks. Unit ini bernama ”matrix”.
Ingat bahwa vektor juga merupakan matriks. Berikut contoh penggunaannya.
1 program coba unit matrix;
2 uses
3 Crt, matrix;
4 var
5 C:TMatrix3 double;
6 D,hasil:TVector3 double;
7
8 begin
9 ClrScr;
10 C.init(0,11,−5,−2,17,−7,−4,26,−10); //input elemen matriks
11 D.init(1,1,1); //input elemen vektor
12 hasil:=C*D;
13 writeln('Hasil perkaliannya:');
14 writeln(hasil.data[0]:6:2);
15 writeln(hasil.data[1]:6:2);
16 writeln(hasil.data[2]:6:2);
17 readln;
18 end.
Namun tipe matriks dan vektor yang dapat digunakan hanya beberapa saja (tidak
berlaku secara umum). Lihat Tabel 3.1.
Pemprograman Komputer II 17 Nanda Arista Rizki, M.Si.
Tabel 3.1: Tipe Data dalam Unit Matrix
TypeTmatrix2 double data Tvector2 double dataTmatrix2 extended data Tvector2 extended dataTmatrix2 single data Tvector2 single dataTmatrix3 double data Tvector3 double dataTmatrix3 extended data Tvector3 extended dataTmatrix3 single data Tvector3 single dataTmatrix4 double data Tvector4 double dataTmatrix4 extended data Tvector4 extended dataTmatrix4 single data Tvector4 single data
Pemahaman tentang konsep matriks dan polanya dalam bahasa Pascal, dapat
diasah dalam studi kasus dekomposisi Cholesky. Misal A =
a11 a12 a13
a21 a22 a23
a31 a32 a33
adalah
matriks 3× 3 yang ingin dilakukan dekomposisi Cholesky, maka
A =
a11 a12 a13
a21 a22 a23
a31 a32 a33
=
l11 0 0
l21 l22 0
l31 l32 l33
l11 l21 l31
0 l22 l32
0 0 l33
≡ LL′
=
l211 l21l11 l31l11
l21l11 l221 + l222 l31l21 + l32l22
l31l11 l31l21 + l32l22 l231 + l232 + l233
, (3.1)
dengan L adalah matriks segitiga bawah. Namun tidak semua matriks dapat di-
dekomposisi seperti itu. Syarat suatu matriks A (berordo n × n) dapat dilakukan
dekomposisi Cholesky adalah jika matriks A definit positif, yaitu v′Av > 0 untuk
semua vektor kolom vn×1.
Pemprograman Komputer II 18 Nanda Arista Rizki, M.Si.
Perhatikan kembali Persamaan 3.1, untuk elemen diagonal dapat diperoleh
pola berikut.
l11 =√a11
l22 =√a22 − l221
l33 =√a33 − (l231 + l232),
atau secara umum bahwa
lkk =
√√√√akk −k−1∑j=1
l2kj.
Selanjutnya untuk elemen di bawah diagonal utama, diperoleh pola sebagai berikut.
l21 =1
l11a21
l31 =1
l11a31
l32 =1
l22(a32 − l31l21)
sehingga secara umum dapat dinyatakan sebagai berikut.
lik =1
lkk
(aik −
k−1∑j=1
lijlkj
).
Berikut adalah salah satu contoh program Pascal untuk melakukan dekomposisi
Cholesky.
1 Program dekomposisi cholesky;
2 uses Crt;
3 type
4 matriks = array of array of double;
5
6 function cholesky(const A: matriks): matriks;
7 var
8 i, j, k: integer;
9 s: double;
Pemprograman Komputer II 19 Nanda Arista Rizki, M.Si.
10 begin
11 // mendefinisikan matriks cholesky berukuran nxn
12 setlength(cholesky, length(A), length(A));
13 for i := 1 to length(cholesky) do
14 for j := 0 to i do
15 begin
16 s := 0;
17 for k := 0 to j − 1 do
18 s := s + cholesky[i][k] * cholesky[j][k];
19 if i = j then //diagonal utama
20 cholesky[i][j] := sqrt(A[i][i] − s)
21 else
22 cholesky[i][j] := (A[i][j] − s) / cholesky[j][j];
23 end;
24 end;
25
26 procedure tampil matriks(const A: matriks);
27 var
28 i, j: integer;
29 begin
30 for i := 1 to length(A) do
31 begin
32 for j := 1 to length(A) do
33 write(A[i,j]:8:3);
34 writeln;
35 end;
36 end;
37
38 const
39 matriks A: array[0..2,0..2] of double = (( 2,−1, 0),
40 (−1, 2,−1),41 ( 0,−1, 2));
42 var
43 indeks: integer;
44 proses 1, proses 2: matriks;
45
46 begin
47 ClrScr;
48
49 // mendefinisikan matriks proses 1
50 // yang ukurannya sama dengan matriks A
51 setlength(proses 1, length(matriks A), length(matriks A));
Pemprograman Komputer II 20 Nanda Arista Rizki, M.Si.
52
53 // matriks A dikonversi agar dapat dibaca
54 for indeks := 1 to length(matriks A) do
55 proses 1[indeks] := matriks A[indeks];
56 proses 2 := cholesky(proses 1);
57
58 Writeln('A=');
59 tampil matriks(proses 1);
60 Writeln;
61 Writeln('L=');
62 tampil matriks(proses 2);
63
64 writeln;
65 readln;
66 end.
Perlu diperhatikan bahwa pendefinisian batas indeks yang tepat sangat dianjurkan
ketika ingin menggunakan fungsi length untuk peubah array. Jadi, walaupun hanya
ingin memanfaatkan elemen array hingga ke dua saja, maka lebih baik menuliskan-
nya dengan ”array[1..2]” jika ingin menggunakan hasil dari fungsi length.
3.1 Eigen Value
Misalkan A adalah matriks berukuran n× n. Sebuah vektor taknol v ∈ Rn disebut
vektor eigen dari A; dan skalar λ disebut nilai eigen dari A, jika memenuhi
Av = λv. (3.2)
Untuk memperoleh nilai eigen dari matriks A, Persamaan 3.2 dapat dituliskan kem-
bali menjadi
Av = λIv
Av − λIv = 0
(A− λI)v = 0. (3.3)
Pemprograman Komputer II 21 Nanda Arista Rizki, M.Si.
Solusi untuk Persamaan 3.3 dapat diperoleh dengan menyelesaikan persamaan ka-
rakteristik berikut.
|A− λI| = 0.
Sebagai contoh, misal diberikan matriks A sebagai berikut.
A =
0 11 −5
−2 17 −7
−4 26 −10
.Matriks A tersebut ingin dicari nilai eigennya. Langkah pertama adalah menentukan
matriks A− λI.
A− λI =
0 11 −5
−2 17 −7
−4 26 −10
−λ 0 0
0 λ 0
0 0 λ
=
−λ 11 −5
−2 17− λ −7
−4 26 −10− λ
.Lalu tentukan determinan dari A− λI.
|A− λI| = + (−λ)
∣∣∣∣∣ 17− λ −7
26 −10− λ
∣∣∣∣∣− (11)
∣∣∣∣∣ −2 −7
−4 −10− λ
∣∣∣∣∣+ (−5)
∣∣∣∣∣ −2 17− λ−4 26
∣∣∣∣∣=− λ [(17− λ)(−10− λ)− (−7)(26)]− 11 [(−2)(−10− λ)− (−7)(−4)]
− 5 [(−2)(26)− (17− λ)(−4)]
=− λ[−170− 7λ+ λ2 + 182]− 11[20 + 2λ− 28]− 5[−52 + 68− 4λ]
=− λ3 + 7λ2 − 12λ− 22λ+ 20λ+ 88− 80
=− λ3 + 7λ2 − 14λ+ 8.
Pemprograman Komputer II 22 Nanda Arista Rizki, M.Si.
Selanjutnya temukan solusi dari |A− λI| = 0.
|A− λI| = 0
−λ3 + 7λ2 − 14λ+ 8 = 0
−(λ− 4)(λ− 2)(λ− 1) = 0.
Sehingga diperoleh nilai eigen dari matriks A, yaitu λ = 4, λ = 2, dan λ = 1.
3.2 Power Method
Jika λ1 adalah nilai eigen terbesar (secara absolut) dari matriks A, maka λ1 disebut
nilai eigen dominan. Vektor eigen v1 yang berkorespondensi pada λ1 tersebut
dinamakan vektor eigen dominan. Suatu vektor v dikatakan ternormalisasi jika
koordinat tertinggi dalam vektor v adalah 1. Misalkan[v1 v2 · · · vn
]′adalah
vektor eigen yang ingin dinormalisasi, maka
v =
(1
c
)[v1 v2 · · · vn
]′merupakan vektor yang telah dinormalisasi, dimana
c = vj dengan |vj| = max1≤i≤n
{|vi|}.
Misalkan matriks A memiliki nilai eigen dominan yaitu λ, maka hanya ada
satu vektor eigen yang ternormalisasi yang berkorespondensi dengan λ. Prosedur
untuk menemukan pasangan eigen ini (yaitu λ dan v) dapat ditemukan secara iteratif
dengan metode power . Prosedur menggunakan metode ini, dimulai dengan vektor
awal
x0 =[1 1 · · · 1
]′,
Pemprograman Komputer II 23 Nanda Arista Rizki, M.Si.
lalu konstruksi barisan {xk} secara rekursif:
yk = Axk (3.4)
xk+1 =1
ck+1
yk, (3.5)
dengan ck+1 adalah koordinat dari yk yang terbesar. Sehingga barisan {xk} dan
{ck} masing-masing akan konvergen ke v dan λ, atau dengan kata lain bahwa
limk→∞
xk = v dan limk→∞
ck = λ. (3.6)
Jika x0 merupakan vektor eigen namun x0 6= v, maka inisialisasi x0 harus diubah.
Untuk memahami konsep metode power ini, sebagai contoh misalkan
A =
0 11 −5
−2 17 −7
−4 26 −10
(3.7)
dan inisialisasi yang digunakan adalah x0 =[1 1 1
]′. Dengan menggunakan Per-
samaan 3.4 dan 3.5, diperoleh iterasi pertama yaitu 0 11 −5
−2 17 −7
−4 26 −10
1
1
1
=
6
8
12
= 12
1223
1
= c1x1.
Kemudian iterasi kedua menghasilkan 0 11 −5
−2 17 −7
−4 26 −10
1223
1
=
73103163
=16
3
71658
1
= c2x2.
Proses ini berlanjut hingga diperoleh pasangan eigen yang konvergen, seperti yang
terlihat pada Tabel 3.2. Berdasarkan hasil iterasi, barisan vektor eigen konvergen
ke v =[25
35
1]′
dan barisan konstanta konvergen ke λ = 4.
Pemprograman Komputer II 24 Nanda Arista Rizki, M.Si.
Tabel 3.2: Iterasi Metode Power untuk Matriks A (Pers. 3.7)
k Axk = yk ck+1xk+1
0 [ 6.000000 8.000000 12.00000 ]′ 12.00000 [ 0.500000 0.666667 1]′
1 [ 2.333333 3.333333 5.333333 ]′ 5.333333 [ 0.437500 0.625000 1]′
2 [ 1.875000 2.750000 4.500000 ]′ 4.500000 [ 0.416667 0.611111 1]′
3 [ 1.722222 2.555556 4.222222 ]′ 4.222222 [ 0.407895 0.605263 1]′
4 [ 1.657895 2.473684 4.105263 ]′ 4.105263 [ 0.403846 0.602564 1]′
5 [ 1.628205 2.435897 4.051282 ]′ 4.051282 [ 0.401899 0.601266 1]′
6 [ 1.613924 2.417722 4.025316 ]′ 4.025316 [ 0.400943 0.600629 1]′
7 [ 1.606918 2.408805 4.012579 ]′ 4.012579 [ 0.400470 0.600313 1]′
8 [ 1.603448 2.404389 4.006270 ]′ 4.006270 [ 0.400235 0.600156 1]′
9 [ 1.601721 2.402191 4.003130 ]′ 4.003130 [ 0.400117 0.600078 1]′
10 [ 1.600860 2.401095 4.001564 ]′ 4.001564 [ 0.400059 0.600039 1]′
3.3 Shifted-inverse Power Method
Misalkan A adalah matriks n×n yang memiliki pasangan eigen yaitu λ dan v, maka
berlaku:
1. Shifting Eigenvalues.
Jika α adalah sebarang konstanta, maka λ − α dan v adalah pasangan eigen
dari matriks A− αI.
2. Inverse Eigenvalues.
Jika λ 6= 0, maka 1/λ dan v adalah pasangan eigen dari matriks A−1.
3. Jika α 6= λ, maka maka 1/(λ− α) dan v adalah pasangan eigen dari matriks
(A− αI)−1.
Jika diasumsikan matriks A memiliki nilai eigen yang berbeda, yaitu λ1, λ2, . . . , λn.
Maka sebuah konstanta α dapat dipilih sedemikian sehingga
µ1 = 1/(λj − α) (3.8)
adalah nilai eigen dominan dari matriks (A− αI)−1. Lebih lanjut, ketika x0 dipilih
dengan tepat, maka barisan{xk =
[x(k)1 , x
(k)2 , . . . , x
(k)n
]}dan {ck} dapat dibangkit-
Pemprograman Komputer II 25 Nanda Arista Rizki, M.Si.
kan secara rekursif dengan cara berikut:
yk = (A− αI)−1xk (3.9)
xk+1 =1
ck+1
yk, (3.10)
dimana ck+1 = x(k)j dan x
(k)j = max
1≤i≤n{|x(k)i |} akan konvergen ke pasangan eigen
dari matriks (A − αI)−1, yaitu µ1 dan vj. Dengan demikian, nilai eigen yang
berkorespondensi dengan matriks A adalah
λj =1
µ1
+ α. (3.11)
Konsep shifted-inverse power method lebih mudah dipahami jika mengambil
contoh matriks sebelumnya. Misalkan
A =
0 11 −5
−2 17 −7
−4 26 −10
, (3.12)
yang diketahui bahwa memiliki nilai eigen λ1 = 4, λ2 = 2, dan λ3 = 1. Pengerjaan
metode ini dilakukan dengan 3 kasus.
1. Untuk λ1 = 4.
Jika dipilih α = 4.2, maka matriks A− 4.2I adalah sebagai berikut.
A− 4.2I =
−4.2 11 −5
−2 12.8 −7
−4 26 −14.2
.Jika dimulai dengan x0 =
[1 1 1
]′, maka berdasarkan Persamaan 3.9 di-
peroleh vektor y0 =[−9.545454545 −14.09090909 −23.18181818
]′. Lalu
hitung nilai tertinggi dari y0 yaitu c1 = −23.18181818. Selanjutnya berda-
sarkan Persamaan 3.10, diperoleh x1 =[0.4117647059 0.6078431373 1
]′.
Langkah ini berlanjut hingga diperoleh iterasi seperti pada Tabel 3.3.
Pemprograman Komputer II 26 Nanda Arista Rizki, M.Si.
Tabel 3.3: Iterasi Shifted-inverse Power Method untuk Matriks A− 4.2I
k (A− 4.2I)−1xk = ck+1xk+1
0 -23.18181818 [ 0.4117647059 0.6078431373 1 ]′
1 -5.356506239 [ 0.4009983361 0.6006655574 1 ]′
2 -5.030252609 [ 0.4000902120 0.6000601413 1 ]′
3 -5.002733697 [ 0.4000081966 0.6000054644 1 ]′
4 -5.000248382 [ 0.4000007451 0.6000004967 1 ]′
5 -5.000022579 [ 0.4000000677 0.6000000452 1 ]′
6 -5.000002053 [ 0.4000000062 0.6000000041 1 ]′
7 -5.000000187 [ 0.4000000006 0.6000000004 1 ]′
8 -5.000000017 [ 0.4000000001 0.6000000000 1 ]′
Perhatikan bahwa barisan {ck} konvergen ke µ1 = −5 yang merupakan nilai
eigen dari (A − 4.2I)−1 dan barisan {Xk} konvergen ke v1 =[25
35
1]′
.
Dengan demikian, nilai eigen λ1 dari A diperoleh dengan perhitungan berikut.
λ1 =1
µ1
+ α =1
(−5)+ 4.2 = −0.2 + 4.2 = 4.
2. Untuk λ2 = 2.
Pilih α = 2.1, lalu dimulai dengan vektor x0 =[1 1 1
]′. Sehingga diperoleh
matriks A− 2.1I dan vektor y0 berikut.
A− 2.1I =
−2.1 11 −5
−2 14.9 −7
−4 26 −12.1
; y0 =
11.05263158
21.57894737
42.63157895
.Lalu hitung konstanta c1 = 42.63157895. Kemudian berdasarkan Persamaan
3.10, diperoleh x1 =[0.2592592593 0.5061728395 1
]′. Langkah ini berlanjut
hingga diperoleh iterasi seperti yang tampak pada Tabel 3.4.
Perhatikan bahwa nilai eigen dominan dari (A − 2.1I)−1 adalah µ1 = −10.
Dengan demikian, pasangan eigen dari matriks A adalah
λ2 =1
µ1
+ α =1
(−10)+ 2.1 = −0.1 + 2.1 = 2
v2 =
1412
1
.Pemprograman Komputer II 27 Nanda Arista Rizki, M.Si.
Tabel 3.4: Iterasi Shifted-inverse Power Method untuk Matriks A− 2.1I
k (A− 2.1I)−1xk = ck+1xk+1
0 42.63157895 [ 0.2592592593 0.5061728395 1 ]′
1 -9.350227420 [ 0.2494788047 0.4996525365 1 ]′
2 -10.03657511 [ 0.2500273314 0.5000182209 1 ]′
3 -9.998082009 [ 0.2499985612 0.4999990408 1 ]′
4 -10.00010097 [ 0.2500000757 0.5000000505 1 ]′
5 -9.999994686 [ 0.2499999960 0.4999999973 1 ]′
6 -10.00000028 [ 0.2500000002 0.5000000001 1 ]′
3. Untuk λ3 = 1.
Pilih α = 0.875, lalu dimulai dengan vektor x0 =[1 1 1
]′. Hasil iterasi
metode ini, disajikan ke dalam Tabel 3.5.
Tabel 3.5: Iterasi Shifted-inverse Power Method untuk Matriks A− 0.875I
k (A− 0.875I)−1xk = ck+1xk+1
0 -30.40000000 [ 0.5052631579 0.4947368421 1 ]′
1 8.404210526 [ 0.5002004008 0.4997995992 1 ]′
2 8.015390782 [ 0.5000080006 0.4999919994 1 ]′
3 8.000614449 [ 0.5000003200 0.4999996800 1 ]′
4 8.000024576 [ 0.5000000128 0.4999999872 1 ]′
5 8.000000983 [ 0.5000000005 0.4999999995 1 ]′
6 8.000000039 [ 0.5000000000 0.5000000000 1 ]′
Perhatikan bahwa nilai eigen dominan dari (A − 0.875I)−1 adalah µ1 = 8.
Dengan demikian, pasangan eigen dari matriks A adalah
λ3 =1
µ1
+ α =1
8+ 0.875 = 0.125 + 0.875 = 1
v2 =
1212
1
.Berdasarkan hasil iterasi pada Tabel 3.5, barisan vektor {xk} jika dimulai dari
x0 =[1 1 1
]′maka konvergen dalam 7 iterasi.
Pemprograman Komputer II 28 Nanda Arista Rizki, M.Si.
3.4 Latihan
1. Diberikan sebuah vektor v =[v1 v2 . . . vn
]. Buatlah program Pascal yang
dapat menghitung Manhattan norm berikut.
‖v‖1 := |v1|+ |v2|+ · · ·+ |vn|.
2. Buatlah suatu program Pascal yang dapat menghitung p-norm untuk vektor
v dalam soal nomor 1, ketika p = 3.
‖v‖p := (|v1|p + |v2|p + · · ·+ |vn|p)1p .
3. Buatlah suatu program Pascal yang dapat menghitung norm tak hingga untuk
vektor v dalam soal nomor 1.
‖v‖∞ := max{|v1|, |v2|, . . . , |vn|}.
4. Misalkan A =
0 11 −5
−2 17 −7
−4 26 −10
dan x0 =
1
1
1
. Buatlah program Pascal yang
dapat menentukan nilai eigen dominan dan vektor eigen dominan!
5. Misalkan A =
[2 0
1 8
]dan x0 =
[1
1
]. Buatlah program Pascal yang dapat
menentukan nilai eigen dan vektor eigen menggunakan Shifted-inverse Power
Method !
Pemprograman Komputer II 29 Nanda Arista Rizki, M.Si.
Daftar Pustaka
[1] Cormen, T.H., Leiserson, C.E., Rivest, R.L., Stein, C. (2014). Introduction to
Algorithms, 3rd ed. Cambridge: MIT Press.
[2] Gonnet, G.H., Baeza-Yates, R. (1991). Handbook of Algorithms and Data Stru-
ctures: In Pascal and C, 2nd ed. New York: Addison-Wesley Publishing.
[3] Mathews, J.H., Fink, K.D. (1999). Numerical Methods Using MATLAB, 3rd
ed. New Jersey: Prentice-Hall.
30