Anda di halaman 1dari 14

Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.

htm

Tutorial GNU Octave - Bagian 2


Agro Rachmatullah (agro1986 [di] gmail.com)

2 Maret 2005

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 kenal dengan 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]


artinya sama dengan [2,3,5,7].

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

1 of 14 03/31/2011 09:48 PM
Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.htm

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:

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

>> eye(2)
ans =
1 0
0 1
>> 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 diassign sebuah matriks, tipe variabel A berubah dari skalar menjadi
matriks.

Jika kita mencoba membuat matriks yang ukurannya 1 x 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

2 of 14 03/31/2011 09:48 PM
Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.htm

>> 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:

>> p = [1 2 3]
p =
1 2 3

>> q = [4 5 6; 7 8 9]
q =
4 5 6
7 8 9

>> [p; q]
ans =
1 2 3
4 5 6
7 8 9

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

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

>> s = [4; 5; 6]
s =
4
5
6

>> t = [7; 8; 9]
t =
7
8
9

>> [r s t]
ans =
1 4 7
2 5 8
3 6 9

>> [r s t; 0 0 0]

3 of 14 03/31/2011 09:48 PM
Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.htm

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]):

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

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

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

>> 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:

4 of 14 03/31/2011 09:48 PM
Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.htm

>> 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 1000 rupiah, 750
rupiah, dan 3000 rupiah. 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]

5 of 14 03/31/2011 09:48 PM
Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.htm

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
17500 rupiah, 4750 rupiah, 8000 rupiah, dan 3250 rupiah.

Operasi matriks lanjutan

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

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

Matriks baris yang kita transpos akan menjadi matriks kolom.

Untuk mencari determinan dan invers matriks persegi digunakan masing-


masing fungsi det dan inv. Lihat contohnya:

>> det(C)
ans = 1

6 of 14 03/31/2011 09:48 PM
Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.htm

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

>> 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 2750 rupiah. Toni
membeli 2 buku tulis dan 2 puplen dengan ongkos total 2500 rupiah. Berapakah
masing-masing harga sebuah buku dan pulpen?

Misalkan harga buku kita lambangkan a dan harga pulpen b. Berarti a + 3b =


2750 dan 2a + 2b = 2500. Ini adalah sistem persamaan linier dalam dua
peubah. Kita akan simpan koefisiennya pada matriks A dan konstanta di sebelah

7 of 14 03/31/2011 09:48 PM
Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.htm

kanan persamaan pada matriks B:

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

>> B = [2750; 2500]


B =
2750
2500

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 500 rupiah dan harga sebuah pulpen 750 rupiah.

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:

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

>> F = [2 2]
F =
2 2

>> E .* F
ans =
4 6

>> E ./ F
ans =
1.0000 1.5000

>> E .^ F

8 of 14 03/31/2011 09:48 PM
Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.htm

ans =
4 9

Perhatikan bahwa dengan operator .*, elemen di baris 1 kolom 1 pada E


(nilainya 2) dikalikan dengan elemen di lokasi yang sama pada F (nilainya 2)
untuk menghasilkan elemen di lokasi yang sama pada matriks hasil (nilainya 4).
Hal yang sama dilakukan untuk elemen-elemen lainnya.

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 buah skalar. Sebagai contoh, 2 .* 5 akan menghasilkan 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

>> sin(L)
ans =
-1 1

>> 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) = (x2 + sin(x)) / √(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

9 of 14 03/31/2011 09:48 PM
Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.htm

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

>> M(1,2)
ans = 4

>> 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

10 of 14 03/31/2011 09:48 PM
Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.htm

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 4x4. Dengan memperbesar


matriks kita mengubah ukurannya menjadi 5x5. 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

11 of 14 03/31/2011 09:48 PM
Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.htm

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))

12 of 14 03/31/2011 09:48 PM
Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.htm

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. Silahkan
kirimkan kritik, perbaikan, dan saran ke agro1986 [di] gmail.com.

Bacaan lebih lanjut:

Tutorial GNU Octave - Bagian 3 (Plotting) oleh Agro Rachmatullah

Semua isi website ini (termasuk teks, gambar, program, suara, dan hasil
karya original lainnya) berada di bawah Creative Commons License, kecuali
dinyatakan tidak. [All contents on this website (including text, images,
programs, sounds, and any other original works), unless otherwise noted, is
licensed under a Creative Commons License.]

Dengan lisensi tersebut anda bebas menggandakan/menggunakan sebagian


atau keseluruhan dari tutorial ini maupun membuat karya-karya turunan,

13 of 14 03/31/2011 09:48 PM
Tutorial GNU Octave - Bagian 2 http://agro.web.ugm.ac.id/octave-tutorial-2.htm

dengan syarat:

Nama penulis aslinya selalu disertakan.


Digunakan untuk keperluan nonkomersial.
Karya-karya turunan atau karya lain yang memuat tutorial ini harus
diberi lisensi yang sama.

Untuk lebih lengkapnya, silahkan baca di sini.

14 of 14 03/31/2011 09:48 PM

Anda mungkin juga menyukai