Rabu, 08 Mei 2013

Perkalian Matrix Dengan Menggunakan Bahasa Pemrograman C.

Hi semua... Kembali lagi bersama-sama kita akan belajar bahas pemrograman C. Artikel PintarCoding.com kali ini akan membahas tentang perkalian matrix dengan menggunakan bahasa pemrograman C. Ini merupakan artikel lanjutan dari artikel sebelumnya yang membahas tentang array 2 dimensi pada bahasa pemrograman C. Oke seperti apa bentuk perkalian matrix pada bahasa pemrograman C mari kita sama-sama belajar.


Masih ingat dengan soal minggu lalu???... soalnya seperti berikut:
| 0 1 |     | 2 |
| 1 0 |  x  | 3 |

Tentu orang-orang matematika lebih expert dalam hal ini, namun saya akan coba untuk menjelaskan sedikit tentang bagaimana melakukan perkalian matrix, kemudian kita sama-sama belajar bagaimana menerapkannya pada bahasa pemrograman C.

1. Perkalian matrix.

Seperti apa perkalian, jargon yang sangat popular tentang perkalian matrix adalah "baris kali kolom"... apakah teman-teman pernah mendengar kalimat ini???... :) oke apa artinya "baris kali kolom"???... ya elemen-elemen pada baris matrix pertama akan di kalikan dengan elemen-elemen pada kolom matrix ke dua. bagaimana bentuknya berikut keterangannya
  • baris 1 x kolom 1 menghasilkan elemen posisi ke (1,1) [0,0]
  • baris 2 x kolom 1 menghasilkan elemen posisi ke (2,1) [1,0]
Matrix yang dihasilkan dari perkalian kedua matrix diatas adalah :
  • posisi ke (1,1) [0,0] = (0 x 2) + (1 x 3) = 3
  • posisi ke (2,1) [1,0] = (1 x 2) + (0 x 3) = 2

2. Penarapan Perkalian Matrix Pada Bahasa Pemrograman C

Mari kita coba bersama-sama untuk menerapkannya pada bahasa pemrograman C. Berikut contoh sourcecode untuk perkalian dengan menggunakan cara manual:
#include <stdio.h>

int main() {
    int matrix1[2][2] = {{0, 1}, {1, 0}};
    int matrix2[2][1] = {{2}, {3}};
    int matrix_hasil[2][1];
    int i, j;
    
    matrix_hasil[0][0] = matrix1[0][0] * matrix2[0][0]
                + matrix1[0][1] * matrix2[1][0];

    matrix_hasil[1][0] = matrix1[1][0] * matrix2[0][0]
                + matrix1[1][1] * matrix2[1][0];

    for (i=0; i<2; i++) {
        for (j=0; j<1; j++) {
            printf("%d ", matrix_hasil[i][j]);
        }
        printf("\n");
    }
    return 0;
}
Dengan cara diatas tentunya kita akan kesulitan jika ukuran matrix mengalami perubahan, so bagaimana caranya agar perkalian matrix dapat menjadi se fleksibel mungkin???... Mari kita terapkan dengan menggunakan perulangan yang sudah sempat dipelajari pada artikel sebelumnya. Berikut sourcecode untuk perkalian matrix, agak sedikit panjang namun akan saya coba jelaskan sebisa mungkin.
#include <stdio.h>

int main() {

    int m1x = 2;
    int m1y = 2;
    int m2x = m1y;
    int m2y = 1;

    int matrix1[m1x][m1y];
    int matrix2[m2x][m2y];
    int matrix_hasil[m1x][m2y];
    int x, y, i, hasil;
    
    matrix1[0][0] = 0;
    matrix1[0][1] = 1;
    matrix1[1][0] = 1;
    matrix1[1][1] = 0;

    matrix2[0][0] = 2;
    matrix2[1][0] = 3;

    printf("Matrix 1 : \n");
    for (x=0; x<m1x; x++) {
        for (y=0; y<m1y; y++) {
            printf("%d ", matrix1[x][y]);
        }
        printf("\n");
    }
    printf("\n");

    printf("Matrix 2 : \n");    
    for (x=0; x<m2x; x++) {
        for (y=0; y<m2y; y++) {
            printf("%d ", matrix2[x][y]);
        }
        printf("\n");
    }
    printf("\n");

    // for untuk perhitungan perkalian matrix
    for (x=0; x<m1x; x++) {
        for (y=0; y<m2y; y++) {
            hasil = 0;
            for (i=0; i<m2x; i++) {
                hasil += (matrix1[x][i] * matrix2[i][y]);
            }
            matrix_hasil[x][y] = hasil;
        }
    }

    printf("Matrix Hasil : \n");
    for (x=0; x<m1x; x++) {
        for (y=0; y<m2y; y++) {
            printf("%d ", matrix_hasil[x][y]);
        }
        printf("\n");
    }
    return 0;
}
Perintah diatas akan menghasilkan :
Matrix 1 : 
0 1 
1 0 

Matrix 2 : 

Matrix Hasil : 

Sedikit menjelaskan untuk perintah di perhatikan cara pendeklarasian matrixnya, dalam bahasa pemrograman C, ternyata pengisian variable array yang dilakukan bersamaan dengan deklarasi array, untuk kasus array 2 dimensi tidak diijinkan, jika nilai ukuran array ditentukan lewat variable, sehingga pengisian dilakukan secara manual. Dalam sourcecode diatas terdapat 3 perintah yang mirip, yaitu berfungsi untuk melakukan print matrix, yang membedakan hanya variable yang diprint, dan perulangan rangkap 2 yang disesuaikan dengan ukuran array 2 dimensi (matrix). Sedangkan untuk perhitungan perkalian matrix dilakukan dengan menggunakan for rangkap 3...

For pertama, digunakan untuk melakukan perulangan untuk posisi baris yang ingin dihitung nilainya,
For kedua, digunakan untuk menentukan posisi dari kolom,
For ketiga, digunakan untuk menghitung nilai dari posisi baris dan kolom yang sedang aktif, dalam hal ini baris dan kolom yang aktif ditentukan oleh variable x dan variable y, sedangkan untuk variable i menentukan baris x elemen ke berapa pada matrix pertama dan kolom y elemen ke berapa pada matrix kedua... kira-kira seperti itu... bagaimana???... tidak terlalu rumit kan???...

Artikel berikut akan membahas tentang cara menggunakan input... so keep learning... :)

Terima Kasih, Semoga Bermanfaat.

2 komentar: