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 .