Komputasi perkalian matriks

2.5.4 Komputasi perkalian matriks

Mari kita mulai lagi dari source code paling dasar dari operasi perkalian matriks sesuai dengan contoh di atas.

1 clear all 2 clc

4 A = [3 8 5; 6 4 7]; % inisialisasi matriks A 5 B = [1 3; 5 9; 2 4]; % inisialisasi matriks B

7 % ---proses perkalian matriks---- 8 E(1,1)=A(1,1)*B(1,1)+A(1,2)*B(2,1)+A(1,3)*B(3,1); 9 E(1,2)=A(1,1)*B(1,2)+A(1,2)*B(2,2)+A(1,3)*B(3,2); 10 E(2,1)=A(2,1)*B(1,1)+A(2,2)*B(2,1)+A(2,3)*B(3,1); 11 E(2,2)=A(2,1)*B(1,2)+A(2,2)*B(2,2)+A(2,3)*B(3,2);

13 % ---menampilkan matriks A, B dan E---- 14 A 15 B 16 E

28 BAB 2. MATRIKS DAN KOMPUTASI Sejenak, mari kita amati dengan cermat statemen dari baris ke-9 sampai ke-12 sambil dikaitkan

dengan bentuk umum penulisan indeks pada perkalian matriks yaitu

(2.15) Dari sana ada 4 point yang perlu dicatat:

e ij =a ik .b kj +a ik .b kj +a ik .b kj

• elemen e memiliki indeks i dan indeks j dengan indeks j lebih cepat berubah dibanding indeks i.

• pada baris statemen ke-8 sampai ke-11 ada tiga kali operasi perkalian dan dua kali operasi penjumlahan yang semuanya melibatkan indeks

i, indeks j dan indeks k. Namun indeks k selalu berubah pada masing-masing perkalian. Jadi indeks k paling cepat berubah diban- ding indeks i dan indeks j.

• elemen a memiliki indeks i dan indeks k dimana indeks k lebih cepat berubah dibanding indeks i.

• elemen b memiliki indeks k dan indeks j dimana indeks k lebih cepat berubah dibanding indeks j.

Tahapan modifikasi source code perkalian matriks tidak semudah penjumlahan matriks. Dan mengajarkan logika dibalik source code perkalian matriks jauh lebih sulit daripada sekedar me- modifikasi source code tersebut. Tapi akan saya coba semampu saya lewat tulisan ini walau harus perlahan-lahan. Mudah-mudahan mudah untuk dipahami.

Saya mulai dengan memecah operasi pada statemen baris ke-8 yang bertujuan menghitung nilai E(1, 1)

1 clear all 2 clc

4 A = [3 8 5; 6 4 7]; % inisialisasi matriks A 5 B = [1 3; 5 9; 2 4]; % inisialisasi matriks B

7 % ---proses perkalian matriks---- 8 % ---E(1,1) dihitung 3 kali 9 E(1,1)=A(1,1)*B(1,1); 10 E(1,1)=E(1,1)+A(1,2)*B(2,1); 11 E(1,1)=E(1,1)+A(1,3)*B(3,1);

13 % ---E(1,2); E(2,1); dan E(2,2) masih seperti semula 14 E(1,2)=A(1,1)*B(1,2)+A(1,2)*B(2,2)+A(1,3)*B(3,2); 15 E(2,1)=A(2,1)*B(1,1)+A(2,2)*B(2,1)+A(2,3)*B(3,1); 16 E(2,2)=A(2,1)*B(1,2)+A(2,2)*B(2,2)+A(2,3)*B(3,2);

18 % ---menampilkan matriks A, B dan E---- 19 A 20 B 21 E

Agar baris ke-9 memiliki pola yang sama dengan baris ke-11 dan ke-12, upaya yang dilakukan adalah

2.5. OPERASI MATEMATIKA

1 clear all 2 clc

4 A = [3 8 5; 6 4 7]; % inisialisasi matriks A 5 B = [1 3; 5 9; 2 4]; % inisialisasi matriks B

7 % ---proses perkalian matriks---- 8 % ---E(1,1) dihitung 3 kali 9 E(1,1)=0; 10 E(1,1)=E(1,1)+A(1,1)*B(1,1); 11 E(1,1)=E(1,1)+A(1,2)*B(2,1); 12 E(1,1)=E(1,1)+A(1,3)*B(3,1);

14 % ---E(1,2); E(2,1); dan E(2,2) masih seperti semula 15 E(1,2)=A(1,1)*B(1,2)+A(1,2)*B(2,2)+A(1,3)*B(3,2); 16 E(2,1)=A(2,1)*B(1,1)+A(2,2)*B(2,1)+A(2,3)*B(3,1); 17 E(2,2)=A(2,1)*B(1,2)+A(2,2)*B(2,2)+A(2,3)*B(3,2);

19 % ---menampilkan matriks A, B dan E---- 20 A 21 B 22 E

Dari sini kita bisa munculkan indeks k

1 clear all 2 clc

4 A = [3 8 5; 6 4 7]; % inisialisasi matriks A 5 B = [1 3; 5 9; 2 4]; % inisialisasi matriks B

7 % ---proses perkalian matriks---- 8 E(1,1)=0; 9 for k=1:3

% k bergerak dari 1 sampai 3

10 E(1,1)=E(1,1)+A(1,k)*B(k,1); 11 end

13 % ---E(1,2); E(2,1); dan E(2,2) masih seperti semula 14 E(1,2)=A(1,1)*B(1,2)+A(1,2)*B(2,2)+A(1,3)*B(3,2); 15 E(2,1)=A(2,1)*B(1,1)+A(2,2)*B(2,1)+A(2,3)*B(3,1); 16 E(2,2)=A(2,1)*B(1,2)+A(2,2)*B(2,2)+A(2,3)*B(3,2);

18 % ---menampilkan matriks A, B dan E---- 19 A 20 B 21 E

Kemudian cara yang sama dilakukan pada E(1, 2), E(2, 1), dan E(2, 2). Anda mesti cermat dan hati-hati dalam menulis angka-angka indeks!!!

1 clear all 2 clc

4 A = [3 8 5; 6 4 7]; % inisialisasi matriks A 5 B = [1 3; 5 9; 2 4]; % inisialisasi matriks B

30 BAB 2. MATRIKS DAN KOMPUTASI

7 % ---proses perkalian matriks---- 8 E(1,1)=0; 9 for k=1:3

10 E(1,1)=E(1,1)+A(1,k)*B(k,1); 11 end

13 E(1,2)=0; 14 for k=1:3

15 E(1,2)=E(1,2)+A(1,k)*B(k,2); 16 end

18 E(2,1)=0; 19 for k=1:3

20 E(2,1)=E(2,1)+A(2,k)*B(k,1); 21 end

23 E(2,2)=0; 24 for k=1:3

25 E(2,2)=E(2,2)+A(2,k)*B(k,2); 26 end

28 % ---menampilkan matriks A, B dan E---- 29 A 30 B 31 E

Inisialisasi elemen-elemen matriks E dengan angka nol, bisa dilakukan diawal proses perkalian yang sekaligus memunculkan indeks i dan j untuk elemen E

1 clear all 2 clc

4 A = [3 8 5; 6 4 7]; % inisialisasi matriks A 5 B = [1 3; 5 9; 2 4]; % inisialisasi matriks B

7 % ---proses perkalian matriks---- 8 for i=1:2

% i bergerak dari 1 sampai 2

9 for j=1:2

% j bergerak dari 1 sampai 2

10 E(i,j)=0; 11 end 12 end

14 for k=1:3 15 E(1,1)=E(1,1)+A(1,k)*B(k,1); 16 end

18 for k=1:3 19 E(1,2)=E(1,2)+A(1,k)*B(k,2); 20 end

22 for k=1:3 23 E(2,1)=E(2,1)+A(2,k)*B(k,1); 24 end

26 for k=1:3 27 E(2,2)=E(2,2)+A(2,k)*B(k,2); 28 end

2.5. OPERASI MATEMATIKA

30 % ---menampilkan matriks A, B dan E---- 31 A 32 B 33 E

Sekarang coba Anda perhatikan statemen pada baris ke-15 dan ke-19, lalu bandingkan indeks

i dan indeks j pada elemen E. Indeks mana yang berubah? Ya. Jawabannya adalah indeks j. Dengan demikian kita bisa munculkan indeks j

1 clear all 2 clc

4 A = [3 8 5; 6 4 7]; % inisialisasi matriks A 5 B = [1 3; 5 9; 2 4]; % inisialisasi matriks B

7 % ---proses perkalian matriks---- 8 for i=1:2

% i bergerak dari 1 sampai 2

9 for j=1:2

% j bergerak dari 1 sampai 2

10 E(i,j)=0; 11 end 12 end

14 j=1; 15 for k=1:3

16 E(1,j)=E(1,j)+A(1,k)*B(k,j); 17 end

19 j=2; 20 for k=1:3

21 E(1,j)=E(1,j)+A(1,k)*B(k,j); 22 end

24 for k=1:3 25 E(2,1)=E(2,1)+A(2,k)*B(k,1); 26 end

28 for k=1:3 29 E(2,2)=E(2,2)+A(2,k)*B(k,2); 30 end

32 % ---menampilkan matriks A, B dan E---- 33 A 34 B 35 E

Lihatlah, statemen dari baris ke-15 sampai ke-17 memiliki pola yang sama dengan statemen dari baris ke-20 sampai ke-22, sehingga mereka bisa disatukan kedalam looping indeks j

1 clear all 2 clc

4 A = [3 8 5; 6 4 7]; % inisialisasi matriks A 5 B = [1 3; 5 9; 2 4]; % inisialisasi matriks B

7 % ---proses perkalian matriks---- 8 for i=1:2

% i bergerak dari 1 sampai 2

32 BAB 2. MATRIKS DAN KOMPUTASI

9 for j=1:2

% j bergerak dari 1 sampai 2

10 E(i,j)=0; 11 end 12 end

14 for j=1:2 15 for k=1:3 16 E(1,j)=E(1,j)+A(1,k)*B(k,j); 17 end 18 end

20 for k=1:3 21 E(2,1)=E(2,1)+A(2,k)*B(k,1); 22 end

24 for k=1:3 25 E(2,2)=E(2,2)+A(2,k)*B(k,2); 26 end

28 % ---menampilkan matriks A, B dan E---- 29 A 30 B 31 E

Sekarang coba sekali lagi Anda perhatikan statemen pada baris ke-21 dan ke-25, lalu bandingk- an indeks i dan indeks j pada elemen E. Indeks mana yang berubah? Ya. Jawabannya tetap indeks j. Dengan demikian kita bisa munculkan juga indeks j disana

1 clear all 2 clc

4 A = [3 8 5; 6 4 7]; % inisialisasi matriks A 5 B = [1 3; 5 9; 2 4]; % inisialisasi matriks B

7 % ---proses perkalian matriks---- 8 for i=1:2

% i bergerak dari 1 sampai 2

9 for j=1:2

% j bergerak dari 1 sampai 2

10 E(i,j)=0; 11 end 12 end

14 for j=1:2 15 for k=1:3 16 E(1,j)=E(1,j)+A(1,k)*B(k,j); 17 end 18 end

20 j=1; 21 for k=1:3

22 E(2,j)=E(2,j)+A(2,k)*B(k,j); 23 end

25 j=2; 26 for k=1:3

27 E(2,j)=E(2,j)+A(2,k)*B(k,j); 28 end

2.5. OPERASI MATEMATIKA

30 % ---menampilkan matriks A, B dan E---- 31 A 32 B 33 E

Cermatilah, statemen dari baris ke-21 sampai ke-23 memiliki pola yang sama dengan statemen dari baris ke-25 sampai ke-27, sehingga mereka pun bisa disatukan kedalam looping indeks j

1 clear all 2 clc

4 A = [3 8 5; 6 4 7]; % inisialisasi matriks A 5 B = [1 3; 5 9; 2 4]; % inisialisasi matriks B

7 % ---proses perkalian matriks---- 8 for i=1:2

% i bergerak dari 1 sampai 2

9 for j=1:2

% j bergerak dari 1 sampai 2

10 E(i,j)=0; 11 end 12 end

14 for j=1:2 15 for k=1:3 16 E(1,j)=E(1,j)+A(1,k)*B(k,j); 17 end 18 end

20 for j=1:2 21 for k=1:3 22 E(2,j)=E(2,j)+A(2,k)*B(k,j); 23 end 24 end

26 % ---menampilkan matriks A, B dan E---- 27 A 28 B 29 E

Akhirnya kita sampai pada bagian akhir tahapan modifikasi. Perhatikan baris ke-16 dan ke-22. Indeks i pada elemen E dan A bergerak dari 1 ke 2, sehingga indeks i bisa dimunculkan

1 clear all 2 clc

4 A = [3 8 5; 6 4 7]; % inisialisasi matriks A 5 B = [1 3; 5 9; 2 4]; % inisialisasi matriks B

7 % ---proses perkalian matriks---- 8 for i=1:2

% i bergerak dari 1 sampai 2

9 for j=1:2

% j bergerak dari 1 sampai 2

10 E(i,j)=0; 11 end 12 end

14 i=1; 15 for j=1:2

34 BAB 2. MATRIKS DAN KOMPUTASI

16 for k=1:3 17 E(i,j)=E(i,j)+A(i,k)*B(k,j); 18 end 19 end

21 i=2; 22 for j=1:2

23 for k=1:3 24 E(i,j)=E(i,j)+A(i,k)*B(k,j); 25 end 26 end

28 % ---menampilkan matriks A, B dan E---- 29 A 30 B 31 E

Sekarang, statemen dari baris ke-15 sampai ke-19 memiliki pola yang sama dengan statemen dari baris ke-22 sampai ke-26. Mereka bisa disatukan oleh looping indeks i

1 clear all 2 clc

4 A = [3 8 5; 6 4 7]; % inisialisasi matriks A 5 B = [1 3; 5 9; 2 4]; % inisialisasi matriks B

7 % ---proses perkalian matriks---- 8 for i=1:2

9 for j=1:2 10 E(i,j)=0; 11 end 12 end

14 for i=1:2 15 for j=1:2 16 for k=1:3 17 E(i,j)=E(i,j)+A(i,k)*B(k,j); 18 end 19 end 20 end

22 % ---menampilkan matriks A, B dan E---- 23 A 24 B 25 E

Inilah hasil akhir dari tahapan-tahapan modifikasi yang selanjutnya saya sebut sebagai proses optimasi. Upaya yang baru saja saya perlihatkan, sebenarnya penuh dengan jebakan-jebakan kesalahan, terutama jika Anda kurang cermat membaca indeks dan pola. Upaya seperti itu memerlukan konsentrasi dan perhatian yang tidak sebentar. Upaya semacam itu tidak semudah meng-copy hasil akhir optimasi. Walaupun bisa di-copy, namun saya menyarankan agar Anda mencoba melakukan proses optimasi itu sekali lagi di komputer tanpa melihat catatan ini dan tanpa bantuan orang lain. Kalau Anda gagal, cobalah berfikir lebih keras untuk mencari jalan keluarnya. Jika masih tetap gagal, silakan lihat catatan ini sebentar saja sekedar untuk mencari

35 tahu dimana letak kesalahannya. Hanya dengan cara begitu ilmu programming ini akan bisa

2.5. OPERASI MATEMATIKA

menyatu pada diri Anda.