Operasi Matriks Octave

Posted on: 9 Maret 2018, by :
Panduan Praktikum 3 Octave
Edy Wihardjo, S.Pd. M.Pd.
edisi revisi: 3 Maret 2018

Pendahuluan

Tipe data yang yang sudah dikenalkan pada bagian satu adalah skalar (misalnya 100, 2.1 dan 1e-3). Pada bagian ini kita akan mengenal tipe data matriks, yaitu kumpulan skalar yang tersusun dalam baris dan kolom.

Bab ini mengasumsikan pembaca sudah mengenal matriks dan berbagai operasinya seperti perkalian antar matriks dan pencarian invers matriks. Pembahasan mengenai hal tersebut dapat ditemukan di buku-buku aljabar linier.

Membuat Matriks

Cara yang paling mudah untuk membuat matriks adalah dengan menuliskan elemen-elemennya. Elemen pada baris yang sama dipisahkan menggunakan koma (,), sedangkan untuk membatasi baris digunakan titik koma (;). Lihat contoh berikut

>> [1,2,3; 4,5,6]
ans =
   1   2   3
   4   5   6
>> [2,3,5,7]
ans =
   2   3   5   7
>> [2;3;5;7]
ans =
   2
   3
   5
   7

Saat membuat matriks, koma bisa digantikan dengan spasi. Jadi

>> [2 3 5 7] 
ans =
   1   2   3   4

artinya sama dengan

>> [2,3,5,7]
ans =
   1   2   3   4

Fungsi-fungsi yang menghasilkan matriks contohnya adalah zeros, eye, dan rand. zeros menghasilkan matriks yang semua elemennya 0, eye dapat menghasilkan matriks identitas, dan rand menghasilkan matriks yang nilai elemennya random (berada dalam interval [0,1)). Jika dipanggil menggunakan sebuah argumen skalar a, maka ukuran matriks yang dibuat adalah a x a. Jika dipanggil menggunakan dua argumen skalar a dan b, maka ukuran matriks yang dihasilkan adalah a x b.

Berikut contohnya:

Matriks Nol

>> zeros(2)
ans =
   0   0
   0   0

Matriks Identitas

>> eye(2)
ans =
Diagonal Matrix
   1   0
   0   1

Matriks Acak

>> rand(2)
ans =
  0.41055  0.24794
  0.26737  0.88569
>> eye(2,4)
ans =
   1   0   0   0
   0   1   0   0

Tentunya matriks dapat disimpan di sebuah variabel. Perlu diketahui bahwa tipe variabel di Octave tidaklah statis. Suatu variabel dapat bertipe skalar pada waktu tertentu dan bertipe matriks pada waktu lainnya. Perhatikan contohnya:

>> A = 1
A = 1
>> A = [1 2 3; 4 5 6]
A =
   1   2   3
   4   5   6

Setelah di-assign suatu matriks, tipe variabel A berubah dari skalar menjadi matriks.

Jika kita mencoba membuat matriks yang ukurannya $1 \times 1$, maka Octave akan mengubahnya menjadi skalar. Dengan pengetahuan tersebut, kita bisa membuat suatu skalar random dengan memanggil rand(1).

Fungsi rand juga bisa dipanggil tanpa argumen, yang juga menghasilkan sebuah skalar random. Hal tersebut diilustrasikan dalam contoh berikut:

>> [7]
ans = 7
>> rand(1)
ans = 0.31056
>> rand
ans = 0.92603

Kita juga dapat membentuk matriks baru dengan menggabungkan beberapa matriks. Sintaksnya mirip dengan pembuatan matriks dari skalar. Pahami contoh-contoh berikut:

>> B = [1 2 3]
B =
   1   2   3
>> C = [4 5 6; 7 8 9]
C =
   4   5   6
   7   8   9

matriks berikut merupakan perpaduan matriks B (baris ke-1) dan matriks C (baris ke-2 dan ke-3).

>> [B; C]
ans =
   1   2   3
   4   5   6
   7   8   9

dibentuk matriks baru, dimana baris pertamanya merupakan matriks B, baris ketiga dan keempatnya diperoleh dari matriks C, serta disisipkan matriks 0 di baris ke-2, menjadi matriks berikut:

>> [B; 0 0 0; C]
ans =
   1   2   3
   0   0   0
   4   5   6
   7   8   9

Pada contoh berikut, ditentukan matriks D, matriks E dan matriks F. Ketiganya merupakan matriks kolom berukuran $3 \times 1$.

>> D = [1; 2; 3]
D =
   1
   2
   3
>> E = [4; 5; 6]
E =
   4
   5
   6
>> F = [7; 8; 9]
F =
   7
   8
   9

Kemudian, dibentuk matriks baru, berukuran (ordo) $ 3 \times 3 $ dimana matriks D menjadi kolom ke-1, matriks E menjadi kolom ke-2, dan matriks F menjadi kolom ke-3, sebagai berikut:

>> [D E F]
ans =
   1   4   7
   2   5   8
   3   6   9
>> [D E F; 0 0 0]
ans =
   1   4   7
   2   5   8
   3   6   9
   0   0   0

Operasi pada Matriks

Matriks dapat dijumlahkan, dikurangi, dikali, dan dibagi oleh skalar. Operasi skalar yang bersangkutan akan dikerjakan pada tiap elemen matriks untuk menghasilkan matriks baru. Contoh berikut akan menjelaskannya (kita akan menggunakan variabel A dari contoh sebelumnya, yang bernilai [1 2 3; 4 5 6]):

Penjumlahan Matriks

>> A + 1
ans =
   2   3   4
   5   6   7

Pengurangan Matriks

>> A - 1
ans =
   0   1   2
   3   4   5

Perkalian Matriks

>> A * 2
ans =
    2    4    6
    8   10   12

Pembagian Matriks

>> A / 2
ans =
  0.50000  1.00000  1.50000
  2.00000  2.50000  3.00000

Untuk operasi penjumlahan, pengurangan, dan perkalian, matriks yang bersangkutan dapat menjadi operand sebelah kanan (misalnya 1 - A dan 2 * A). Hal tersebut tidak dapat dilakukan untuk operasi pembagian.

Operasi penjumlahan dan pengurangan antar matriks dapat dilakukan jika jumlah baris dan kolom matriks yang terlibat sama:

>> A + A
ans =
    2    4    6
    8   10   12
>> A - A
ans =
   0   0   0
   0   0   0

Untuk perkalian matriks A * B, jumlah kolom pada matriks A harus sama dengan jumlah baris pada matriks B:

>> B = [1 2; 3 4; 5 6]
B =
   1   2
   3   4
   5   6
>> A * B
ans =
   22   28
   49   64

Sebuah matriks persegi A juga dapat dipangkatkan dengan bilangan bulat n. $A^n$ didefinisikan sebagai A * A * ... * A (sebanyak n kali). Lihat contoh berikut:

>> C = [1 2; 1 3]
C =
  1  2
  1  3
>> C^4
ans =
   41  112
   56  153

Penyelesaian Masalah 1: Perkalian Matriks

Misalkan harga 1 porsi nasi, sayur, dan ayam masing-masing Rp1.000, Rp750, dan Rp3.000. Fido mentraktir temannya Doli, Lia, dan Ani. Fido membeli 4 porsi nasi, 2 porsi sayur, dan 4 porsi ayam. Doli membeli masing-masing 1 porsi nasi, sayur, dan ayam. Lia membeli 2 porsi nasi dan 2 porsi ayam. Ani membeli 1 porsi nasi dan 3 porsi sayur. Berapakah ongkos yang dihabiskan masing-masing orang?

Kita akan menggunakan matriks untuk menyelesaikan masalah ini. Pertama, kita buat 4 matriks baris dengan 3 elemen. Masing-masing matriks menunjukkan jumlah nasi (kolom 1), sayur (kolom 2), dan ayam (kolom 3) yang dibeli.

>> fido = [4 2 4]
fido =
   4   2   4
>> doli = [1 1 1]
doli =
   1   1   1
>> lia = [2 0 2]
lia =
   2   0   2
>> ani = [1 3 0]
ani =
   1   3   0

Kita akan satukan semuanya ke dalam sebuah matriks:

>> semua = [fido; doli; lia; ani]
semua =
   4   2   4
   1   1   1
   2   0   2
   1   3   0

Berikutnya adalah membuat matriks kolom yang berisi harga per porsi untuk nasi (baris 1), sayur (baris 2), dan ayam (baris 3) untuk tiap porsinya:

>> harga = [1000; 750; 3000]
harga =
    1000
     750
    3000

Dengan menghitung semua * harga, kita akan mendapatkan matriks kolom dengan tiap kolom menunjukkan biaya tiap orang (cek):

>> harga_semua = semua * harga
harga_semua =
    17500
     4750
     8000
     3250

Dari sini terlihat bahwa Fido, Doli, Lia, dan Ani masing-masing menghabiskan Rp17.500, Rp4.750, Rp8.000, dan Rp3.250.

Operasi Matriks Lanjutan

Transpos Matriks

Untuk melakukan transpos digunakan operator ', seperti pada contoh berikut:

>> G=[1 2 3]
G =
   1   2   3
>> G'
ans =
   1
   2
   3

Matriks baris yang kita transpos akan menjadi matriks kolom.

Sebaliknya jika kita mentranspos matriks kolom, maka akan menjadi matriks baris

>> H=[2;3;4]
H =
   2
   3
   4
>> H'
ans =
   2   3   4

untuk matriks yang memiliki lebih dari 1 baris dan 1 kolom

>> J=[1 2 3;3 5 6]
J =
   1   2   3
   3   5   6
>> J'
ans =
   1   3
   2   5
   3   6

Determinan Matriks

Diketahui matriks persegi C

>> C = [1 2; 1 3]
C =
   1   2
   1   3

Untuk mencari determinan matriks persegi digunakan masing-masing fungsi det. Lihat contoh berikut:

>> det(C)
ans =  1

Invers Matriks

Untuk mencari invers matriks persegi digunakan masing-masing fungsi inv. Lihat contoh berikut:

>> inv(C)
ans =
   3  -2
  -1   1

Invers Matriks Diagonal

>> inv(eye(2))
ans =
   1  -0
   0   1

Terdapat dua operasi pembagian matriks yaitu pembagian kanan dan pembagian kiri. A / B melakukan pembagian kanan dan nilainya adalah A * inv(B). A \ B melakukan pembagian kiri dan nilainya adalah inv(A) * B. Secara internal, penggunaan operator pembagian akan menghitung hasil baginya tanpa
membentuk matriks invers. Lihatlah contoh berikut:

>> D = [3 2; 2 2]
D =
  3  2
  2  2
>> C / D
ans =
  -1.0000   2.0000
  -2.0000   3.5000
>> C * inv(D)
ans =
  -1.00000   2.00000
  -2.00000   3.50000
>> C \ D
ans =
   5   2
  -1   0
>> inv(C) * D
ans =
   5   2
  -1   0

Penyelesaian Masalah 2: Menyelesaikan Sistem Persamaan Linier

Tono membeli 1 buku tulis dan 3 pulpen dengan ongkos total Rp2.7500. Toni membeli 2 buku tulis dan 2 puplen dengan ongkos total Rp25.000. Berapakah masing-masing harga sebuah buku dan pulpen?

Misalkan harga buku kita lambangkan a dan harga pulpen b. Berarti a + 3b = 27500 dan 2a + 2b = 25000. Ini adalah sistem persamaan linier dalam dua peubah. Kita akan simpan koefisiennya pada matriks A dan konstanta di sebelah kanan persamaan pada matriks B:

>> A = [1 3; 2 2]
A =
   1   3
   2   2
>> B = [27500; 25000]
B =
   27500
   25000

Misalkan x adalah matriks kolom yang berisi peubah a di baris 1 dan peubah b di baris ke 2. Karena Ax = B, berarti x = inv(A) * B. Kita akan mencari x dengan pembagian kiri:

>> x = A \ B
x =
   500
   750

Berarti harga sebuah buku Rp5.000 dan harga sebuah pulpen Rp7.500.

Operasi Antar Elemen

Operasi penjumlahan dan pengurangan antar dua matriks merupakan operasi antar elemen. Maksudnya, elemen pada lokasi yang sama di kedua matriks akan dioperasikan untuk menghasilkan elemen baru di matriks hasil.

Di lain pihak, operasi perkalian, pembagian, dan perpangkatan bukan merupakan operasi antar elemen.

Untuk mendapatkan versi antar elemen dari ketiga operasi tersebut, digunakan operator .*, ./, dan .^ (masing-masing diawali dengan titik). Perhatikan contohnya:

Didefinisikan matriks E dan matriks F

>> E = [2 3]
E  =
  2  3
>> F = [2 2]
F  =
  2  2

Perkalian Antar Elemen

>> E .* F
ans =
  4  6

Perhatikan bahwa dengan operator .*, elemen di baris 1 kolom 1 pada matriks E (nilainya dikalikan dengan elemen di lokasi yang sama pada matriks F (nilainya 2) untuk menghasilkan elemen di lokasi yang sama pada matriks hasil (nilainya 4). Hal yang sama dilakukan untuk elemen-elemen lainnya.

Pembagian Antar Elemen

>> E ./ F
ans =
  1.0000  1.5000

Perpangkatan Antar Elemen

>> E .^ F
ans =
  4  9

Perlu diketahui bahwa operator-operator lainnya seperti + dan - juga dapat diberi titik di depannya (menjadi .+ dan .-). Tentunya dalam hal ini versi “biasa” maupun versi “bertitik” sama. Operator-operator bertitik juga dapat dikerjakan pada dua skalar. Sebagai contoh, 2 .* 5 akan menghasilkan 10.

>> 2.*5
ans =  10

Beberapa fungsi-fungsi yang bekerja pada skalar juga dapat menerima argumen matriks. Contohnya adalah fungsi abs dan sin. Matriks hasil akan dibentuk dengan mengaplikasikan fungsi tersebut untuk tiap elemen matriks. Lihat contoh berikut:

>> L = [-pi/2 pi/2]
L =
  -1.5708   1.5708

Fungsi Trigonometri

>> sin(L)
ans =
  -1   1

Fungsi Absolut

>> abs(L)
ans =
  1.5708  1.5708
>> sin(abs(L))
ans =
  1  1

Sebagai panduan umum, fungsi-fungsi yang mengembalikan hasil perhitungan (misalnya abs, sin, round, dan log) dapat diberi argumen matriks.

Penyelesaian Masalah 3: Operasi Antar Elemen

Misalkan $f(x) = (x^2 + sin(x)) / \sqrt{(2x + 1)}$. Berapakah nilai $f(0)$, $f(1)$, $f(2)$, $f(3)$, $f(4)$, dan $f(5)$?

Langkah pertama adalah membuat matriks yang berisi skalar yang ingin kita cari nilai fungsinya:

>> x = [0 1 2 3 4 5]
x =
   0   1   2   3   4   5

Berikutnya adalah memanfaatkan operasi antar elemen. Jangan lupa menggunakan titik untuk operator perpangkatan (.*) dan pembagian (./).

>> y = (x.^2 + sin(x)) ./ sqrt(2*x + 1)
y =
  0.00000  1.06317  2.19550  3.45502  5.08107  7.24866

Supaya kita tidak perlu repot menentukan operator yang harus diberi titik, kita dapat saja memberikan titik ke semua operatornya:

>> y = (x.^2 .+ sin(x)) ./ sqrt(2.*x .+ 1)
y =
  0.00000  1.06317  2.19550  3.45502  5.08107  7.24866

Berarti $f(0) = 0$, $f(1) = 1.06317$, $f(2) = 2.19550$, $f(3) = 3.45502$, $f(4) = 5.08107$, dan $f(5) = 7.24866$.

Mengindeks Matriks

Pada subbab-subbab sebelumnya kita melakukan operasi terhadap keseluruhan matriks. Sekarang kita akan mempelajari cara mengakses (atau mengindeks) elemen-elemen suatu matriks.

Di Octave, baris pertama suatu matriks (paling atas) disebut baris ke 1. Kolom pertama suatu matriks (paling kiri) disebut sebagai kolom ke 1. Untuk mengindeks elemen di baris i dan kolom j pada suatu matriks M, kita menuliskan M(i,j). Perhatikan contoh berikut:

>> M = [3 4; 5 6]
M =
  3  4
  5  6

Elemen baris ke-1, kolom ke-2 dari matriks M adalah

>> M(1,2)
ans = 4

Elemen baris ke-2, kolom ke-1 dari matriks M, yaitu 5, diganti menjadi 0

>> M(2,1) = 0
M =
  3  4
  0  6

Kita juga bisa mengindeks kolom atau baris tertentu pada suatu matriks. Untuk mengindeks baris i dari matriks M, kita menulis M(i,:) sedangkan untuk mengindeks kolom j dari matriks M, kita menulis M(:,j). Contoh berikut akan menjelaskan lebih lanjut:

>> N = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
N =
   1   2   3   4
   5   6   7   8
   9  10  11  12
  13  14  15  16
>> N(1,:)
ans =
  1  2  3  4
>> N(:,3)
ans =
   3
   7
  11
  15
>> N(4,:) = zeros(1,4)
N =
   1   2   3   4
   5   6   7   8
   9  10  11  12
   0   0   0   0

Dengan mengindeks matriks, kita bisa memperbesar matriks tersebut. Octave akan memberi nilai 0 pada elemen-elemen baru yang tidak kita tentukan nilainya. Perhatikan contoh berikut:

>> N(5,1) = 1
N =
   1   2   3   4
   5   6   7   8
   9  10  11  12
   0   0   0   0
   1   0   0   0
>> N(:,5) = rand(5,1)
N =
   1.00000   2.00000   3.00000   4.00000   0.45077
   5.00000   6.00000   7.00000   8.00000   0.03871
   9.00000  10.00000  11.00000  12.00000   0.23999
   0.00000   0.00000   0.00000   0.00000   0.08678
   1.00000   0.00000   0.00000   0.00000   0.50579

Perhatikan bahwa ukuran awal matriks N adalah $4 \times 4$. Dengan memperbesar matriks kita mengubah ukurannya menjadi $5 \times 5$. Harap diingat bahwa memperbesar matriks adalah operasi yang lambat, jadi jika Anda akan menyelesaikan suatu masalah menggunakan matriks sebaiknya tentukan ukuran akhir matriksnya terlebih dahulu.

Kita tidak hanya dapat mengacu pada baris maupun kolom tertentu pada suatu matriks. Kita dapat mengacu pada submatriks apapun dalam suatu matriks. Untuk mengatur jangkauan baris dan kolom digunakan format awal:akhir. Dalam hal ini terdapat keyword khusus yaitu end yang mengacu pada akhir dari baris/kolom.

Perhatikan berbagai contoh berikut:

>> N = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
N =
   1   2   3   4
   5   6   7   8
   9  10  11  12
  13  14  15  16
>> N(2:3,1:2)
ans =
   5   6
   9  10
>> N(2:end,2:end)
ans =
   6   7   8
  10  11  12
  14  15  16
>> N(1,end-1:end)
ans =
  3  4
>> N(2:3,2:3) = zeros(2)
N =
   1   2   3   4
   5   0   0   8
   9   0   0  12
  13  14  15  16
N(3:5,3:5) = eye(3)
N =
   1   2   3   4   0
   5   0   0   8   0
   9   0   1   0   0
  13  14   0   1   0
   0   0   0   0   1

Menyelidiki Ukuran Matriks

Dengan berbagai fungsi yang ada kita dapat mengetahui ukuran matriks. Di subbab ini kita akan membahas fungsi size, rows, dan columns.

Fungsi size akan mengembalikan matriks baris dengan 2 elemen. Elemen pertamanya menunjukkan jumlah baris argumen dan elemen keduanya menunjukkan jumlah kolom argumen. Fungsi rows dan columns masing-masing akan mengembalikan jumlah baris dan kolom argumen. Perhatikan contoh berkut:

>> size(rand(2,3))
ans =
  2  3
>> rows(rand(2,3))
ans = 2
>> columns(rand(2,3))
ans = 3

Kita akan banyak mengindeks matriks dan menyelidiki ukurannya saat melakukan pemrograman dengan Octave.

Materi Tambahan: Fungsi Multi-Output

Beberapa fungsi dapat mengeluarkan lebih dari satu output. Masing-masing output akan disimpan ke dalam sebuah variabel. Sebagai contoh, fungsi size dapat mengeluarkan dua output jika dipanggil dengan cara tertentu. Ini adalah caranya:

>> [baris kolom] = size(rand(2,3))
baris = 2
kolom = 3

Dengan pemanggilan seperti di atas, output pertama akan disimpan ke variabel baris, dan output kedua akan disimpan ke variabel kolom.

Penutup

Pada tutorial ini kita telah mengenal matriks. Bahan di tutorial ini akan menjadi syarat untuk memahami materi di tutorial berikutnya yaitu plotting. Silakan kirimkan kritik, perbaikan, dan saran ke edy.fkip@unej.ac.id .

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *