tutorial gnu octave

28
Tutorial GNU Octave - Bagian 1 Agro Rachmatullah (agro1986 [di] gmail.com) 11 Februari 2005 Pendahuluan GNU Octave (kadang disebut Octave saja) adalah alat untuk melakukan komputasi numerik dengan matriks dan vektor. Program tersebut juga dapat digunakan untuk perhitungan umum dan untuk menggambar grafik fungsi. Sintaks dan nama fungsi-fungsi di Octave sama dengan Matlab, jadi pengguna Matlab dapat dengan mudah beralih ke Octave. Octave merupakan free software sehingga anda memiliki kebebasan untuk melihat source code programnya dan mengembangkannya. Tutorial ini akan mengajarkan cara melakukan perhitungan sederhana dengan Octave. Bahan utama yang tercakup di dalamnya adalah operasi aritmatika, variabel, fungsi built-in, dan keterbatasan angka di Octave. Materi pada tutorial ini dibuat berdasarkan Octave versi 2.1.50. Menginstall dan menjalankan GNU Octave Jika anda menggunakan Linux, Octave mungkin sudah terinstall di sistem anda. Untuk mengeceknya, bukalah console dan jalankan perintah "octave" (tanpa tanda kutip). Jika di sistem anda belum terinstall Octave, dapatkan segera di http://sourceforge.net/project/showfiles.php? group_id=2888 . Octave tersedia untuk berbagai platform, misalnya Linux dan Windows. Untuk pengguna Windows, downloadlah file berekstensi exe dengan tanggal rilis terbaru. Untuk pengguna Linux yang perlu didownload adalah file berekstensi tar.gz yang terbaru.

Upload: wizn

Post on 29-Jun-2015

567 views

Category:

Documents


13 download

TRANSCRIPT

Page 1: Tutorial GNU Octave

Tutorial GNU Octave - Bagian 1Agro Rachmatullah (agro1986 [di] gmail.com)

11 Februari 2005

Pendahuluan

GNU Octave (kadang disebut Octave saja) adalah alat untuk melakukan komputasi numerik dengan matriks dan vektor. Program tersebut juga dapat digunakan untuk perhitungan umum dan untuk menggambar grafik fungsi. Sintaks dan nama fungsi-fungsi di Octave sama dengan Matlab, jadi pengguna Matlab dapat dengan mudah beralih ke Octave. Octave merupakan free software sehingga anda memiliki kebebasan untuk melihat source code programnya dan mengembangkannya.

Tutorial ini akan mengajarkan cara melakukan perhitungan sederhana dengan Octave. Bahan utama yang tercakup di dalamnya adalah operasi aritmatika, variabel, fungsi built-in, dan keterbatasan angka di Octave. Materi pada tutorial ini dibuat berdasarkan Octave versi 2.1.50.

Menginstall dan menjalankan GNU Octave

Jika anda menggunakan Linux, Octave mungkin sudah terinstall di sistem anda. Untuk mengeceknya, bukalah console dan jalankan perintah "octave" (tanpa tanda kutip).

Jika di sistem anda belum terinstall Octave, dapatkan segera di http://sourceforge.net/project/showfiles.php?group_id=2888. Octave tersedia untuk berbagai platform, misalnya Linux dan Windows. Untuk pengguna Windows, downloadlah file berekstensi exe dengan tanggal rilis terbaru. Untuk pengguna Linux yang perlu didownload adalah file berekstensi tar.gz yang terbaru.

Setelah anda menginstall dan menjalankannya, anda akan dihadapkan pada layar seperti berikut:

Sekarang kita bisa mulai melakukan perhitungan dengan Octave. Untuk lebih memahami materi di tutorial ini, anda dapat langsung mengetikkan contoh-contoh yang diberikan.

Operasi-operasi sederhana

Page 2: Tutorial GNU Octave

Operasi penjumlahan dilakukan dengan menggunakan simbol + dan pengurangan dengan simbol -. Ini contohnya:

>> 1 + 1 (ini adalah input)ans = 2 (ini adalah outputnya)

>> 1 - 1ans = 0

Perkalian dan pembagian masing-masing menggunakan simbol * dan /, seperti dalam contoh berikut:

>> 3 * 2ans = 6

>> 3 / 2ans = 1.5000

Dari contoh terakhir kita bisa melihat bahwa Octave menggunakan titik (.) sebagai tanda desimal.

Seperti biasanya, operasi perkalian dan pembagian memiliki prioritas yang lebih tinggi dari operasi penjumlahan dan pengurangan. Urutan pengerjaan dapat diubah menggunakan kurung buka dan kurung tutup. Lihat contoh berikut:

>> 1 + 2 * 3ans = 7

>> (1 + 2) * 3ans = 9

Pada contoh pertama, yang pertama kali dikerjakan adalah 2 * 3. Hasilnya (yaitu 6) dijumlahkan ke 1 sehingga hasil akhirnya adalah 7. Pada contoh berikutnya, yang pertama kali dikerjakan adalah 1 + 2 lalu hasilnya (yaitu 3) dikalikan dengan 3.

Operasi perpangkatan dilakukan dengan menggunakan simbol ^. Prioritasnya lebih tinggi dari perkalian, pembagian, penjumlahan, dan pengurangan. Berikut diberikan beberapa contohnya:

>> 2 ^ 3ans = 8

>> 2 ^ 3 * 2ans = 16

Dalam menuliskan input untuk Octave, jumlah spasi antar elemen input tidak berpengaruh pada hasilnya. Ketiga contoh berikut memberikan hasil yang sama walaupun penulisannya berbeda:

>> (1 + 2) * 3ans = 9

Page 3: Tutorial GNU Octave

>> (1+2)*3ans = 9

>> ( 1 +2) * 3ans = 9

Perhitungan-perhitungan tertentu dapat memakan waktu yang sangat lama. Contohnya adalah perkalian antar matriks yang ukurannya besar (tidak akan kita bahas di sini). Jika anda ingin menggagalkan proses perhitungan tersebut, yang perlu anda lakukan adalah menekan CTRL+C pada keyboard (menahan tombol CTRL lalu menekan tombol C). Hal ini juga dapat anda lakukan kalau Octave bermasalah (misalnya berhenti pada suatu perhitungan yang sederhana).

Notasi ilmiah

Kita dapat menuliskan bilangan dengan menggunakan notasi ilmiah, misalnya 1.1e5 (atau 1.1E5) dan -52e-3 (atau -52E-3). Contoh pertama berarti 1.1 x 105 dan contoh berikutnya berarti -52 x 10-3. Lihat contoh berikut:

>> 1.1e5ans = 110000

>> -52e-3ans = -0.052000

Output dari suatu perhitungan kadang-kadang dituliskan menggunakan notasi ilmiah:

>> 999 ^ 9ans = 9.9104e+26

>> 1.234 / 100000ans = 1.2340e-05

Variabel

Setiap kita melakukan perhitungan, hasilnya akan disimpan ke variabel yang bernama ans (terlihat jelas dari outputnya). Variabel ans tersebut bisa kita gunakan untuk perhitungan selanjutnya, seperti dalam contoh berikut:

>> 1 + 1ans = 2

>> ans * 3ans = 6

>> ans ^ 2ans = 36

Setelah perhitungan pertama, ans akan bernilai 2. Lalu ans dikalikan dengan 3 yang memberikan hasil 6. Hasil tersebut menjadi nilai baru dari ans. Setelah itu ans (yang sekarang bernilai 6) dikuadratkan. Hasilnya yaitu 36 menjadi nilai baru ans.

Page 4: Tutorial GNU Octave

Kita dapat dengan mudah membuat variabel-variabel baru. Nama variabel dapat terdiri dari alfabet (a-z,A-Z), angka (0-9), dan garis bawah (_). Nama variabel tidak boleh dimulai dengan angka. Di bawah dicontohkan nama-nama variabel yang sah:

xyjumlah_muridvar23_z

Berikutnya adalah dua contoh nama variabel yang tidak sah:

7_desember (dimulai dengan angka)diam! (terdiri dari karakter yang tidak diizinkan yaitu tanda seru)

Huruf besar dan huruf kecil dibedakan, jadi "radius", "Radius", dan "RADIUS" adalah nama tiga variabel yang beda.

Untuk memberikan nilai ke variabel digunakan simbol =. Prosesnya dinamakan assignment. Dalam assignment, nilai ans tidak akan berubah (kecuali kalau kita melakukan assignment terdahap ans itu sendiri). Lihat contohnya:

>> x = 2x = 2

>> y = x + 2y = 4

>> y ^ 2ans = 16

>> z = 0z = 0

>> Z - 1error: 'Z' undefined near line 18 column 5error: evaluating binary operator '-' near line 18, column 7

Kita bisa melihat bahwa setelah kita memberi nilai ke suatu variabel, variabel tersebut langsung bisa kita gunakan. Di dalam contoh, setelah kita memberikan nilai 2 ke x, kita berikutnya menggunakan variabel x untuk menentukan nilai variabel y

Contoh yang terakhir menghasilkan pesan error sebab kita mencoba menghitung Z - 1. Padahal variabel Z (huruf besar) belum pernah kita beri nilai sebelumnya. Error yang dicontohkan tidaklah fatal. Octave akan mengabaikan masukan yang bermasalah dan kita dapat melanjutkan pemakaian.

Ada beberapa variabel yang sudah didefinisikan oleh Octave. Beberapa di antaranya adalah pi dan e yang dipakai untuk perhitungan-perhitungan tertentu. Ada juga variabel yang berfungsi untuk mengatur perilaku Octave. Contohnya

Page 5: Tutorial GNU Octave

adalah output_precision yang menentukan jumlah bilangan penting (significant figures) yang ditampilkan Octave. Perhatikan contoh berikut:

>> output_precisionoutput_precision = 5

>> pipi = 3.1416

>> output_precision = 8output_precision = 8

>> pipi = 3.1415927

>> r = 2.1r = 2.1000000

>> luas = pi * r^2luas = 13.854424

Kita bisa melihat bahwa nilai awal output_precision adalah 5. Saat kita melihat nilai pi, yang ditampilkan hanyalah 5 bilangan penting. Berikutnya kita merubah output_precision menjadi 8. pi akhirnya ditampilkan dengan 8 bilangan penting. Lalu kita menghitung luas lingkaran yang jari-jarinya 2.1.

Fungsi built-in

Octave menyediakan banyak fungsi built-in. Salah satu contohnya adalah fungsi sqrt yang menghitung akar kuadrat sebuah bilangan. Inilah cara menggunakannya:

>> sqrt(2)ans = 1.4142

Untuk memanggil suatu fungsi, kita menuliskan nama fungsinya, diikuti dengan kurung buka, lalu menuliskan argumen-argumennya, dan diakhiri dengan kurung tutup. Fungsi sqrt hanya membutuhkan satu argumen (dalam contoh di atas argumennya adalah 2).

Berikut akan didaftar beberapa fungsi built-in dalam Octave. Semua fungsi tersebut memerlukan satu argumen.

Nama fungsi

Penjelasan Contoh

Manipulasi numerik

abs Menghitung nilai mutlak suatu bilangan.abs(-2) nilainya 2 dan abs(2) nilainya 2

roundMembulatkan suatu bilangan ke bilangan bulat terdekat.

round(2.5) nilainya 3 dan round(2.49) nilainya 2

floor Mengembalikan bilangan bulat terbesar yang lebih floor(2.9) nilainya 2 dan

Page 6: Tutorial GNU Octave

Nama fungsi

Penjelasan Contoh

kecil atau sama dengan bilangan input. floor(-0.1) nilainya -1

ceilMengembalikan bilangan bulat terkecil yang lebih besar atau sama dengan bilangan input.

ceil(2.9) nilainya 3 dan ceil(-0.1) nilainya 0

Trigonometri (argumen dalam radian)

sin Menghitung sinus suatu sudut. sin(pi/2) nilainya 1

cos Menghitung cosinus suatu sudut. cos(0) nilainya 1

tan Menghitung tangent suatu sudut. tan(0) nilainya 0

sec Menghitung secant suatu sudut. sec(0) nilainya 1

csc Menghitung cosecant suatu sudut. csc(pi/2) nilainya 1

cot Menghitung cotangent suatu sudut. cot(pi/4) nilainya 1

Logaritma dan exponensiasi

exp Menghitung perpangkatan natural suatu bilangan. exp(1) nilainya 2.7183

log Menghitung logaritma natural suatu bilangan. log(e) nilainya 1

log10 Menghitung logaritma basis 10 suatu bilangan. log10(100) nilainya 2

log2 Menghitung logaritma basis 2 suatu bilangan. log2(8) nilainya 3

Bagi yang memerlukannya, terdapat fungsi-fungsi trigonometri invers yaitu asin, acos, atan, asec, acsc, dan acot. Keluaran fungsi-fungsi tersebut adalah sudut dalam radian. Terdapat pula fungsi trigonometri hiperbolis yaitu sinh, cosh, tanh, sech, csch, dan tanh. Fungsi invers yang bersangkutan adalah asinh, acosh, atanh, asech, acsch, dan atanh.

Contoh fungsi yang memerlukan dua argumen adalah fungsi mod. mod(a, b) akan mengembalikan sisa pembagian jika a dibagi b. Sebagai contoh:

>> mod(6, 3)ans = 0

>> mod(7, 3)ans = 1

>> mod(9, 3)ans = 0

Keterbatasan Angka di Octave

Tipe data angka yang telah kita temui sejak awal tutorial (misalnya 1, 1.5, dan 1.1e5) di Octave disebut sebagai skalar. Jangkauan dan ketepatan skalar di Octave terbatas, seperti ditunjukkan pada contoh berikut:

>> 999 ^ 999ans = Inf

>> -999 ^ 999ans = -Inf

Page 7: Tutorial GNU Octave

>> 1e-999ans = 0

>> -1e-999ans = -0

Jika bilangan yang kita masukkan (atau hasil perhitungan) terlalu besar nilai mutlaknya, maka hasilnya adalah Inf (singakatan dari infinity, yang artinya tak hingga) atau -Inf. Di lain pihak, jika perhitungan menghasilkan bilangan yang terlalu kecil nilai mutlaknya (mendekati 0), maka nilainya akan menjadi 0 atau -0.

Lalu apa bedanya 0 dengan -0? Jika sebuah bilangan positif dibagi dengan 0 maka hasilnya adalah Inf sedangkan jika pembaginya adalah -0 maka hasilnya adalah -Inf. Sebaliknya jika sebuah bilangan negatif dibagi dengan 0 hasilnya adalah -Inf dan jika pembaginya adalah -0 maka hasilnya adalah Inf. Perhatikan contoh berikut:

>> 1 / 0ans = Inf

>> 1 / -0ans = -Inf

Beberapa operasi hasilnya adalah NaN (Not a Number), misalnya 0 / 0. Segala operasi yang melibatkan NaN misalnya NaN / 2, sin(NaN), dan NaN - NaN hasilnya adalah NaN.

Operasi yang melibatkan Inf memiliki aturan tersendiri yang tidak akan dibahas di sini. Silahkan anda mencoba-coba jika tertarik (misalnya Inf - 2, Inf - Inf, dan -2 * Inf).

Bilangan positif terkecil dan terbesar yang dapat ditangani Octave disimpan di variabel realmin dan realmax. Di sistem saya nilainya adalah sebagai berikut:

>> realminans = 2.2251e-308

>> realmaxans = 1.7977e+308

Perlu diingat bahwa di dalam sistem bilangan riil tidak dikenal bilangan infinity dan NaN. Nilai-nilai tersebut ada di Octave untuk menandakan bahwa operasi-operasi tertentu (misalnya pembagian dengan 0) telah terjadi.

Penyelesaian masalah 1: menyelesaikan persamaan kuadrat

Dengan pengetahuan yang kita punya sekarang, kita sudah dapat menyelesaikan berbagai masalah matematis dengan Octave. Sebagai contoh, misalkan kita ingin mencari penyelesaian dari 2x2-5x-3=0. Kita akan menggunakan rumus abc, jadi

Page 8: Tutorial GNU Octave

kita akan memberikan nilai pada variabel a, b, dan c untuk mempermudah perhitungan selanjutnya.

>> a = 2a = 2

>> b = -5b = -5

>> c = -3c = -3

Berikutnya kita akan memberikan nilai ke diskriminannya d, yaitu b2-4ac.

>> d = b^2 - 4*a*cd = 49

Karena d positif, pasti kita akan mendapat dua penyelesaian riil (sebetulnya Octave juga dapat menangani bilangan kompleks, namun hal tersebut tidak akan dibahas di sini). Kita akan mencari penyelesaiannya satu-persatu:

>> x1 = (-b + sqrt(d)) / (2*a)x1 = 3

>> x2 = (-b - sqrt(d)) / (2*a)x2 = -0.50000

Jadi himpunan penyelesaiannya adalah {3, -1/2}.

Materi tambahan: titik koma, help, dan keluar

Kita dapat mencegah Octave menampilkan hasil perhitungan dengan menggunakan titik koma (;). Perhatikan contoh berikut:

>> a = 1a = 1

>> b = 2b = 2

>> c = 3;

>> d = 4;

>> a + b + c + dans = 10

Saat kita melakukan assignment terhadap c dan d, outputnya tidak ditampilkan karena kita mengakhiri assignment tersebut dengan titik koma.

Jika kita ingin mendapatkan informasi tentang suatu variabel atau fungsi pada Octave, kita tinggal menggunakan perintah help. Ini contohnya:

Page 9: Tutorial GNU Octave

>> help pipi is a built-in constant

-- Built-in Variable: pi The ratio of the circumference of a circle to its diameter. Internally, `pi' is computed as `4.0 * atan (1.0)'.

Additional help for built-in functions, operators, and variablesis available in the on-line version of the manual. Use the command`help -i ' to search the manual index.

Help and information about Octave is also available on the WWWat http://www.octave.org and via the [email protected] list.

>> help loglog is a built-in mapper function

-- Mapping Function: log (X) Compute the natural logarithm for each element of X. To compute the matrix logarithm, see *Note Linear Algebra::. See also: log2, log10, logspace, and exp.

Additional help for built-in functions, operators, and variablesis available in the on-line version of the manual. Use the command`help -i ' to search the manual index.

Help and information about Octave is also available on the WWWat http://www.octave.org and via the [email protected] list.

Untuk keluar dari Octave, tuliskan "exit" atau "quit" (tanpa tanda kutip).

Page 10: Tutorial GNU Octave

Tutorial GNU Octave - Bagian 2Agro 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 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:

Page 11: Tutorial GNU Octave

>> 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 = 1A = 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

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

Page 12: Tutorial GNU Octave

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

Page 13: Tutorial GNU Octave

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

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

>> A * 2ans = 2 4 6 8 10 12 >> A / 2ans = 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 + Aans = 2 4 6 8 10 12 >> A - Aans = 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 * Bans = 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 =

Page 14: Tutorial GNU Octave

1 2 1 3 >> C^4ans = 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]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

Page 15: Tutorial GNU Octave

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

>> harga_semua = semua * hargaharga_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 >> 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

Page 16: Tutorial GNU Octave

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

>> inv(C) * Dans = 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 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 \ Bx =

500 750

Berarti harga sebuah buku 500 rupiah dan harga sebuah pulpen 750 rupiah.

Operasi antar elemen

Page 17: Tutorial GNU Octave

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 .* Fans = 4 6 >> E ./ Fans = 1.0000 1.5000

>> E .^ Fans = 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

Page 18: Tutorial GNU Octave

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

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 =

Page 19: Tutorial GNU Octave

3 4 5 6

>> M(1,2)ans = 4

>> M(2,1) = 0M = 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) = 1N = 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

Page 20: Tutorial GNU Octave

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

Page 21: Tutorial GNU Octave

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 = 2kolom = 3

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