Anda di halaman 1dari 204

Bab 1

Pengantar untuk
Pemrograman MATLAB

1.1 Pendahuluan
MATLAB (Matrix Laboratory) adalah sebuah program
untuk analisis dan komputasi numerik dan merupakan suatu
bahasa pemrograman matematika lanjutan yang dibentuk
dengan dasar pemikiran menggunkan sifat dan bentuk
matriks. Pada awalnya, program ini merupakan interface
untuk koleksi rutin-rutin numerik dari proyek LINPACK dan
EISPACK, dan dikembangkan menggunkan bahasa FORTRAN
namun sekarang merupakan produk komersial dari
perusahaan Mathworks, Inc.yang dalam perkembangan
selanjutnya dikembangkan menggunakan bahasa C++ dan
assembler (utamanya untuk fungsi-fungsi dasar MATLAB).
MATLAB telah berkembang menjadi sebuah
environment pemrograman yang canggih yang berisi fungsifungsi built-in untuk melakukan tugas pengolahan sinyal,
aljabar linier, dan kalkulasi matematis lainnya. MATLAB juga
berisi toolbox yang berisi fungsi-fungsi tambahan untuk
aplikasi khusus . MATLAB bersifat extensible, dalam arti
bahwa seorang pengguna dapat menulis fungsi baru untuk
ditambahkan pada library ketika fungsi-fungsi built-in yang
tersedia tidak dapat melakukan tugas tertentu. Kemampuan
pemrograman yang dibutuhkan tidak terlalu sulit bila Anda
telah memiliki pengalaman dalam pemrograman bahasa lain
seperti C, PASCAL, atau FORTRAN.
MATLAB
dikembangkan

merupakan
oleh

merk

software
yang
Mathworks.Inc.(lihat

Judul Buku

http://www.mathworks.com) merupakan software yang paling


efisien untuk perhitungan numeric berbasis matriks. Dengan
demikian
jika
di
dalam
perhitungan
kita
dapat
menformulasikan masalah ke dalam format matriks maka
MATLAB merupakan software terbaik untuk penyelesaian
numericnya.
MATLAB (MATrix LABoratory) yang merupakan bahasa
pemrograman tingkat tinggi berbasis pada matriks sering
digunakan untuk teknik komputasi numerik, yang digunakan
untuk menyelesaikan masalah-masalah yang melibatkan
operasi matematika elemen, matrik, optimasi, aproksimasi
dll. Sehingga Matlab banyak digunakan pada :
Matematika dan Komputansi
Pengembangan dan Algoritma

Pemrograman
modeling,
pembuatan prototipe

simulasi,

dan

Analisa Data , eksplorasi dan visualisasi

Analisis numerik dan statistik


Pengembangan aplikasi teknik

1.2 Window-window pada MATLAB


Ada beberapa macam window yang tersedia
dalam MATLAB, yang dapat dijelaskan sebagai berikut:
a. MATLAB Command window/editor

MATLAB Command window/editor merupakan window


yang dibuka pertama kali setiap kali MATLAB dijalankan

Pemrograman Linier dengan MATLAB

pada window di atas dapat dilakukan akses-akses ke


command-command MATLAB dengan cara mengetikkan
barisan-barisan ekpresi MATLAB, seperti mengakses help
window dan lain-lainnya.
Jika perintah-perintah yang sudah diketikkan dan hasil
yang ditampilkan pada layar command window akan
disimpan maka dapat dilakukan dengan menggunkan
command diary. Sebagai contoh jika ingin disimpan output
m =
1

direktori c:\backup dengan nama file mydata.txt, maka


dapat dilakukan dengan mengetikan :
m=[1 2 3;5 2 1]
m =
1

diary 'c:\backup\mydata.txt'

dan jika ingin menutup file ini maka ketikkan


diary off

Command windows juga digunakan untuk memanggil tool


Matlab seperti editor, debugger atau fungsi. Ciri dari window ini

Judul Buku

adalah adanya prompt (>>) yang menyatakan matlab


siap menerima perintah. Perintah dapat berupa fungsifungsi pengaturan file (seperti perintah DOS/UNIX)
maupun fungsi-fungsi bawaan/toolbox MATLAB sendiri.
Berikut ini beberapa fungsi pengaturan file dalam MATLAB
:
dir / ls
: Digunakan untuk melihat isi dari
sebuah direktori
aktif.
cd

: Digunakan untuk melakukan perpindahan

dari
direktori aktif.
pwd
sedang

: Digunakan untuk melihat direktori yang


aktif

mkdir : Digunakan untuk membuat sebuah direktori


what : Digunakan untuk melihat nama file m dalam
direktori aktif
who
sedang

: Digunakan untuk melihat variabel yang


aktif

whos : Digunakan untuk menampilkan nama setiap


variabel
delete : Digunakan untuk menghapus file
clear

: Digunakan untuk menghapus variabel

clc

: Digunakan untuk membersihkan layar

doc

: Digunakan untuk melihat dokumentasi The


MathWorks, Inc. dalam format html

secara

Pemrograman Linier dengan MATLAB

online.
demo :
tampilan

Digunakan

untuk

mencoba

beberapa

demo yang disediakan oleh Matlab


b. MATLAB
Editor/Debugger
Kesalahan)

(Editor

M-File/Pencarian

Window ini merupakan tool yang disediakan oleh


Matlab 5 keatas. Berfungsi sebagai editor script Matlab
(M-file).
Walaupun
sebenarnya
script
ini
untuk
pemrograman Matlab dapat saja menggunakan editor
yang lain seperi notepad, wordpad bahkan word. Untuk
mengakses window m-file ini dapat dilakukan dengan cara
:
1. Memilih File kemudian pilih New
2. Pilih m-file, maka MATLAB akan menampilkan
editor window :

selain dengan cara di atas untuk menampilkan


editor M-File ini dapat juga dilakukan dengan :
>> edit
Bahasan tentang m-file akan dibahas pada bab
selanjutnya.
c. Figure Windows

Judul Buku

Window ini adalah hasil visualisasi dari script


Matlab. Namun Matlab memberi kemudahan bagi
programer untuk mengedit window ini sekaligus
memberikan program khusus untuk itu. Sehingga window
ini selain berfungsi sebagai visualisasi output dapat juga
sekaligus menjadi media input yang interaktif.

Contoh

>> x=0:2:360;
>> y=sin(x*pi/180);
>> plot(x,y)

hasil yang diperoleh adalah :

d. MATLAB help window


MATLAB menyediakan sistem help yang dapat diakses
dengan perintah help. Misalnya, untuk memperoleh informasi
mengenai fungsi elfun yaitu fungsi untuk trigonometri,
eksponensial, complex dan lain-lain, maka hanya perlu
mengetikkan perintah berikut :
help elfun

dan kemudian menekan enter maka di layar akan muncul


informasi dalam bentuk teks pada layar MATLAB yaitu :

Pemrograman Linier dengan MATLAB

Elementary math functions.


Trigonometric.
sin

- Sine.

sinh

- Hyperbolic sine.

asin

- Inverse sine.

asinh

- Inverse hyperbolic sine.

cos

- Cosine.

cosh

- Hyperbolic cosine.

acos

- Inverse cosine.

acosh

- Inverse hyperbolic cosine.

tan

- Tangent.

tanh

- Hyperbolic tangent.

atan

- Inverse tangent.

atan2

- Four quadrant inverse tangent.

atanh

- Inverse hyperbolic tangent.

sec

- Secant.

sech

- Hyperbolic secant.

asec

- Inverse secant.

asech

- Inverse hyperbolic secant.

csc

- Cosecant.

csch

- Hyperbolic cosecant.

acsc

- Inverse cosecant.

acsch

- Inverse hyperbolic cosecant.

cot

- Cotangent.

coth

- Hyperbolic cotangent.

acot

- Inverse cotangent.

acoth

- Inverse hyperbolic cotangent.

Exponential.

Judul Buku

exp

- Exponential.

log

- Natural logarithm.

log10

- Common (base 10) logarithm.

log2

- Base 2 logarithm and dissect floating


point number.

pow2

- Base 2 power and scale floating point


number.

sqrt

- Square root.

nextpow2

- Next higher power of 2.

Complex.
abs

- Absolute value.

angle

- Phase angle.

complex

- Construct complex data from real and


imaginary parts.

conj

- Complex conjugate.

imag

- Complex imaginary part.

real

- Complex real part.

unwrap

- Unwrap phase angle.

isreal

- True for real array.

cplxpair

- Sort numbers into complex conjugate


pairs.

Rounding and remainder.


fix

- Round towards zero.

floor

- Round towards minus infinity.

ceil

- Round towards plus infinity.

round

- Round towards nearest integer.

Pemrograman Linier dengan MATLAB

mod

- Modulus (signed remainder after


division).

rem

- Remainder after division.

sign

- Signum.

Selain help untuk informasi di atas dapat juga dilihat


informasi lainnya misalnya perintah yang sangat berguna
untuk mempelajari pemrograman MATLAB adalah intro, yang
membahas konsep-konsep dasar tentang bahasa MATLAB.
Selain itu, juga terdapat banyak program demonstrasi yang
mengilustrasikan berbagai kapabilitas MATLAB, yang dapat
dimulai dengan perintah demo. Atau untuk lebih lengkapnya
dapat dilihat di tampilan MATLAB dengan cara memilih menu
Window kemudian pilih help window, dan untuk mengetahui
informasi yang ada maka
dapat dilakukan dengan
mengclickan dua kali info yang ada di MATLAB Help Window
atau dengan mengetikkan informasi yang ingin didapatkan
pada sudut sebelah kiri MATLAB Help Window. Sebagai
contoh tampilan Help window tersebut adalah sebagai berikut
:

10

Judul Buku

Sebelum melihat lebih jauh tentang kemampuan


MATLAB untuk programming ataupun penyelesaian masalahmasalah numerik maka dapat dilakukan beberapa percobaan
sederhana seperti berikut ini :
Ketikkan :
x=12
x=6
x*y
ans =
72

dan perhatikan perbedaannya dengan :


p=12;
q=6;
r=p*q;

dapat dilihat bahwa tanpa ; MATLAB akan mengassign hasil


output ke variabel ans (answer).
Untuk contoh penggunaan fasilitas grafik dari MATLAB,
maka dapat dilihat berikut ini dengan mengetikkan :
x=[5 10 15 20 25];
y=cos(x);
plot(x,y);

dapat dijelaskan bahwa x diassign ke suatu array [5 10 15 20


25], kemudian y =cos(x) akan mengassign y ke array [cos(5)
cos(10) cos(15) cos(20) cos(25)]. Dan hasilnya dapat dilihat
pada gambar berikut ini :

Pemrograman Linier dengan MATLAB

11

untuk contoh sederhana lainnya dapat dicoba beberapa


perintah berikut ini :
1. >> a = [ 1 2; 3 4 ]
>> a * a
>> b = [ 1 2; 0 1 ]
>> a*b
>> b*a
>> a + b
>> s = a + b
>> inv(s)
>> s * inv(s)
>>

s/s

>>

s\s

>>

inv(s) * s

>> a/b
>> a\b
>> c = [ 1 1; 1 1 ]
>> inv(c);

12

Judul Buku

2. Untuk membuat grafik y = sin(t) pada interval t = 0 to t =


10

>> t = 0:.3:10;
>> y = sin(t);
>> plot(t,y)

3. Untuk menggambarkan grafik :z(x,y) = x exp( - x^2 y^2):


>> [x,y] = meshdom(-2:.2:2, -2:.2:2);
>>

z = x .* exp(-x.^2 - y.^2);

>>

mesh(z)

Keterangan:
Untuk setiap perintah di atas sebelum ke perintah
selanjutnya maka tekan enter agar dapat ditampilkan
outputnya.

1.3 Bilangan dan Operator


Matematika di Matlab
Ada tiga tipe bilangan di dalam Matlab yaitu :

Bilangan bulat ( integer )

Bilangan real

Bilangan kompleks

Contoh bilangan bulat


x=10
x =
10

Pemrograman Linier dengan MATLAB

13

Contoh bilangan real


x=10.01
x =
10.0100

Untuk bilangan kompleks yang bentuk umumnya adalah z=


a+bi , salah satu kehebatan MATLAB adalah tidak
memerlukan penanganan khusus untuk bilangan kompleks
dan untuk bilangan ini diberi tanda i atau j, contohnya :
y=sqrt(-2) % akar negatif 2
y =
0 + 1.4142i
real(y)
ans =
0
imag(y)
ans =
1.4142
abs(y)
ans =
1.4142
angle(y)
ans =
1.5708

Daftar operasi aritmatika dasar dalam Matlab


MATLAB dapat melakukan operasi-operasi aritmatika
dasar berikut :
Operasi
Simbol
Penambahan, a + +
b
Pengurangan a-b
-

14

Judul Buku

Perkalian a x b
Pembagian a : b
Pemangkatan ab

*
/ atau \
^

Urutan operasi tersebut yang dikerjakan dalam suatu


ekspresi yang mengikuti aturan prioritas yang biasa (hirarki).
Aturan tersebut dapat diringkas sebagai berikut :

Ekspresi dikejakan dari kiri ke kanan dengan


pemangkatan mempunyai prioritas tertinggi,
diikuti dengan perkalian atau pembagian yang
mempunyai prioritas yang sama, diikuti dengan
penambahan dan pengurangan yang juga
memiliki prioritas yang sama. Tanda kurung
dapat digunakan untuk merubah urutan
pengerjaan yang biasa dimana bagian yang
dikerjakan terlebih dahulu adalah bagian yang
yang ada di bagian kurung paling dalam
kemudian keluar.
Contoh :
Misalnya anda mengambil kuliah sebanyak 12 SKS , yang
terdiri dari seismologi 4 sks , Analisis sinyal 3 sks , Tomografi
2 sks dan Gravitasi 3 sks . Lalu pada akhir semester anda
mendapat nilai sebagai berikut seismologi A , Analisis sinyal B
, Tomografi C dan gravitasi A . Dengan point nilai A=4 , B=3 ,
C=2 Berapa nilai IP anda ?
Untuk memyelesaikan ini kita menggunakan pendekatan
seperti perhitungan di kalkulator :
ip=(4*4+3*3+2*2+3*4)/(4+3+2+3)
ip =
3.4167

Sebagai alternatif kita bisa menyelesaikan masalah di atas


dengan terlebih dahulu menyimpan informasi yang kita
punya pada variabel.

Pemrograman Linier dengan MATLAB

15

seismologi=4
tomografi=2
analisis_sinyal=3
gravitasi=4
seismologi =
4
tomografi =
2
analisis_sinyal =
3
gravitasi =
4
total_sks=12
total_sks =
12
ip=(seismologi*4+tomografi*2+analisis_sinyal*3+gravitasi*
3)/total_sks
ip =
3.4167

1.4 Komentar dan Tanda Baca


Semua teks sesudah tanda % dianggap sebagai statemen
komentar , contoh:
semester=8 % jumlah semester S 1
semester =
8

Variabel semester diisi dengan nilai 8 dan statemen sesudah


tanda % di anggap sebuah komentar . Statemen ini berguna
untuk mendokumentasikan apa yang sudah anda kerjakan.

16

Judul Buku

Tanda titik koma ( ; ) dalam Matlab berguna untuk


mencegah menampilkan hasil, contoh :
semester=8;

1.5 Fungsi-Fungsi Matematika


Dasar
MATLAB mempunyai berbagai fungsi matematika
umum yang biasa di gunakan dalam matematik . Sebagian
besar fungsi tersebut hampir sama dengan bila anda
menuliskannya secara matematis. Sebagai contoh :
pi
ans =
3.1416
y=sin(pi/6)
y =
0.5000
y=asin(0.5)
y =
0.5236

Contoh Penyelesaian Masalah


Contoh 1: Persamaan fungsi
M=4x2+3y+10

N=e(2*x)+x
O=sqrt((1/(x+y))+(1/(t+z)))
P=4*(e(-x/2))*sin(pi*x)
Tentukan nilai fungsi tersebut dengan nilai-nilai t=25, x=43,
y=15.25, z=8.2 !

Pemrograman Linier dengan MATLAB

17

Untuk penyelesaian di atas adalah sbb:


Pertama, dibuat dulu variabel nya
t=25;x=43;y=15.25;z=8.2;

Kedua, masukkan nilai tersebut ke masing-masing fungsinya


M=4*x^2+3*y+10
M =
7.4518e+003
N=exp(2*x)+x
N =
2.2352e+037
O=sqrt((1/(x+y))+(1/(t+z)))
O =
0.2175
P=4*(exp(-x/2))*sin(pi*x)
P =
1.6223e-023

Contoh 2 : Penentuan volume silinder berlubang


Sebuah silinder mempunyai diameter luar 6.3125 dan
diameter dalam 5.762 , tentukan volumenya bila diketahui
rumus untuk mencari volumenya :
V =

4
RE 3 RI 3
3

Dimana RE adalah diameter luar dan RI adalah diameter


dalam
Penyelesaian :
re=6.3125;ri=5.762;
v=4/3*pi*(re^3-ri^3);
disp(['Volume = ',num2str(v)])
Volume = 252.3169

18

Judul Buku

I.7. Menyimpan dan Memanggil


Data
Untuk Menyimpan dan memenggil data dari file pilih
File Save Workspace As . Untuk memanggil data
digunakan pilihan Load WorkSpace As atau Open pada
menu file. Sedangkan untuk mengimport data , untuk
Matlab versi 6 keatas pilih file Import Data .. . Matlab
juga menyediakan dua perintah ---- save dan load ------yang jauh lebih fleksibel. Perintah save untuk menyimpan
satu atau lebih variabel dalam file format Yang sesuai
dengan pilihan anda.
contoh :
clear all
x=1:10;y=10:10:10:100; % membuat array baru
save
Saving to: Matlab.mat

menyimpan semua variabel Matlab dalam format biner di


file Matlab.mat
save data

menyimpan semua variabel Matlab dalam format biner di


file data.mat
save data_x x

menyimpan variabel x dalam format biner di file data_x.mat


save data_xy x y /ascii

menyimpan variabel x dan y dalam format biner di file data_xy


dalam format ascii untuk membuka data digunakan perintah load,
contoh;
load data_x.mat

Pemrograman Linier dengan MATLAB

19

1.8. Operator Logika dan Relasional


MATLAB menyediakan operasi logika dan relasional,
hal ini diperlukan untuk menjawab pertanyaan benar atau
salah dan salah satu manfaat yang penting dari
kemampuan ini adalah untuk mengontrol urutan eksekusi
sederetan perintah MATLAB (biasanya dalam M-File)
berdasarkan pada hasil pertanyaan benar/salah.
Sebagai masukan pada semua ekpresi relasi dan
logika , MATLAB menganggap semua angka tidak nol
sebagai benar, nol sebagi salah. Hasil dari semua ekspresi
logika relasi dan logika adalah satu untuk benar dan nol
untuk salah dengan tipe array logika yaitu hasilnya
memuat bilangan 1 dan 0 yang tidak saja dapat
digunakan untuk statemen matematika akan tetapi dapat
juga untuk pengalamatan
Operator relasi MATLAB terdiri dari semua pembandingan :
Operator
Relasi
<
>
<=

Deskripsi

Kurang dari
Lebih dari
Kurang dari atau sama
dengan
>=
Lebih
dari
atau
sama
dengan
=
Sama dengan
~=
Tidak sama dengan
Operator
relasi
MATLAB
dapat
digunakan
untuk
membandingkan dua array berukuran sama atau untuk
membandingkan array dengan skalar.
Operator logika menyediakan cara untuk menggabung atau
menegasikan ekspresi relasi.

20

Judul Buku

Selanjutnya Operator-operator logika dalam MATLAB


yaitu :
Operator
Logika
&
|
~

Deskrips
i
AND
OR
NOT

1.9. Demos
Untuk mengetahui atau belajar lebih banyak
mengenai MATLAB, MATLAB menyediakan fasilitas yang
dapat dijalankan dengan menggunakan command demo
yang diketikkan pada Command Window atau dengan
mengklik pada menu Help dan pilih Examples dan
Demos dari menu pull-down yang disediakan. Beberapa
demos MATLAB menggunakan Command Window dan
Figure Window sekaligus.
Sebagai contoh untuk belajar lebih jauh mengenai
matriks dalam MATLAB, dapat membuka demo window
dengan menggunakan satu metode yang dijelaskan di
atas tadi. Pada jendela kiri pilih Matrices dan pada
jendela kanan pilih Basic matrix operations kemudian
klik pada Run Basic matrix. Tampilan yang dihasilkan
adalah sebagai berikut :

Pemrograman Linier dengan MATLAB

21

setelah muncul window Slideshowplayer klik tombol


Start >> dan tampilan yang muncul adalah

22

Judul Buku

Jika ingin mengetahui tampilan lanjutannya


dilakukan dengan menekan tombol next>>

dapat

1.9. Sumber-sumber MATLAB yang


ada di Internet
Jika anda ingin lebih mendalami lagi tentang
MATLAB dan mendownloadnya maka di bawah ini
beberapa informasi yang berkenaan dengan MATLAB, dan
informasinya bisa didapatkan dibeberapa situs berikut ini :
1. Web site MathWorks : http://www.mathworks.com/
disitus ini bisa di dapatkan informasi tentang produk
baru MATLAB seperti buku dan lain-lainnya.
2. Newsgroup MATLAB:
news://saluki news.siu.edu/comp.soft-sys.matlab/
3. http://dir.yahoo.com/science/mathematics/software/ma
tlab/ penggunaan source informasi tentang MATLAB

Pemrograman Linier dengan MATLAB

23

dan merupakan langkah awal untuk memperoleh web


site MATLAB lainnya.
4. http://www.cse.uiuc.edu/cse301/matlab.html, web site
ini merupakan websitenya University of Illinois di
Champaign-Urbana, yang menyediakan beberapa link
untuk MATLAB di internet
5. Mastering
Matlab
http://www.eece.maine.edu/mm

Web

site:

24

Judul Buku

Bab 2
2 TIPE DATA
Software MATLAB mengenal 3 tipe data yaitu : string,
scalar, dan matriks. Array merupakan matriks yang hanya
memiliki satu baris. MATLAB juga memiliki banyak fungsi
built-in untuk bejkerja memanipulasi tipe data tersebut.
Berikut ini beberapa contoh yang menjelaskan ketiga tipe
data tersebut di atas.

2.1 String
String dalam MATLAB adalah type data yang terdiri
atas huruf-huruf dan atau nilai-nilai ASCII yang
ditampilkan representasinya. String adalah teks yang
diawali dan diakhiri dengan apostrof .
Contoh :
p='hallo apa kabar'
p =
hallo apa kabar
size(p)
ans =
1

15

whos
Name

Size

Bytes

Class

ans

1x2

16

double array

1x15

30

char array

Pemrograman Linier dengan MATLAB

25

Grand total is 17 elements using 46 bytes

Setiap karakter dalam suatu string adalah satu elemen dalam


array, dengan setiap elemennya sebesar 2 byte.
Untuk melihat representasi ASCII karakter string dapat
dilakukan dengan melakukan operasi aritmetik terhadap
string atau mengkonversikannya menggunakan fungsi
double.
Contoh :
double(p)
ans =
Columns 1 through 12

104 97 108 108 111

32

97 112 97 32 107 97

Columns 13 through 15
98

97

114

abs(p)
ans =
Columns 1 through 12
104

97

108

108

111

32

97

112

97

32

107

97

Columns 13 through 15
98

97

114

Fungsi char menyediakan tranformasi balikan :


char(p)
ans =
hallo apa kabar

karena string merupakan array numeric dengan atribut


khusus, string dapat dimanipulasi dengan menggunakan
semua metode manipulasi array yang tersedia dalam
MATLAB.
Contoh :
t=p(11:15)

26

Judul Buku

t =
kabar

string juga dialamati seperti array. Dari contoh di atas elemen


ke 11 sampai ke 15 memuat kata kabar.
Jika kata tersebut dibalik maka perintahnya dapat diketikkan
sebagai berikut :
t=p(15:-1:11)
t =
rabak

dan jika penggunaan operator transpose maka kata kabar


akan dibaca dalam format kolom yaitu :
t=p(11:15)'
t =
k
a
b
a
r

Penggabungan
string
penggabungan array:

mengikuti

Contoh
a='jika anda belajar rajin,'
a =
jika anda belajar rajin,
b='maka anda akan dapat nilai yang bagus'
b =
maka anda akan dapat nilai yang bagus
c=[a b]
c =

aturan

Pemrograman Linier dengan MATLAB

27

jika anda belajar rajin,maka anda akan dapat nilai yang


bagus

selain fungsi-fungsi di atas fungsi-fungsi string lainnya


adalah :
1. Fungsi disp
Fungsi disp memungkinkan untuk menampilkan
string tanpa menampilkan nama variabelnya.
Contoh :
1. disp(a)
jika anda belajar rajin,

dapat dilihat bahwa a=statemen telah dihilangkan.


Fungsi ini berguna untuk menampilkan teks bantuan
dalam suatu file script
2. >>disp('Ini contoh tampilan dari text')
Ini contoh tampilan dari text

Syarat digunakannya disp , isi didalamnya harus


merupakan strings, jadi jika ingin menampilkan
sebuah angka terlebih dahulu dirubah kedalam bentuk
strings dengan menggunakan function num2str( ).
Sebagai contoh :
nim=10499006;
disp(['Nim saya adalah ',num2str(nim)])
Nim saya adalah 10499006

2. fungsi input
Contoh:
nama=input('Masukkan nama anda !','s')
Masukkan nama anda !
disp('Nama yang anda masukkan=');
Nama yang anda masukkan=
disp(nama);

28

Judul Buku

3. fungsi fprintf
Command ini berfungsi untuk menampilkan output di
layar atau menyimpan output di suatu external file ( sama
halnya dengan command fprint di C/C++). Fungsi ini
mempunyai argumen sbb:
fprintf( ' nama file ' ,' format string ' , list)

dimana list adalah nama variabel yang dipisahkan dengan


koma. Untuk format string :
%P.Qe untuk eksponensial
%P.Qf untuk fixed point
/n untuk membuat baris baru

dan lebih detailnya dapat dilihat di help untuk fprintf.


Dibawah ini diberikan contoh penggunaannya.
Contoh 1.
z='ini cuma mo nyoba aja..';
y='semoga berhasil';
fprintf('%s\n',z);
ini cuma mo nyoba aja..
fprintf('%s\n',z,y);
ini cuma mo nyoba aja..
semoga berhasil
fprintf('%s%s\n',z,y);
ini cuma mo nyoba aja..semoga berhasil

Contoh 2.
x=1007.46 ; y=2.1278;k=17;
fprintf('x= %8.2f y=%8.2f k=%2.0f',x,y,k)
x= 1007.46 y= 2.13 k=17

Pemrograman Linier dengan MATLAB

29

Catatan : Teks atau string di Matlab dapat di


tampilkan dengan cara menggunakan ' di awal dan '
diakhir contoh: ' ini cara menulis string '.

perintah ini mirip dengan disp, namun lebih memiliki


fleksibilitas dalam format output yang diinginkan.

2.2. Scalar
Scalar adalah nama lain dari data numeric, Dalam
MATLAB data scalar dapat dimanipulasikan dengan
menggunakan beberapa fungsi, seperti type string
sebelumnya. Berikut ini beberapa contohnya:
x=0:0.1:1;
y=[x;tan(x)];
fid=fopen('c:\backup\tan.txt','w');%
fprintf(fid,'&6.2f %12.8f\n',y);
fclose(fid);

akan menyimpan tabel berisikan x dan tan(x) di file tan.txt


(nama ini sebarang, sesuai dengan keinginan anda) yang
disimpan di direktori c:\backup berisikan data berikut :
0.00

0.00000000

0.10

0.10033467

0.20

0.20271004

0.30

0.30933625

0.40

0.42279322

0.50

0.54630249

0.60

0.68413681

0.70

0.84228838

0.80

1.02963856

0.90

1.26015822

30

Judul Buku

1.00

1.55740772

2.3. Array.
MATLAB menangani array secara intuitif. Untuk
membuat array dalam MATLAB, yang perlu dilakukan
hanyalah mengetikkan kurung kotak kiri, memasukkan
elemen-elemen denagn dipisahkan oleh spasi atau koma,
kemudian menutup array dengan kurung kotak kanan.
Berikut ini akan diberikan beberapa contoh
assignment untuk array :
a. Pengalamatan array
Dalam MATLAB elemen-elemen array diakses
menggunkan subcript; misalnya x(1) adalah elemen
pertama x, x(2) adalah elemen kedua x, dan seterusnya.

Contoh :
1. x=[2 4 6 8 10]

dapai dilihat bahwa x(1)=2, x(2)=4, x(3)=6, x(4)=8,


x(5)=10
x(4) %elemen keempat x
ans =
8
2. x([1 3 5])=[0.2 0.5 0.7]

maka x(1)=0.1, x(3)=0.5, x(5)=0.7 dan x(i) untuk


i=2,3,4
bernilai 0.
3. nilai array dapat juga diisikan sebagai berikut :
x=4:1:9
x =
4

artinya bahwa nilai array yang diisikan dengan


angka dari 4 sampai 9 dengan penambahan 1
(default).

Pemrograman Linier dengan MATLAB

31

Penambahan dapat bernilai sebarang,


dapat juga negatif, seperti contoh berikut :

bahkan

z=10:-2:1
z =
10

4. Memisahkan elemen dengan titik koma membuat


elemen berada dalam baris yang berbeda, seperti
contoh berikut :
y=[1;3;5;7;9]
y =
1
3
5
7
9

b. Menambahkan elemen array


x=[x 1 2] % array sebelumnya
x=[x 2 4] %menambahkan 2 elemen dibelakang
x =
1

x=[1 2 x 3]%menambahkan dua elemen di depan,


satu dibelakang
x =
1

c. Mengakses sebagian elemen array


Dari contoh sebelumnya misalkan hanya diakses elemen ke 2
sampai ke empat

32

Judul Buku

y=x(2:4)
y =
2

d. Menghapus elemen array


Dapat dilihat contoh berikut :
Menghapus elemen terakhir dari array
n=[1 3 5 7 9]
n =
1

n=n(1:length(n)-1)
n =
1

a. Menghapus
tertentu

elemen

pada

index

Misalkan z =[1 2 3 4 5 ] dan ingin dihapus z


pada index ke 2 dan 4 maka:
z=[1 2 3 4 5]
z =
1

z([2 4])=[]
z =
1

2.4. Matriks
Matriks merupakan bentuk utama dari MATLAB,
seperti halnya array matriks juga didefenisikan elemen

Pemrograman Linier dengan MATLAB

33

demi elemen. Sebagai contoh jika diketahui matriks


berikut ini :
3
4

5
1

A=

Maka matriks di atas dapat diinputkan ke MATLAB


dengan beberapa cara yaitu:
a. Mengentri satu persatu data matriks A
A(1,1)=3;A(1,2)=5;A(2,1)=4;A(2,2)=1
A =
3

b. Menggunakan operator titik koma


A=[3 5;4 1]
A =
3
4

5
1

untuk mengetahui ukuran matriks di atas dapat


dilakukan dengan menggunakan command size berikut :
[baris kolom]=size(A)
baris =
2
kolom =
2

atau jika hanya ingin mengetahui jumlah baris atau


kolom saja maka digunakan perintah berikut :
baris=size(A,1)
kolom=size(A,2)

Sebagai latihan dapat dicoba contoh berikut ini:


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

34

Judul Buku

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


>> C = [1 2;3 4;5 6];
>> f=[2 4 6 ]
>> whos
Name

Size

Bytes

Class

3x3

72

double array

3x3

72

double array

3x2

48

double array

Grand total is 24 elements using 192 bytes


>> A+B
ans =
2

10

11

12

>> A+C
??? Error using ==> +
Matrix dimensions must agree.
Matrix multiplication is also defined:
>> A*C
ans =
22

28

49

64

76

100

>> C*A
??? Error using ==> *
Inner matrix dimensions must agree.
If A is a square matrix and m is a positive integer,
then A^m is the product of m factors of A.

Pemrograman Linier dengan MATLAB

35

However, no notion of multiplication is defined for


multi-dimensional arrays with more than 2 dimensions:
>> C = cat(3,[1 2;3 4],[5 6;7 8])
C(:,:,1) =
1

C(:,:,2) =
5

>> D = [1;2]
D =
1
2
>> whos
Name

Size

Bytes

Class

2x2x2

64

double array

2x1

16

double array

Grand total is 10 elements using 80 bytes


>> C*D
??? Error using ==> *
No functional support for matrix inputs.
By the same token, the exponentiation operator ^ is only
defined for square 2-dimensional arrays (matrices).

Dan operasi-operasi lainnya seperti :


1. >>x=A/f
2. >>A=A

36

Judul Buku

3. >>2*A
4. >>inv(B)

Pembahasan detail mengenai matriks ini akan


dibahas pada Bab Matriks dan Aljabar linier.

Pemrograman Linier dengan MATLAB

37

Bab 3
3 FUNGSI M-FILE
3.1. Fungsi M-File
Penulisan barisan ekspresi dalam MATLAB
command window biasanya dilakukan baris perbaris dan
biasanya untuk menyimpan barisan perintah dan hasil
outputnya dengan menggunkan command diary. Hal ini
sangatlah tidak efisien dikarenakan barisan yang telah
tersimpan di diary tidak dapat diloadkan kembali
seandaianya telah keluar dari MATLAB. Apalagi jika dilakukan
banyak sekali perulangan barisan perintah yang sama,
misalkan dilakukan pengolahan data dan perhitungan yang
samayang melibatkan data atau fungsi yang berbeda. Untuk
itu MATLAB menyediakan suatu struktur untuk membuat
fungsi anda sendiri atau suatu teknik pemrograman dalam
bentuk M-File.
Fungsi M-file hampir sama dengan script file
dimana keduanya merupakan suatu file teks dengan ekstensi
.m. Fungsi M-file ini tidak dimasukkan dalam command
window, melainkan suatu file tersendiri yang dibuat dalam
editor teks (MATLAB editor/debugger).
Suatu fungsi M-File harus mengikuti beberapa
aturan. Fungsi M-file juga mempunyai sejumlah sifat penting.
Aturan-aturan dan sifat-sifat tersebut meliputi :
1. Nama fungsi dan nama file harus identik. Contohnya
flipud disimpan dalam file yang bernama flipud.m
2. Pertama kali MATLAB mengeksekusi suatu fungsi Mfile, MATLAB membuka file fungsi tersebut dan

38

Judul Buku

mengkompilasi perintah-perintah di dalamnya menjadi


suatu representasi internal dalam memoriyang
mempercepat eksekusi untuk semua pemanggilan
berikutnya. Jika fungsi juga melibatkan pemanggilan
ke fungsi M-file yang lain, fungsi M-file yang dipanggil
itu juga akan dikompilasi ke dalam memori.
3. Baris komentar sampai dengan baris bukan komentar
yang pertama adalah teks help yang ditampilkan. Jika
anda meminta help, misalnya >>help flipud yang
menampilkan 9 baris komentar pertama dari contoh di
atas. Baris komentar yang paling atas disebut baris H1
adalah baris yang dicari oleh perintah lookfor.
4. Setiap fungsi memiliki ruang kerjanya sendiri yang
berbeda dengan ruang kerja MATLAB. Satu-satunya
hubungan antara ruang kerja MATLAB dengan
variabel-variabel dalam fungsi adalah variabel-variabel
input dan output fungsi. Jika suatu fungsi mengubah
nilai dalam bentuk suatu variabel input, perubahan itu
hanya tampak dalam fungsi dan tidak mempengaruhi
ruang kerja MATLAB.
5. Jumlah dari argument input dan output yang
digunakan jika suatu fungsi dipanggil hanya ada dalam
fungsi tersebut.
6. Fungsi dapat berbagi variabel dengan fungsi lain,
ruang kerja MATLAB dan pemanggilan rekursi untuk
dirinya sendiri jika variabelnya dideklarasikan sebagai
variabel global.
7. Fungsi M-file berhenti dieksekusi dan kembali ke
prompt jika telah mencapai akhir dari M-file atau jika
menemui perintah return. Perintah return merupakan
cara sederhana untuk menghentikan fungsi sebelum
mencapai akhir file.
8. Fungsi M-file dapat memuat lebih dari sebuah fungsi.

Pemrograman Linier dengan MATLAB

39

3.2. Membentuk M-file


Untuk membuat m-file click File di MATLAB command
window selanjutnya pilih New dan click M-File dari menu the
pull-down. Maka di layar akan ditampilkan
MATLAB
Editor/Debugger . Selanjutnya di layar ini sapat dibuat
/dituliskan argumen-argumen yang diinginkan, dapat diedit
penulisannya dan sebaginya. Setelah selesai melakukan
pengetikan
maka
File,
pada
layar
MATLAB
Editor/Debugger pilih Save As . berikan nama yang
anda inginkan untuk file tersebut, misalnya firstgraph.m
kemudian click Save. Pastikan bahwa file yang disimpan
pada direktori yang mudah untuk dipanggil.
Sebagai contoh sederhana file dalam script adalah
Contoh 1.
% Script file firstgraph.
x = pi/100:pi/100:10*pi;
y = sin(x)./x;
plot(x,y)
grid

Untuk mengesekusi file script di atas maka Command


Window ketikan nama file yang telah disimpan sebelumnya
misal firstgraph. Dengan syarat bahwa sebelumnya directori
pathnya sudah ditujukan ke tempat file yang disimpan Dari
contoh di atas Maka di layar akan muncul.:

40

Judul Buku

contoh 2 berikut ini diberikan perintah-perintah untuk


menyelesaikan masalah pencarian nilai blok dalam tomografi.
% Script blok_tomo.m
% untuk mencari nilai blok tomografi
x=110;y=10;z=175;
nilai bloknya

koordinat

titik

yang

akan

dicari

dx=1;dy=1;dz=50; % ukuran blok


nx=65;ny=35;
% Banyak kotak kearah x dan y
x0=90;y0=-15;z0=0; % Koordinat awal
i=fix((x-x0)/dx)+1;
j=fix((y-y0)/dy)+1;
k=fix((z-z0)/dz)+1;
no_blok=(k-1)*nx*ny + (j-1)*nx+i
disp(['no blok = ',num2str(no_blok)])

Untuk mengeksekusi file ini terlebih dahulu anda


simpan dengan memilih File Save as , lalu beri nama
blok_tomo.m . Setelah itu pilih Debug Run . Atau dengan

Pemrograman Linier dengan MATLAB

cara mengetikkan nama


MATLAB :

41

M-file di command Window

blok_tomo
no blok = 8471

Jika perintah Matlab tidak diakhiri dengan titik koma ,


hasil dari perintah itu serta nama variabelnya akan
ditampilkan kembali dalam command window . Supaya
tampilan lebih bagus , maka untuk menampilkan nama
variabel digunakan perintah disp. Perintah echo on
membuat perintah-perintah yang dibuat di M-file akan
ditampilkan kambali di command window. Perintah input
memungkinkan untuk meminta input dari pemakai saat Mfile dijalankan.
Berikutnya
secara
umum
m-file
didefinisikan
menggunakan command function. Sintaks standar untuk
command function adalah :
function[output1,output2,]=
NamaFunction(input1,input2,..)
disini output1, output2,adalah barisan nama output yang
akan dimunculkan dilayar command window MATLAB jika
NamaFunction dipanggil dengan input argumen adalah
input1,input2, Input tersebut dipanggil dan dikirim by value
yaitu perubahan nilai input di dalam function tidak akan
ditampilkan diluar (perubahannya hanya lokal. Karenanya jika
ingin melakukan assignment fungsi by name, nama output
yang ingin dikirim keluar fungsi diletakkan di sebelah kiri
(yang dinamakan output1, output2,) Input dan output di
atas adalah optional argumen, artinya dimungkinkan
membuat suatu function tanpa input argumen. Jika diberikan
tanpa output argumen maka yang ditampilkan adalah
eksekusi dari statement/ekspresi terakhir.
Sebagai contoh ingin dihitung rata-rata dari
beberapa data. Sebagai input adalah suatu data dan
output vektor xbar, maka dapat dibentuk M-file nya
sebagai berikut :

42

Judul Buku

dalam program di atas terlihat adanya penggunaan


flow for. Bahasan detail tentang control flow :looping
for akan di bahas pada bab selanjutnya.

3.3. Menjalankan suatu M-file


Untuk memanggil atau mengeksekusi M-file ini,
yang pertama dilakukan adalah dengan memindahkan
path search dari MATLAB compiler. Pada dasarnya proses
eksekusi dari compiler MATLAB adalah dengan mencari
suatu command atau definisi operator yang ada dan
mengeksekusi definisi script atau operator pertama yang
ditulis dan ditemui direktori MATLAB (di direktori bin atau
toolbox).
Misalkan function M-file pada contoh di atas
disimpan di E:\Word\radius.m, maka set pathnya dapat
dilakukan dengan cara :
Dari menu pulldown di MATLAB command editor pilih file
kemudian pilih set path maka akan muncul :

Pemrograman Linier dengan MATLAB

43

dari menu tersebut arahkan current directory ke direktori


tempat dimana disimpan script yang ingin dieksekusi
dengan cara mengetikkan atau browsing directory ke
tempat penyimpanan script yang akan dieksekusi. Jika
filenya disimpan di E:\Word maka browse path ke E:\Word.
Dari contoh di atas misalkan ingin dihitung rata-rata dari
data 1, 2, 3, dan 4, maka functionnya dapat dieksekusi
dengan mengetikkan:
x=[1 2 3 4]
x =
1

[xbar]=average(x)
xbar =
2.5000

Untuk memberi keterangan mengenai maksud dan


tujuan M-File yang kita buat agar orang lain faham dengan
M-file tersebut maka perlu adanya help/keterangan, dan
untuk membuat help/keterangan pada M-file dapat
dilakukan dengan menggunakan command % dari
MATLAB. Jika tanda % tersebut diketikkan maka command
yang beserta dengannya tidak akan dibaca oleh MATLAB.
Sebagai contoh misalkan untuk file average di atas dapat

44

Judul Buku

dibuat keterangannya dengan mengetikkan di bawah


kalimat:
Function [xbar]=average(x);

Barisan kalimat berikut :


%ini merupakan contoh program m-file
%program ini digunakan untuk menghitung rata-rata
%contoh penggunaannya adalah
%misalkan x=1:10
%kemudian ketikkan [xbar]=average(x);
%maka nanti akan diperoleh rata-rata dari data-data
tersebut

kemudian simpan kembali di average.m.

3.4. Fungsi Inline dan command


Feval
MATLAB mempunyai command inline yang digunakan
untuk
mendefinisikan atau menuliskan suatu fungsi.
Command tersebut adalah inline functions.
Sebagai contoh misalkan :
f = inline('sqrt(x.^2+y.^2)','x','y')
f =
Inline function:
f(x,y) = sqrt(x.^2+y.^2)

Fungsi tersebut di atas dapat dijalankan dengan cara biasa


yaitu :
f(3,4)
ans =
5

Pemrograman Linier dengan MATLAB

45

Selain itu fungsi tersebut juga dapat dijalankan untuk tipe


array.
Misalkan seperti contoh di bawah ini :
A = [1 2;3 4]
A =
1

dan
B = ones(2)
B =
1

maka
C = f(A, B)
C =
1.4142 2.2361
3.1623 4.1231

Penggunaan lainnya adalah untuk suatu string pada


Matlab. Karakter string merupakan suatu teks yang dikelilingi
oleh single quotes. Sebagai contoh :
str = 'programming in MATLAB is fun'
str =
programming in MATLAB is fun

Dalam
pembahasan
sebelumnya
anda
telah
mempelajari tentang bagamaimana membuat suatu fungsi
file. Beberapa fungsi mengambil input argumen dari fungsi
lainnya, yang berupa string. Untuk menjalankan fungsi
khusus tersebut yang namanya disebutkan oleh string maka
digunakan command feval seperti yang ditunjukkan di
bawah ini :

46

feval('functname',
functname)

Judul Buku

input

parameters

of

function

Sebagai contoh adalah menghitung least common


multiple dari dua bilangan bulat. MATLAB mempunyai fungsi
built-in
lcm. Dan untuk menghitung greatest common
divisor MATLAB juga mempunyai fungsi built-in gcd. Maka
persamaan yang memenuhi untuk gabungan keduanya
adalah :
ab = lcm(a, b)gcd(a, b)
Untuk menggambarkan penggunaan command feval, dapat
dilihat pada contoh m file
Mylcm.m berikut ini :
function c = mylcm(a, b)
% The least common multiple c of two integers a and b.
if feval('isint',a) & feval('isint',b)
c = a.*b./gcd(a,b);
else
error('Input arguments must be integral numbers')
end

Command feval digunakan dua kali dalam baris


kedua. Hal ini digunakan untuk mengecek apakah kedua
inputnya integer atau bukan dan operatot logika yang
digunkan adalah &. Jika kondisi ini terpenuhi maka least
common multiple dikerjakan menggunkan rumus yang
disebutkan sebelumnya, sebaliknya akan muncul pesan
error.
command error, adalah argument dalam bentuk string.
Kondisi if - else end yang digunakan akan dibahas lebih
detail pada bab berukutnya. Function yang dieksekusi dua
kali dari function mylcm adalah isint , yaitu :

Pemrograman Linier dengan MATLAB

47

function k = isint(x);
% Check whether or not x is an integer number.
% If it is, function isint returns 1 otherwise it returns 0.
if abs(x - round(x)) < realmin
k = 1;
else
k = 0;
end

Function baru yang digunakan disini adalah the


absolute value function (abs) dan the round function
(round).realmin adalah bilangan real positif terkecil di
komputer anda.
format long
realmin
ans =
2.225073858507201e-308
format short

Contoh selanjutnya adalah untuk Trapezoidal Rule yang


sering digunakan untuk integrasi numerik dari suatu fungsi
yang terdeferensial.pada interval tertentu.

dengan h = b a. Rumus di atas mudah untuk


diimplemetasikan dalam MATLAB
function y = corrtrap(fname, fpname, a, b)
% Corrected trapezoidal rule y.
% fname - the m-file used to evaluate the integrand,

48

Judul Buku

% fpname - the m-file used to evaluate the first derivative


% of the integrand,
% a,b - endpoinds of the interval of integration.
h = b - a;
y=(h/2).*(feval(fname,a)+feval(fname,b))+(h.^2)/12.*( ...
feval(fpname,a) - feval(fpname,b));

Masukan parameters a and b bisa dalam bentuk arrays


dengan dimensi yang sama. Untuk contoh di atas di ambil
integral fungsi sinus dengan interval seperti yang ditunjukkan
di bawah ini dalam bentuk array a dan b, yaitu :
a = [0 0.1];
b = [pi/2 pi/2 + 0.1];
y = corrtrap('sin', 'cos', a, b)
y =
0.9910 1.0850

Berikut ini beberapa contoh sederhana di bawah yang bisa


dicobakan untuk m-file.
1. Untuk menghitung akar persamaan dari suatu
fungsi kuadrat.
ax2+bx+c=0

Dengan

persamaan

umumnya

Scriptnya dapat dituliskan sebagai berikut :


function [x1,x2]=rootquad(a,b,c)
d=b*b-4*a*c;
x1=(-b+sqrt(d))/(2*a);
x1=(-b-sqrt(d))/(2*a);

2. Misalkan untuk mencari nilai dari harga tertentu


dari suatu fungsi yang telah didefinisikan. Misalkan
fungsi yang didefinisikan tersebut adalah :

Pemrograman Linier dengan MATLAB

49

2x
x
x
+ cos


, maka script untuk program
2. 4
2.4
2. 4
m-filenya dapat dituliskan sebagai berikut :
function p=coba(x)
x=x/2.4;
p=x^3-2*x+cos(pi*x);

3. Menghitung jari-jari dan keliling dari suatu dari


lingkaran jika diketahui luasnya.
function

[r,c] = radius(A);

% RADIUS finds the radius and circumference of


% a circle if the area A is given.
if A < 0
error('area must be positive');
end
r = sqrt(A/pi);
c = 2 * pi * r;

Note : MATLAB bersifat case sensitif sehingga


variabel atau fungsi NamaFungsi berbeda
dengan namafungsi

50

Judul Buku

BAB 4
4 CONTROL FLOW
Untuk mengatur jalannya eksekusi dari statement di
dalam script/m-file maka diperlukan adanya kontrol program.
Kontrol program sangat berguna karena memungkinkan
komputansikomputansi
yang
lalu
mempengaruhi
komputansi yang akan datang. Jika pernah menggunakan

Pemrograman Linier dengan MATLAB

51

fasilitas kontrol ini , maka bab ini bukanlah hal yang baru
bagi anda . Namun jika kontrol program ini dianggap sebagai
sesuatu yang baru,maka materi ini mungkin tampak rumit.
Jika hal itu terjadi, maka pelajarilah materi ini pelan-pelan.
Matlab menyediakan empat struktur kontrol program,
yaitu loop for, loop while, kontruksi switch-case dan
kontruksi if-else-end. Kontruksi-kontruksi tersebut seringkali
melibatkan banyak perintah Matlab, yang oleh karenanya
konstruksi ini lebih banyak terdapat dalam M-file.

4.1.Loop for
Loop for memungkinkan sekelompok perintah diulang
sebanyak suatu jumlah yang tetap. Be ntuk umum loop for
adalah:
for x= *array/matriks
statement1;
statement 2;

end
Keterangan: *aturan pembuatan array seperti yang telah dibahas
pada bab sebelumnya.

Perintah antara statement for dan statement end


dikerjakan sekali untuk setiap kolom dalam array. Untuk tiap
iterasi, x diisi dengan kolom array berikutnya, yaitu dalam
iterasi ke-n dalam loop.
Contoh :
for i=1:10
x(i)=sin(i*pi/10);
end
x

52

Judul Buku

x =
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090
0.5878 0.3090 0.0000

Statemen diatas dapat dijelaskan sebagai berikut :


untuk n sama dengan satu sampai sepuluh , kerjakan seluruh
statement sampai statemen end berikut . Pertama kali
dieksekusi loop for untuk n=1 , lalu n=2 dan seterusnya
sampai n=10 . Setelah n=10 , loop for berhenti dan setiap
perintah yang ada setelah statemen end akan dikerjakan ,
yang dalam contoh diatas menampilkan elemen-elemen x.
Loop for tidak dapat dihentikan dengan mengubah nilai n di
tengah-tengah loop,
contoh :
for i=1:10
x(i)=sin(i*pi/10);
n=10;
end
x
x =
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090
0.5878 0.3090 0.0000

Statement 1:10 adalah statemen standar pembuatan array.


Setiap array Matlab yang valid dapat digunakan untuk loop
for,
contoh :
data=[1 2 3 4;5 6 7 8];
for n=data
x=n(1)-n(2)
end

Pemrograman Linier dengan MATLAB

53

x =
-4
x =
-4
x =
-4
x =
-4

Biasanya loop for dapat dibuat sehingga berada dalam


loop for yang lain sebanyak yang diinginkan,
contoh:
for i=1:10
for j=1:5
U(i,j)=i^2+j^2;
end
end
U
U =
2 5 10 17 26
5 8 13 20 29
10 13 18 25 34
17 20 25 32 41
26 29 34 41 50
37 40 45 52 61
50 53 58 65 74
65 68 73 80 89
82 85 90 97 106
101 104 109 116 125

54

Judul Buku

Dengan cara diatas kita membuat suatu matriks dimulai


dengan membuat elemen matriks baris 1 elemen kolom 1
sampai 5, dilanjutkan dengan membuat elemen matriks
baris 2 kolom 1 sampai 5 dan seterusnya sampai baris ke
10.
Contoh lainnya
H = zeros(5);
for k=1:5
for l=1:5
H(k,l) = 1/(k+l-1);
end
end
H
H =
1.0000 0.5000 0.3333 0.2500
0.5000 0.3333 0.2500 0.2000
0.3333 0.2500 0.2000 0.1667
0.2500 0.2000 0.1667 0.1429
0.2000 0.1667 0.1429 0.1250

0.2000
0.1667
0.1429
0.1250
0.1111

Matrix H yang dibuat tersebut dinamakan Hilbert matrix.


Perintah pertama menandakan ruang dalam memori
komputer untuk matriks yang dibangkitkan.

4.2. Loop While


Loop
for
mengerjakan
sekelompok
perintah
pengulangan yang diulang sebanyak suatu jumlah yang kita
tentukan. tetapi loop while mengerjakan sekelompok
perintah yang diulang secara tidak terbatas.
Sintaks dasar dalam MATLAB dari Loop While adalah :
while ekspresi/variabel
statement1
Statemen2

end

Pemrograman Linier dengan MATLAB

55

Perintah yang terdapat diantara statemen while dan


end dieksekusi berulang kali selama semua elemen dalam
ekspresi adalah benar. Ada beberapa daftar ekspresi boolean
yang ada dalam MATLAB seperti tabel berikut ini :

a= =b

Benar jika a sama dengan b

a>b

Benar jika a lebih besar b

a<b

Benar jika a lebih kecil b

a>=b

Benar jika a lebih besar ata sama dengan b

a<=b

Benar jika a lebih kecil atau sama dengan b

a~=b

Benar jika a tidak sama dengan b

a&b

Benar jika kedua ekspresi boolean a dan b


benar

a|b

Benar jika paling sedikit satu diantara ekpresi


boolean a dan b benar

a xor b

Benar jika hanya satu diantara ekpresi


boolean a dan b benar

~a

Negasi a, benar jika ekspresi boolean a


bernilai salah

Biasanya evaluasi dari ekspresi menghasilkan nilai


skalar, tetapi hasil yang berupa array juga dapat diterima .
Jika hasilnya adalah array, semua elemen array harus bernilai
benar.
Perhatikan contoh berikut.
num=0; eps=1;

56

Judul Buku

while (1+eps)>1
eps=eps/2;
num=num+1;
end

Contoh di atas memperagakan suatu cara untuk


menghitung Eps (suatu nilai khusus MATLAB), yaitu bilangan
terkecil yang dapat ditambahkan pada 1 sedemikian hingga
hasilnya lebih besar dari 1 dengan menggunkan presisi
hingga. Pada contoh ini EPS dimulai dari 1, selama (1
+eps)>1 adalah benar (tidak nol), perintah yang terdapat
pada loop while akan dikerjakan.

Contoh sederhana lainnya adalah loop while yang akan


menampilkan bilangan dari 0 sampai dengan 4 dilayar sebagai
berikut :
Function contohwhileloop();
%Program sederhana ini menampilkan bilangan
%dari 0 sampai dengan 4 di layar
i=0;
while i<5
disp(i);
i= i +1;
end

Contoh berikutnya adalah akan mengecek berapakah


nilai bilangan bulat n pertama yang memiliki nilai faktorial
terdiri atas 100 digit (n pertama dengan n!>102), dan
program di MATLAB dapat dituliskan sebagai berikut :
Function checkfactorial();
n=1;
while prod(1:n)<1.e100

Pemrograman Linier dengan MATLAB

57

n=n+1;
end
disp(n)

Keterangan
command
menghitung n!.

prod(1:n)

diatas

akan

4.3.Kontruksi switch-else
Bila sederetan perintah harus dikerjakan dengan
didasarkan pada penggunaan berulang-ulang suatu tes
dengan argumen yang sama, kontruksi switch else akan
lebih tepat digunakan. Konstruksi ini mempunyai bentuk:
switch ekspresi
case test ekspresi 1
deret perintah 1 (statement,,statement)
case {test ekspresi 2, test ekspresi 3, test
ekspresi 4}
deret perintah 2 (statement,,statement)
.
otherwise
deret perintah 3 (statement,,statement)
end
Expresi harus berupa skalar atau karakter string. Jika
ekspresinya adalah skalar, ekspresi= =test_ekspresi di test
oleh statemen case. Jika ekspresi berupa karakter string
maka strcm(ekspresi, test_ekspresi) ditest.
Pada contoh diatas ekspresi dibandingkan dengan
dengan test ekspresi 1 pada statemen case pertama, jika
keduanya sama maka deret perintah akan dikerjakan, dan
deret statemen berikutnya yang berada sebelum

58

Judul Buku

statemen end diabaikan. Jika pembandingan pertama


tidak memberikan nilai benar maka akan dijalankan deret
perintah pada statemen case yang kedua. Jika semua
pembanding dengan case gagal akan dikerjakan deret
perintah 3 yang mengikuti statemen otherwise. Contoh
sederhana dari kontruksi switch-case adalah:
bilangan=5;
x=rem(5,2);
switch x
case 1
disp(['bilangan',num2str(bilangan),'adalah
bilangan ganjil'])
case 0
disp(['bilangan
bilangan genap'])

'

,num2str(bilangan),'adalah

otherwise
disp('Bilangan ini tidak mungkin ada')
end

bilangan 5 adalah bilangan ganjil

contoh lainnya adalah :


Membangkitkan bilangan bulat acak x dari himpunan
{1, 2, , 10}. If x = 1 atau x = 2, maka akan ditampilkan
Probability = 20% di layar. Jika x = 3 atau 4 atau 5, maka
Probability = 30% ditampilkan, dan selainnya maka
Probability = 50% ditampilkan. Dalam Script file fswitch
juga digunakan switch yaitu suatu konstruksi pemrograman
dalam MATLAB yang memilih antara beberapa kasus
berdasar pada ekspresi.
% Script file fswitch.
x = ceil(10*rand); % Generate a random integer in {1, 2, ... , 10}

Pemrograman Linier dengan MATLAB

59

switch x
case {1,2}
disp('Probability = 20%');
case {3,4,5}
disp('Probability = 30%');
otherwise
disp('Probability = 50%');
end

Dalam contoh sebelumnya dapat dilihat bahwa ada 3 fungsi


built in MATLAB yang digunakan yaitu :
rand bilangan acak distribusi uniform dalam interval (0, 1)
ceil Pembulatan ke atas.
disp menampilkan string/array
dari contoh di atas, misalkan di coba untuk :
for k = 1:10
fswitch
end
Probability = 50%
Probability = 30%
Probability = 50%
Probability = 50%
Probability = 50%
Probability = 30%
Probability = 20%
Probability = 50%
Probability = 30%
Probability = 50%

60

Judul Buku

Contoh selanjutnya adalah untuk variabel string :


Function TestMethod(METHOD);
Switch lower (METHOD)
Case{linear,bilinear},disp(Method is linear)
Case cubic,disp(Method is cubic)
Case nearest, (Method is nearest)
Otherwise, disp( Unknown method)
end

cara pemanggilannya adalah :


>>TestMethod(linear)
Method is lenear

4.4. Kontruksi if-else-end


Seringkali sederetan perintah harus dikerjakan dengan
didasarkan pada hasil tes rasional . Dalam bahasa
pemograman, logical ini dikerjakan dengan variasi kontruksi
if else - end. Bentuk paling sederhana kontruksi if-else-end
adalah:
if ekspresi
perintah
end
Perintah diantara statemen if dan end dikerjakan jika
semua elemen didalam ekspresi adalah benar, contoh:
mangga=15;
harga=mangga*75
harga =
1125
if mangga>7

Pemrograman Linier dengan MATLAB

61

harga=(1-20/100)*harga;
end
harga
harga =
900

Jika pada kasus dua pilihan, maka kontruksi if-else -end


adalah :
if ekspresi
perintah dikerjakan jika benar
else
perintah dikerjakan jika salah
end
Pada kasus diatas sekelompok perintah yang pertama
dikerjakan jika ekspresi bernilai benar, kelompok yang kedua
dikerjakan jika ekspresi bernilai salah. Jika terdapat 3 atau
lebih pilihan, kontruksi if-else-end mengambil bentuk :
if ekspresi 1
perintah dikerjakan jika ekpresi 1 benar
elseif ekspresi 2
perintah dikerjakan jika ekpresi 2 benar
elseif ekspresi 3
perintah dikerjakan jika ekpresi 3 benar
.
else
perintah dikerjakan jika tidak ada ekspresi yang
benar

62

Judul Buku

end
sekarang setelah kita tahu bagaimana membuat
keputusan dengan struktur ifelse-end, maka terbukalah jalan untuk menunjukkan cara
melompati atau keluar dari loop for dan loop while, sebagai
contoh :
eps=1;
for num=1:1000
eps=eps/2;
if (1+eps) <=1
eps=eps*2
break
end
end

eps =
2.2204e-016

num
num =
53

pada contoh diatas ditunjukkan cara lain untuk


mendekati eps. Dalam cara ini ,loop for dinstruksikan untuk
berulang sejumlah seribu. Kontruksi if tersebut dimaksudkan
untuk mengetes jika nilai eps kecil maka break akan
menghentikan loop. lalu nilai eps dikalikan 1.
Contoh Penyelesaian masalah :

Pemrograman Linier dengan MATLAB

63

Contoh 1.
Chebyshev polynomials Tn(x), n = 0, 1, merupakan salah
satu masalah yang penting dalam analisa numerik. Fungsi
didefinisikan secara rekursif seperti berikut ini:
Tn(x) = 2xTn 1(x) Tn 2(x), n = 2, 3, ,
T0(x) = 1, T1(x) = x.
fungsi di atas dapat diimplementasikan ke pemrograman
MATLAB sebagai berikut :
function T = ChebT(n)
% Coefficients T of the nth Chebyshev polynomial of the
first kind.
% They are stored in the descending order of powers.
t0 = 1;
t1 = [1 0];
if n == 0
T = t0;
elseif n == 1;
T = t1;
else
for k=2:n
T = [2*t1 0] - [0 0 t0];
t0 = t1;
t1 = T;
end
end

jika koefisien Chebyshev polynomial nya berpangkat 3 maka


bentuk fungsinya diperoleh sebagai berikut :
coeff = ChebT(3)
coeff =
4 0 -3 0

64

Judul Buku

Thus T3(x) = 4x3 3x.


Contoh 2:
Akan dicari nilai dari persamaan x2-x=10, diketahui suatu
persamaan iterasi untuk mencari nilai x sbb: xr+1=1+(1/xr)
untuk r = 0,1,2,
diberikan nilai Xo=2 ,iterasi berhenti setelah nilai xr+1xr<0.0005
Penyelesaian :
clear all
x1=2; % didefinisikan terlebih dahulu nilai Xo=2
err=1; % dibuat nilai error 1 supaya lebih dari 0.0005
while err > 0.0005 % untuk nilai error lebih dari 0.0005
dilakukan perintah seperti dibawah
x2=1+(1/x1); % persamaan untuk mencari nilai x r+1
err=abs(x2-x1);% mencari nilai error
x1=x2; % membuat looping agar nilai x2 yg didapat menjadi
masukkan bagi persamaan diatas end err
err =
2.0429e-004
x1
x1 =
1.6180

Contoh 2:
Buat grafik nilai x nya dari contoh 1 tersebut sampai didapat
nilai error
0.0005!
Penyelesaian :

Pemrograman Linier dengan MATLAB

65

clear all
x1=2;
err=1;
i=1; % dibuat indeks kompenen 1 untuk array x
x=[ ];
x(1)=x1; % membuat elemen pertama array x == x1
while err > 0.0005
i;
x2=1+(1/x1);
err=abs(x2-x1);
x(i+1)=x2; % Untuk menyimpan nilai x yang didapat di
array x
x1=x2;
i=i+1; % Membuat indeks 1 bertambah 1 tiap satu kali
looping
end
t=1:length(x); % membuat array berdasarkan banyaknya
looping
plot(t,x)

Contoh 3 :
Diketahui data porositas dari sebuah sumur bor
Well ID
X
Y
Porosity
1

2280

890

1240

1210

1,5

1651

1290

5,7

2169

1230

2,9

2059

1690

10,4

1722

1630

16,1

891

1820

1,9

1385

2060

7,7

1682

2020

15,2

10

1885

2050

7,6

11

1991

2310

11,9

12

1694

2420

15,8

66

Judul Buku

13

1023

2310

6,1

14

1305

2750

4,5

15

1705

2620

12,7

16

2301

2000

12,4

Akan dicari jarak sumur ke sumur lain :


Penyelesaian:
rumus jarak = (x2-x1)2 + (y2-y1)2 , i,j = well ID
% dibuat matriks segiempat yang merupakan jarak antara
Well ID
n=length(x) ;% menghitung jumlah komponen x
for i=1:n
for j=1:n
d(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2);%membuat
matriks d yang berisi jarak
end
end
well=[ ]; % membuat ruang untuk matriks yang berisi no
sumur
% diambil komponen dimana i <> j dan (i-j) > 0
for i=1:n
for j=1:n
if (i~=j) & (i-j) > 0
wel=[i j];
well=[well;wel];
end
end
end
m=length(well);
% membuat array d_2 yang berisi jarak yg telah
ditentukan
for i=1:m
d_2(i)=d(well(i,1),well(i,2));
end
format short g % membuat tampilan bilangan agar
berbentuk integer
% menampilkan well ID dan jaraknya
disp([well d_2' c]);

Pemrograman Linier dengan MATLAB

Contoh 4 :
clear all
% Input Data Koordinat source dan receiver ,t dan s
s=[0,-250;0,-633;1000,0]; % source
r=[2000,-1000]; % receiver
t=[1.509;1.447;0.707]; % waktu tempuh gelombang
n=length(s);
% menghitung kecepatan awal
for i=1:n
pj(i,1)=sqrt((r(1)-s(i,1))^2+(r(2)-s(i,2))^2);
end
v0=mean(pj);
% menghitung t calculate
for i=1:n
t_cal(i,1)=pj(i)/v0;
end
% menghitung delta_t
for i=1:n
del_t(i,1)=t(i)-t_cal(i);
end
% membuat matrix model
blok=2;
sumber=3;
for i=1:sumber
for j=1:blok
M(i,j)=pj(i)/2;
end
end
M(3,:)=[0 ,pj(3)];
% bentuk : M*ds=del_t;
% ds=inv(M)*del_t;
% ds=inv(M'*M)*M'*del_t;
ds=inv(M'*M)*M'*del_t;
for i=1:2
dv(i,1)=(-ds(i)*v0^2)/(1+ds(i)*v0);
end
for i=1:2
v(i,1)=v0+dv(i);
end
fprintf('\nkecepatan V1 adalah : %5.3f\n' ,v(1));

67

68

Judul Buku

fprintf('kecepatan V2 adalah : %5.3f' ,v(i));


kecepatan V1 adalah : 1089.443
kecepatan V2 adalah : 2000.302

Bab 5
5 MATRIKS DAN VEKTOR
5.1 Membentuk Matriks dalam
MATLAB.
Matriks merupakan dasar dari pengembangan
MATLAB. Dalam MATLAB nama yang digunakan untuk
matriks haruslah dimulai dengan sebuah huruf dan diikuti
oleh kombinasi huruf-huruf lainnya atau digit. Huruf yang
dimaksudkan boleh huruf kapital atau biasa.
Dalam
MATLAB
operasi
aritmatika
seperti
penjumlahan, pengurangan, perkalian dan pembagian dapat
dibentuk langsung dengan matriks. Langkah pertama yang
dilakukan adalah membentuk matriksnya. Ada bebrapa cara
dalam MATLAB untuk membentuk matriks dengan metode

Pemrograman Linier dengan MATLAB

69

yang sederhana. Sebagai contoh sederhana jika diketahui


sebuah matriks 4 baris dan 3 kolom :
4 6 7
2 5
1
maka untuk menuliskan di MATLAB dapat
M =
8 0
3

9
5 10
dilakukan dengan mengetikkan perintah berikut :
M=[4 6 -7;2 5 1;8 0 3;5 10 9]
M =
4

-7

10

dapat dilihat bahwa nilai matriks yang dimasukkan berada


dalam kurung siku. Elemen-elemen dari setiap baris harus
dipisahkan dengan spasi (blanks) atau dengan tanda
koma. Akhir dari tiap baris kecuali baris yang terakhir
dinyatakan dengan ;(semicolon).
Jika diketahui matriksnya seperti berikut ini, misalkan
matriks dengan ukuran 5 x 5, dengan elemen-elemennya
adal;ah sebagi berikut :
2
1

B = 1

11

3
2
7
12

5
3
8
13

7
4
9
14

10
9

10
15

maka untuk menginputkannya ke MATLAB selain dengan


cara yang disebutkan sebelumnya, dapat dilakukan
seperti berikut ini :
b=[2

10

70

Judul Buku

10

11 12 13 14 15]
b =
2

10

10

11

12

13

14

15

a. Transpose Matriks
Jika ingin membuat transpose dari sebuah matriks
dapat dilakukan dengan memberikan tanda apostrope
pada notasi matrik tersebut. Contohnya, jika diketahui
matriks :
1
P =
4

2
5
8

3
6
maka untuk mendapatkan transpose dari
9

matriks P adalah dengan mengetikkan perintah berikut di


MATLAB :
P=[1 2 3;4 5 6;7 8 9]
P =
1

Q=P'

Pemrograman Linier dengan MATLAB

71

Q =
1

atau
conj(P')
ans =

b. Matriks Kompleks
Jika X adalah suatu matriks kompleks seperti :
1
X =
j 5
sebagai berikut :

j
maka di MATLAB dapat dientrikan
2

X=[1 j;-j*5 2]

akan menghasilkan :
X =
1.0000
0 - 5.0000i

0 + 1.0000i
2.0000

Catatan bahwa jika Y=X maka akan dihasilkan :


Y=X'
Y =

72

Judul Buku

1.0000

0 + 5.0000i

0 - 1.0000i

2.0000

c. Invers Matriks
Function inv
dalam MATLAB digunakan untuk
menghitung invers matriks
Misalkan diketahui matriks A didefinisikan sebagai berikut
A = [1 2 3;4 5 6;7 8 10]
A =
1 2 3
4 5 6
7 8 10

maka
B = inv(A)
B =
-0.6667 -1.3333 1.0000
-0.6667 3.6667 -2.0000
1.0000 -2.0000 1.0000

Untuk membuktikan bahwa B adalah invers matriks A


maka dapat dilakukan dengan menunjukkan bahwa A*B = I
dan B*A = I, diman I adalah matrisk identitas. Dan diperoleh
:
A*B
ans =
1.0000

1.0000

-0.0000
0
1.0000

Pemrograman Linier dengan MATLAB

73

dengan cara yang sama dapat dilakukan juga untuk B*A = I.


d. Determinant
Dalam beberapa aplikasi Aljabar linear pengetahuan
tentang determinan dari suatu matriks dibutuhkan. MATLAB
mempunyai fungsi built-in untuk ini yaitu function det yang
dirancang untuk perhitungan determinan.
Misalkan
A = magic(3)
A=
8

Maka determinan dari A sama dengan


det(A)
ans =
-360

Salah satu metode klasik untuk menghitung


determinan adalah dengan menggunakan ekpansi kofaktor,
dan functionnya dapat dituliskan dalam bentuk :
Function ckl = cofact(A, k, l) menghitung kofaktor ckl dari
akl elemen matriks A
function ckl = cofact(A,k,l)
% Cofactor ckl of the a_kl entry of the matrix A.
[m,n] = size(A);
if m ~= n
error('Matrix must be square')

74

Judul Buku

15
end
B = A([1:k-1,k+1:n],[1:l-1,l+1:n]);
ckl = (-1)^(k+l)*det(B);

Function d = mydet(A) mengimplementasikan metode


ekspansi kofaktor untuk menghitung determinan.
function d = mydet(A)
% Determinant d of the matrix A. Function cofact must be
% in MATLAB's search path.
[m,n] = size(A);
if m ~= n
error('Matrix must be square')
end
a = A(1,:);
c = [];
for l=1:n
c1l = cofact(A,1,l);
c = [c;c1l];
end
d = a*c;

Misalkan function mydet menggunakan ekspansi


kofaktor sepanjang baris 1 dari matriks A. Metode kofaktor
mempunyai kompleksitas komputasi yang tinggi. Oleh
karenanya metode tersebut tidak direkomendasikan untuk
komputasi matriks dengan ukuran besar. Untuk menghitung
kompleksitas komputasi dari dua function det dan mydet,
maka akan digunakan fungsi built in dari MATLAB yaitu
function flops. Function ini menghitung jumlah operasi
floating-point (penjumlahan, pengurangan, perkalian dan
pembagian).

Pemrograman Linier dengan MATLAB

75

Misalkan :
A = rand(25);

Adalah matriks dengan ukuran 25x25 yang dibangkitkan dari


bilangan acak berdistribusi uniform dengan interval ( 0, 1 ).
Penggunaan function det diperoleh
flops(0)
det(A)
ans =
-0.1867
flops
ans =
10100

sebagai perbandingannya, dihitung jumlah flops dengan


menggunakan function mydet dan hasilnya adalah sebagai
berikut :
mydet(A)
ans =
-0.1867
flops
ans =
223350

Matriks adjoint atau disingkat adj(A) dari matriks A juga hal


yang menarik dalam aljabar linear. Dan functionnya dapat
dituliskan sebagai berikut :
function B = adj(A)
% Adjoint matrix B of the square matrix A.
[m,n] = size(A);
if m ~= n
error('Matrix must be square')

76

Judul Buku

end
B = [];
for k = 1:n
for l=1:n
B = [B;cofact(A,k,l)];
end
end
B = reshape(B,n,n);

Matriks adjoint dan invers matriks memenuhi persamaan :


A-1 = adj(A)/det(A)
Karena formula ini juga mempunyai kompleksitas
perhitungan yang tinggi, maka formula tersebut tidak
disarankan untuk digunakan dalam menghitung invers
matriks.
5.2. Operasi Matriks
Berikut ini adalah operasi-operasi matriks
sederhana yaitu penjumlahan, pengurangan dan perkalian
matriks.
a. Penjumlahan dan pengurangan

Jika diketahui dua buah matrika A dan B, maka kedua matriks


tersebut dapat dijumlahkan atau dikurangkan jika mempunyai
ukuran yang sama atau berdimensi sama.
Contoh 1 :
2

Jika diketahui A = 4

3
5

1
B =
2

0
3

Pemrograman Linier dengan MATLAB

77

Dengan menggunakan MATLAB maka kedua matrik


tersebut dapat dioperasikan untuk operasi penjumlahan
dan pengurangan yaitu :
A=[2 3;4 5;6 7]
A =
2

B=[1 0;2 3;6 7]


B =
1

C=A+B
C =
3

12

14

D=A-B
D =
1

78

Judul Buku

Contoh 2 :
Jika diketahui vektor x adalah
5

x =
4 dan y merupakan mengurangi 1 dari setiap

elemen vektor x, y=x-1, maka dengan MATLAB hal di atas


dapat dikerjakan sebagai berikut :
x=[5;4;6]
x =
5
4
6
y=x-1
y =
4
3
5

b. Perkalian Matriks
1. Perkalian Matriks dengan skalar
Jika A adalah suatu matriks dan c adalah suatu skalar
maka hasil kali cA adalah matriks yang diperoleh
dengan mengalikan masing-masing entri dari A oleh c.
Contoh :
2
A =
4

3
5

dan c=8,

Pemrograman Linier dengan MATLAB

79

maka diperoleh hasilnya dengan MATLAB :


A=[2 3;4 5;6 7]
A =
2

c=8
c =
8
K=c*A
K =
16

24

32

40

48

56

2. Perkalian Matriks dengan Matriks


Jika A adalah Matriks dengan ukuran m x r dan B
adalah matriks r x n, maka hasil kali AB adalah
matriks m x n. Dengan kata lain dua matriks ini
dapat dikalikan jika ukuran kolom matriks A sama
dengan baris matriks B. Perkalian Matriks dalam
MATLAB di notasikan dengan *..
Contoh 1:
Jika Matriks A berukuran 2x3 dan Matriks B adalah
3x4 maka akan diperoleh hasilnya matriks C
dengan ukuran 2x4
A=[1 2 4;2 6 0]
A =
1

80

Judul Buku

B=[4 1 4 3;0 -1 3 1;2 7 5 2]


B =
4

-1

12

27

30

13

-4

26

12

C=A*B
C =

Contoh 2.
P=A'
P =
1

B=[4 1 4 3;0 -1 3 1;2 7 5 2]


B =
4

-1

D=P*B

Pemrograman Linier dengan MATLAB

81

??? Error using ==> *


Inner matrix dimensions must agree.

Pesan di atas dapat dijelaskan bahwa karena


kedua matriks tersebit yaitu matriks P an B
berbeda ukuran/dimensinya sehingga tidak dapat
dilakukan operasi perkalian terhadapnya.
c. Penggunaan Operator \ untuk Pembagian Matriks
Adalah mudah untuk menyelesaikan persamaan ax=b
dengan a dan b adalah suatu konstanta skalar dan x adalah
suatu variabel yang tidak diketahui. Jika a dan b diketahui
maka dapat dihitung x = b/a.
Namun jika diketahui persamaan matriks
Ax=b
Dimana A adalah matriks , dan ingin didapatkan nilai x
dengan x dan b adalah vektor. Secara komputasi,
permasalahan ini agak sulit dan dalam MATLAB kasus seperti
ini dapat diselesiakan dengan menjalankan perintah :
x=A\b
Pernyataan di atas menggunkan operator pembagian \ pada
MATLAB dan dapat digunakan untuk menyelesaikan Sistem
Persamaan Liner (SPL).
Pembahasan mengenai cara penyelesaian masalah SPL akan
di bahas pada Bab selanjutnya.
d. Manipulasi Elemen-elemen Matriks.
Di dalam MATLAB elemen-elemen matriks dapat
dimanipulasi secara individu atau dalam satu blok. Sebagai
contoh :

82

Judul Buku

X(1,3)=C(4,5)+V(9,1);
a(1)=b(1)+d(1)
atau
C(i,j+1)=D(i,j+1) + E(i,j+1) adalah pernyataan-pernyataan
yang benar yang berhubungan dengan elemen matriks. Baris
dan kolom dapat dimanipulasikan sebagai suatu entitas yang
lengkap. Jadi A(:,3), A(5,:). Menunjukkan kolom ke 3 dan baris
ke 5 dari matriks A.
Supaya lebih jelasnya tentang
manipulasi yang dimaksud, dapat dilihat contoh berikut ini :
Diketahui matriks a :
a=[2 3 4 5 6;-4 -5 -6 -7 -8;3 5 7 9 1;4 6 8 10 12;
-2 -3 -4 -5 -6]
a =
2

-4

-5

-6

-7

-8

10

12

-2

-3

-4

-5

-6

v=[1 3 5];
b=a(v,2)
b =
3
5
-3

b merupakan susunan elemen dari baris pertama, ketiga dan kelima


dari kolom kedua matriks a.
c=a(v,:)
c =
2

Pemrograman Linier dengan MATLAB

83

-2

-3

-4

-5

-6

c adalah susunan baris pertama ketiga dan kelima.


d=zero(3)
d=zeros(3)
d =
0

d(:,1)=a(v,2)
d =
3

-3

dari hasil di atas dapat dilihat bahwa matriks d adalah


matriks 0 dengan ukuran 3x3 dengan kolom pertama
digantikan oleh elemen-elemen kolom ke dua dari matriks
a.
e=a(1:2,4:5)
e =
5

-7

-8

e merupakan susunan elemen-elemen dari baris pertama


dan kedua dan kolom keempat dan lima dari matriks a.
e. Operasi-operasi antar elemen
Operasi elemen per elemen berbeda dengan operasi
standar matriks tetapi operasi ini akan sangat

84

Judul Buku

berguna.Dot (.) adalah tanda yang biasa digunakan untuk


operasi-operasi tersebut. Sebagai contoh : x.^y, x.*y dan
x.\y. Jika pada pernyataan ini x dan y adalah suatu matriks
atau vektor, maka elemen-elemen dari x dikerjakan untuk
pangkat, perkalian dan pembagian dengan elemenelemen y yang sesuai/berhubungan posisinya dan
menurut operator yang akan digunakan. Untuk operasi ini
pengerjaan matriks atau vektor harus menggunakan
ukuran yang sama. Sebagai catatan bahwa bentuk ini
tidak digunakan untuk operasi penjumlahan dan
pembagian, karena kedua operasi tersebut adalah sudah
merupakan operasi elemen per elemen.
Untuk lebih jelasnya dapat dilihat beberapa contoh
berikut ini :
P=[1 2;3 4]
P =
1

Q=[5 6;7 8]
Q =
5

P*Q
ans =
19

22

43

50

dapat dilihat bahwa hasil perkalian di atas merupakan hasil


perkalian dari matriks dengan operasi standar.
P.*Q

Pemrograman Linier dengan MATLAB

85

ans =
5

12

21

32

hasil di atas merupakan hasil perkalian elemen per


elemen dari matriks P dan Q.
P.^Q
ans =
1

64

2187

65536

hasil di atas menunjukkan setiap elemen-elemen matriks


P dipangkatkan dengan elemen-elemen yang sesuai/
berhubungan matriks Q,
P./Q
ans =
0.2000

0.3333

0.4286

0.5000

hasil tersebut merupakan pembagian elemen-elemen


yang bersesuaian dari P oleh Q, sedangkan jika operasi
berikut ini dieksekusi maka hasil yang diperoleh
merupakan kebalikan dari sebelumnya, yaitu elemenelemen matriks Q membagi P
P.\Q
ans =
5.0000

3.0000

2.3333

2.0000

86

Judul Buku

5.3 Vektor dalam Rn


Euclidean norm dari suatu vektor dihitung dalam
MATLAB dengan menggunakan function norm.
Misalkan :
a = -2:2
a =
-2 -1 0 1 2

maka norma dari a sama dengan


twon = norm(a)
twon =
3.1623

dengan setiap vektor tak nol dapat digabungkan menjadi


vector satuan yang paralel untuk vektor yang diketahui.
Sebgai contoh untuk vektor a dalam contoh terakhir vektor
satuannya adalah
unitv = a /twon
unitv =
-0.6325 -0.3162 0 0.3162 0.6325

sudut antara dua vektor a dan b mempunyai dimensi


yang sama dan dihitung dengan menggunkan rumus :
= arccos(a.b/||a|| ||b||),
dimana a.b perkalian titik a dan b, ||a|| adalah norm dari
vektor a dan arccos fungsi inverse kosinus.
Misalkan vektor
a didefinisikan sama seperti vektor
sebelumnya dan misalkan
b = (1:5)'
b =

Pemrograman Linier dengan MATLAB

87

1
2
3
4
5

maka
angle = acos((a*b)/(norm(a)*norm(b)))
angle =
1.1303

Konsep cross product dapat digeneralisasikan dengan


mudah untuk n -1 vektor n-dimensi dalam ruang Euclidean
Rn. Function crossprod menyediakan generalisasi dari
function cross dari MATLAB.
function cp = crossprod(A)
% Cross product cp of a set of vectors that are stored in
columns of A.
[n, m] = size(A);
if n ~= m+1
error('Number of columns of A must be one less than the
number of
rows')
end
if rank(A) < min(m,n)
cp = zeros(n,1);
else
C = [ones(n,1) A]';
cp = zeros(n,1);

88

Judul Buku

for j=1:n
cp(j) = cofact(C,1,j);
end
end

Misalkan
A = [1 -2 3; 4 5 6; 7 8 9; 1 0 1]
A =
1 -2 3
4 5 6
7 8 9
1 0 1

perkalian silang vektor kolom A adalah


cp = crossprod(A)
cp =
-6
20
-14
24

Vektor cp adalah orthogonal terhadap kolom dalam ruang


matriks A. Untuk membuktikannya adalah dengan
menghitung perkalian vektor-matriks :
cp'*A
ans =
0 0 0

Pemrograman Linier dengan MATLAB

89

Bab 6
6 SISTEM PERSAMAAN LINEAR
DAN NILAI EIGEN

90

Judul Buku

6.1 Sistem Persamaan Linear (SPL)


Suatu
himpunan
berhingga
dari
persamaanpersamaan linear dalam peubah-peubah x1, x2, , xn
dinamakan sistem persamaan linear atau sistem linear. Suatu
urutan bilangan-bilangan s1, s2, , sn dinamakan
pemecahan dari sistem tersebut jika x1 = s1 , x2 = s2 , ,
xn = sn adalah pemecahan dari masing-masing persamaan
pada sistem tersebut. Sebuah sistem sebarang yang terdiri
dari m persamaan linear dengan n bilangan yang tidak
diketahui :
a11 x1 + a12 x2 + + a1n xn = b1
a21 x1 + a22 x2 + + a2n xn = b2
...
.
am1 x1 + am2 x2 + + amn xn = bm

Jika bi=0 maka SPL di atas dinamakan dengan SPL


homogen dan jika bi 0 maka SPL nya adalah SPL non homogen.
Suatu SPL non homogen mungkin konsisten dan
mempunyai satu atau tak hingga banyaknya penyelesaian atau bisa
juga tidak konsisten yaitu tidak memiliki penyelesaian.
Jika SPL di atas dibuat susunannya dalam bentuk matriks
maka dapat dituliskan : misalkan matriks-matriks tersebut berturutturut A, X dan B :
a11
a
21
.
.

.
a m1

a12
a 22
.
.
.
am2

... a1n x1 b1
... a 2 n x 2 b2
.
. . .
=
.
. . .

.
. . .
... a mn x n bn

Pemrograman Linier dengan MATLAB

91

maka sistem m persamaan asli dalam n bilangan tak diketahui telah


digantikan oleh persamaan matriks tunggal :
AX=B
Dalam MATLAB perkalian matriks dilambangkan dengan
*. Persamaan di atas mempunyai makna bahwa perkalian matriks
antara matriks A dengan vektor x sama dengan vektor b. Konsisten
atau tidak konsistennya persamaan di atas merupakan hal yang
mendasar dalam aljabar linear. Jika konsisten berarati mempunyai
penyelesaian dan tentunya ada beberapa metode untuk menemukan
penyelesaian tersebut diantaranya : Eliminasi Gauss, faktorisasi LU
atau penggunaan langsung dari A-1, atau dengan aturan Cramer.
Secara analitis penyelesaiannya ditulis sebagai x= A-1.b. dan
menegenai bahasan tentang cara analisis atau numerik dalam
aljabar linera tidak akan dibahas dalam tutorial ini, akan tetapi
dalam bahasan ini akan ditunjukkan bagaimana MATLAB dapat
digunakan untuk menyelesaikan permasalahan tersebut.
Ada beberapa konsep penting yang berhubungan dengan
persamaan linear
dan penyelesaiannya. Misalkan A adalah
suatu matriks dengan ukuran nxn.
Jika Ax=b konsisten dan mempunyai selesaian yang unik
maka :
Ax = 0 hanya mempunyai solusi trivial x=0,.
A adalah matriks non sigular dan det(A) 0
Bentuk eselon baris tereduksi (RREF) dari A adalah
matriks identitas
A mempunyai sebanyak n baris dan kolom yang
independen
A mempunyai full rank yaitu rank (A)=n.
Tetapi jika Ax=b tidak konsisten atau konsisten tetapi
dengan mempunyai selesaian lebih dari satu maka :
Ax = 0 hanya mempunyai lebih dari satu solusi.

92

Judul Buku

A adalah matriks sigular dan det(A) =0


Bentuk eselon baris tereduksi (RREF) dari A adalah
terdiri dari paling sedikit satu barisnya adalah 0 (zero)
A mempunyai baris dan kolom yang dependen
A mempunyai rank (A)<n.
Untuk mendapatkan penyelesaian dari SPL dengan
menggunakan MATLAB, yang pertama dilakukan adalah
memasukkan A dan b. Cara tersebut adalah seperti yang
telah diuraikan pada Bab 5 sebelumnya.
Jika diketahui Sistem persamaan linear berikut ini :
3x1 + 2 x2 +3 x3 = 36
4x1 + 5 x2 + 7x3 =40
-2x1 + 8 x2 + 0x3 = 70
maka persamaan tersebut di atas dapat ditulis ke dalam
bentuk matriks sebagai berikut :
3
A =
4

3
7
,
0

2
5
8

36

b =
40

70

dan dengan menggunakan MATLAB maka SPL di atas


dapat diselesaikan dengan dua cara yang salah satunya
adalah dengan menghitung x=A-1.b. dan hasilnya seperti
yang ditunjukkan berikut ini :
A=[3 2 3;4 5 7;-2 8 0]
A =
3

-2

b=[36;40;70]
b =

Pemrograman Linier dengan MATLAB

93

36
40
70
det(A)
ans =
-70
x=inv(A)*b
x =
16.0857
12.7714
-12.6000

det(A) di atas merupakan fungsi untuk menghitungan


determinan dari A dan inv(A) merupakan fungsi untuk
menghitung A-1.
dari hasil tersebut diatas
x2=12.7714 dan x3=-12.6000

diperoleh

x1=16.0857,

Cara lain yang lebih disukai untuk menyelesaikan


persamaan SPL adalah dengan menggunakan operator
pembagian kiri matriks yaitu :
x=A\b
x =
16.0857
12.7714
-12.6000

94

Judul Buku

Persamaan
ini
menggunakan
pendekatan
faktorisasi LU dan melambangkan solusi sebagai
pembagian kiri A ke B. Operator pembagian kiri \ tidak
didahului oleh titik karena merupakan operasi matriks.
Cara yang ke dua ini lebih disukai karena hanya
memerlukan sedikit perkalian dan pembagian, sehingga
lebih cepat. Selain itu jika masalah yang didapatkan lebih
besar maka hasil yang diperoleh lebih akurat.

6.2 Operator MATLAB \ dan / untuk


menyelesaikan Ax=b.
Jika jumlah persamaan dengan jumlah variabel
berbeda, biasanya tidak terdapat penyelesaian yang unik.
Dengan MATLAB jika semua persamaan yang tidak perlu
telah dibuang dan disana terdapat lebih banyak
persamaan daripada variabel, maka kasus tersebut adalah
kasus berlebihan.
Penggunaan Operator \ dan / merupakan operator
matriks untuk pembagian dan mempunyai pengaruh yang
sama. Jadi untuk menyelesaikan Ax=b di MATLAB dapat
ditulis dengan salah satunya yaitu A\b atau A/b. Dengan
menggunakan operator tersebut dapat memperkecil error
kuadrat dalam Ax=b.
Berikut ini adalah beberapa contoh penyelesaian
dari Ax=b dengan menggunakan operator A\b.
Contoh 2.
Diketahui SPL :
x1 + x2 = 1.98
2.05x1 - x2 =0.95
3.06x1 + x2 =3.98
-1.02x1 + 2x2 = 0.92

Pemrograman Linier dengan MATLAB

95

4.08x1 - x2 =2.90
SPL di atas adalah suatu persamaan yang inconsisten,
sehingga untuk menyelesaikan
sistem ini digunakan
script MATLAB berikut :
a=[1 1;2.05 -1;3.06 1;-1.02 2;4.08 -1]
b=[1.98;0.95;3.98;0.92;2.90]
x=a\b

%menghitung penyelesaian kuadrat terkecil

r=(a*x-b)' %residu ini mempunyai normal terkecil


jika script di atas dijalankan maka diperoleh
x =
0.9631
0.9885
r =
-0.0284

0.0358

-0.0444

0.0747

0.0409

Jika terdapat lebih sedikit persamaan daripada


variabel maka kasus ini dinamakan kasus kekurangan,
dan terdapat penyelesaian yang tak terbatas. Penggunaan
operator pembagian akan menghasilkan penyelesaian
dengan jumlah nol terbanyak dari elemen-elemen x.
Alternatifnya adalah : hitung x=pinv(A)*b memeberikan
penyelesaian denagn panjang atau normal x lebih kecil
dari semua penyelesaian lain yang mungkin. Penyelesaian
ini didasarkan pada pseudoinverse.
Dapat dilihat contohnya :
Contih 2. Misalkan suatu sistem persamaan :
x1 + 2 x2 +3 x3 = 1
-4x1 + 2 x2 -3x3 =3
dengan menggunakan MATLAB diperoleh :

96

Judul Buku

a=[1 2 3;-4 2 -3]


a =
1

-4

-3

b=[1;3]
b =
1
3
x=a\b %penyelesaian denngan jumlah nol terbanyak
x =
0
1.0000
-0.3333
xn=pinv(a)*b %menemukan penyelesaian normal minimum
xn =
-0.4554
0.6585
0.0462
norm(x)
elemen nol

%normal euclidan denagn elemen-

ans =
1.0541
norm(xn)
%penyelesaian normal minimum mempunyai
normal lebih kecil
ans =
0.8019

Pemrograman Linier dengan MATLAB

97

6.3 Nilai Eigen dan Vektor Eigen


Jika A adalah matriks nxn maka vektor taknol x
di dalam Rn dinamakan vektor eigen (eigen vektor)
dari A jika Ax adalah kelipatan skalar dari x yaitu :
Ax=x untuk suatu skalar . Skalar dinamakan nilai
eigen(eigen value) dari A dan x dikatakan vektor
eigen yang bersesuaian dengan .
Pada MATLAB command untuk nilai eigen
tersebut adalah eig(A) yang menyatakan nilai eigen
dalam vektor kolom.
Contoh 1:
B=[3 2;-1 0]
B =
3

-1

eig(B)
ans =
2
1

maka nilai eigen dari matriks di atas adalah =1 dan = 2

Contoh 2.
A=[0 1;-1 0]
A =
0

-1

eig(A)
ans =

98

Judul Buku

0 + 1.0000i
0 - 1.0000i

karena pemecahan-pemecahan persamaan di atas adalah


imaginer yaitu =i dan =-I dan karena dianggap bahwa
semua skalar adalah bilangan riil maka A tidak
mempunyai nilai eigen.
Contoh 3:
C=[0 1 0;0 0 1;4 -17 8]
C =
0

-17

eig(C)
ans =
0.2679
3.7321
4.0000

Nilai-nilai eigen dari matriks di atas adalah =0.2679, =


3.7321 dan = 4.
Function MATLAB mungkin juga menghasilkan satu
atau banyak pernyataan. Sebagai contoh, seperti yang
ditunjukan di atas eig(A) menghasilkan suatu vektor
kolom yang merupakan nilai eigen dari A. Sementara itu
pernytaan
[u, lambda]=eig(A)
menghasilkan nilai eigen dan eigen vektor. Elemenelemen diagonal dari matriks lambda adalah merupakan

Pemrograman Linier dengan MATLAB

99

eigen value dan kolom u merupakan eigen vektor


sedemikian hingga :
Au=uLambda
Sebagai contoh, Jika diketahui Matriks A :
0
A =
0

1
0
11

0
1

dari
statemen
[u,
lambda]=eig(A)
dengan
menggunakan command MATLAB diperoleh hasil sebagai
berikut :
A=[0 1 0;0 0 1;-6 -11 -6]
A =
0

-6

-11

-6

[u,lambda]=eig(A)
u =
-0.5774

0.2182

-0.1048

0.5774

-0.4364

0.3145

-0.5774

0.8729

-0.9435

-1.0000

-2.0000

-3.0000

lambda =

100

Judul Buku

6.4 Persamaan Karakteristik


Untuk mencari nilai eigen dari matriks A yang
berukuran nxn maka dapat dituliskan kembali Ax=x
sebagai Ax=Ix atau secar ekuivalen dapat dituliskan
( I - A) x = 0
supaya dapat menjadi nilai eigen maka harus ada
pemecahan tak nol dari persamaan tersebut. Persamaan
tersebut akan mempunyai pemecahan tak nol jika dan
hanya jika:
det( I - A) x = 0
dan ini dinamakan persamaan karakteristik.dan skalar
yang memenuhi persamaan ini adalah nilai eigen dari AS.
Bila diperluas lagi maka det( I - A) adalah polinom
yang dinamakan dengan polinom karakteristik dari A.
Dalam MATLAB persamaan karakteristik
matriks A dihitung dengan menggunakan function :

dari

P=poly(A).
Sebagai contoh, jika diketahui matriks A :
0
A =
0
6

1
0
11

0
1

dengan

poly(A) akan diperoleh hasil :


A=[0 1 0;0 0 1;-6 -11 -6]
A =
0

-6

-11

-6

p=poly(A)
p =

mengetikkan

command

Pemrograman Linier dengan MATLAB

1.0000

6.0000

11.0000

dari
hasil
tersebut
maka
karakteristiknya adalah :

101

6.0000

diperoleh

persamaan

x3 + 6x2 + 11x +6 = 0
dan akar-akar perasamaan dari perasamaan karakteristik
p=0 di atas dapat dihitung di MATLAB dengan
menggunakan function r=roots(p). dan hasilnya adalah :
r=roots(p)
r =
-3.0000
-2.0000
-1.0000

Jika akar-akar persamaan tersebut ingin dikembalikan


kebentuk asalnya/persamaannya kembali maka dapat
dilakukan dengan mengetikkan command q=poly(r) dan
diperoleh :
q=poly(r)
q =
1.0000

6.0000

11.0000

6.0000

6.5 Perkalian Polinomial.


Jika deketahui dua persamaan :
f1(x)=x2 20.6
f2(x)= x2 + 19.6x + 151.2
maka perkalian dari dua polinomial tersebut adalah
konvolusi dari tiap koefisien-koefisiennya. Perkalian
polinomial f1(x) dan f2(x) dengan menggunakan MATLAB

102

Judul Buku

dilakukan
dengan
mengetikkan
f1f2=conv(f1,f2), dan diperoleh hasilnya :

command

f1=[1 0 -20.6]
f1 =
1.0000

-20.6000

f2=[1 19.6 151.2]


f2 =
1.0000

19.6000

151.2000

f1f2=conv(f1,f2)
f1f2 =
1.0e+003 *
0.0010

0.0196

0.1306

-0.4038

-3.1147

maka dari hasil di atas dapat ditulisakan perkalian kedua


polinomial tersebut sebagai berikut :
f1f2(x)= x4 + 19.6 x3 + 13.06 x2- 403.8 x - 3114.7
Selain itu pembagian polinomial dengan MATLAB dapat
juga dilakukan
dengan menggunakan command
deconvolution.
Misalkan akan dibagi f1f2(x) oleh f1(x), maka dengan
function MATLAB dapat dituliskan : [q,r]=deconv(f1f2, f1),
dan diperoleh hasilnya :
[q,r]=deconv(f1f2,f1)
q =
1.0000

19.6000

151.2000

r =
0

dimana q adalah hasil bagi dan r adalah sisa hasil bagi.

Pemrograman Linier dengan MATLAB

103

Bab 7
7 PEMROGRAMAN ANALISA
NUMERIK DENGAN MATLAB
8
MATLAB mempunyai banyak tool yang sangat sesuai
untuk perhitungan numerik. Bab ini akan membahas tentang
menhitung akar-akar dari suatu persamaan, interpolasi,
penyelesaian diferensial dan integral secara numerik, dan
penyelesaian persamaan differensial biasa.

104

Judul Buku

Ada beberapa function MATLAB yang digunakan dalam


pembahasan bab ini yaitu :
Function

Keterangan

Abs

Harga Mutlak

Dblquad

Evaluasi integrall lipat dua

Erf

Fungsi kesalahan

feval

Mengesekusi
fungsi
adisebutkan oleh string

fzero

Menemukan pembuat no fungsi satu variabel

gamma

Fungsi gamma

inline

Konstruksi objek ONLINE

interp1

Interpolasi satu dimensi

interp2

Interpolasi dua dimensi

linspace

Membagi vektor secara liear

meshgri
d

Array X dan Y untuk plot grafik tiga dimensi

norm

Norma suatu matriks atau vektor

ode23

Penyelesaian persamaan diferensial non stiff,


metode low order

ode45

Penyelesaian persamaan diferensial non stiff,


metode medium order

ode113

Penyelesaian persamaan diferensial non stiff,


metode variabel order

ode15s

Penyelesaian persamaan diferensial non stiff,


metode variabel order

yang

namany

Pemrograman Linier dengan MATLAB

105

ode23s

Penyelesaian persamaan diferensial non stiff,


metode low-order

poly

Konversi akar-akar ke polinomial

polyval

Mengevaluasi polinomial

ppval

Mengevaluasi polinomial sepotong-sepotong

quad

Mengevaluasi
integral
numerik,metode low order

secara

quad8

Mengevaluasi
integral
numerik,metode high order

secara

rcond

Pengestimasi kondisi timabal balik

roots

Mendapatkan akar-akar polinomial

spline

Interpolasi data dengan kubik spline

surf

Menggambar permukaan warna 3 dimensi

unmkpp

Penyediaan secara detail tentang polinomial


sepotong-sepotong

7.1 Mencari Akar


Focus pembahasan dalam bagian ini adalah
tentang mancari akar dari suatu fungsi. Misalkan diketahui
f:Rn Rn , n 1, mendapatkan suatu vektor r sedemikian
hingga f( r)=0. Vektor r disebut akar atau pembuat nol dari f.
a. Penghitungan akar-akar dari polinomial univariat.
Polinomial direpresentasikan dalam MATLAB oleh
koefisen-koefisiennya dengan pangkat dari yang tertinggi ke
yang terendah. Misalkan diketahui polinomial pangkat tiga

106

Judul Buku

p(x) = 3x3 + 2x2 1, maka dalam MATLAB polinomial


tersebut direpresentasikan sebagai p=[3 0 2 1] dan untuk
mendapatka akar-akar persamaannya digunakan function
roots, dan diperoleh hasil sebagai berikut :
format long
r = roots(p)
r =
-1.00000000000000
0.16666666666667 + 0.55277079839257i
0.16666666666667 - 0.55277079839257i

untuk memeriksa tingkat kebenaran hasil yang diperoleh


maka dapat dilakukan dengan cara menggunakan function
polyval, dan hasilnya adalah :
err = polyval(p, r)
err =
1.0e-014 *
0.22204460492503
0 + 0.01110223024625i
0 - 0.01110223024625i

b. Perhitungan pembuat nol dari fingsi univariat


menggunakan function fzero pada MATLAB
Misalkan f adalah fungsi transenden dari R ke R.
Function fzero dari MATLAB menghitung pembuat nol dari
fungsi f
Sebagai contoh, misalkan f(x) = cos(x) x. langkah
yang pertama dilakukan adalah dengan mendefinisikan
fungsi y = f1(x) seperti berikut ini :
function y = f1(x)
% A univariate function with a simple zero.

Pemrograman Linier dengan MATLAB

107

y = cos(x) - x;

Untuk menghitung pembuat nol dengan


digunakan function fzero.

MATLAB maka

r = fzero('f1', 0.5)
r =
0.73908513321516

Untuk memeriksa error dari hasil perhitungan adalah dengan


menggunakan function feval :
err = feval('f1', r)
err =
0

Dalam kasus ini bila pembuat nolnya adalah dalam


bentuk interval maka dalam MATLAB untuk perhitungannnya
dapat dimasukkan 2 elemen vektor yang merupakan interval
awal. Contohnya dipilih interval [ 0 1]
r = fzero('f1', [0 1])
r =
0.73908513321516

7.2 Metode Newton Raphson untuk


Sistem Persamaan Non Linear.
Bagian ini akan membahas perhitungan mencari
pembuat nol dari f:Rn Rn , n 1, dengan mengasumsikan
bahwa turunan parsial orde pertama dari fungsi f adalah
kontinu pada domain terbuka. Metode yang akan dibahas
berikut ini adalah metode Newton-Raphson. Untuk
menggambarkan secara detail metode ini maka akan
diperkenalkan notasi-notasi dalam MATLAB untuk ini.
Dalma MATLAB untuk menggambarkan vektor maka f
ditulis dalam bentuk vektor kolom berikut f = [f1; ;fn],
dimana tiap fk adalah fungsi Rn ke R. Diketahui pendekatan

108

Judul Buku

awal x(0) R n dari r untuk metode ini dibangkitkan dari


barisan vektor {x(k)} menggunakan iterasi:
.

x(k+1) = x(k) Jf (x(k))-1 f(x(k)),

k = 0, 1,

dengan Jf adalah matriks Jacobian dari f. Sebagai contoh Jf (x)


=[fi(x)/ xj], 1 i, jn. Berikut ini adalah m-file dari fungsi
untuk menghitung pembuat nol dari sistem persamaan non
linear dan fungsinya adalah Function NR.
function [r, niter] = NR(f, J, x0, tol, rerror, maxiter)
% Zero r of the nonlinear system of equations f(x) = 0.
% Here J is the Jacobian matrix of f and x0 is the initial
% approximation of the zero r.
% Computations are interrupted either if the norm of
% f at current approximation is less (in magnitude)
% than the number tol,or if the relative error of two
% consecutive approximations is smaller than the prescribed
% accuracy rerror, or if the number of allowed iterations
% maxiter is attained.
% The second output parameter niter stands for the number
% of performed iterations.
Jc = rcond(feval(J,x0));
if Jc < 1e-10
error('Try a new initial approximation x0')
end
xold = x0(:);
xnew = xold - feval(J,xold)\feval(f,xold);
for k=1:maxiter
xold = xnew;
niter = k;
xnew = xold - feval(J,xold)\feval(f,xold);
if (norm(feval(f,xnew)) < tol) |...
tol|...

norm(xold-xnew,'inf')/norm(xnew,'inf')

<

Pemrograman Linier dengan MATLAB

109

(niter == maxiter)
break
end
end
r = xnew;

Berikut ini adalah sistem non linear


f1(x) = x1 + 2x2 2,
f2(x) = x12 + 4x22 4
mempunyai pembuat nol pasti r = [0 1]T dan r = [2 0]T .
Functions fun1 dan J1 mendefinisikan sistem persamaan
dan matriks Jacobian. M-file nya seperti berikut ini:
function z = fun1(x)
z = zeros(2,1);
z(1) = x(1) + 2*x(2) - 2;
z(2) = x(1)^2 + 4*x(2)^2 - 4;
function s = J1(x)
s = [1 2;2*x(1) 8*x(2)];

Misalkan
x0 = [0 0];

maka
[r, iter] = NR('fun1', 'J1', x0, eps, eps, 10)
??? Error using ==> nr
Try a new initial approximation x0

110

Judul Buku

Untuk x0 seperti yang dipilih di atas matriks Jacobian adalah


singular. Untuk itu dicoba nilai interval lainnya untuk r,
x0 = [1 0];
[r, niter] = NR('fun1', 'J1', x0, eps, eps, 10)
r =
2.00000000000000
-0.00000000000000
niter =
5

Contoh lainnya adalah diketahui sistem nonlinear


berikut :
f1(x) = x1 + x2 1
f2(x) = sin(x12 + x22) x1.
M-files untuk menghitung pembuat nolnya misalkan diberi
nama fun2 dan J2
function w = fun2(x);
w(1) = x(1) + x(2) - 1;
w(2) = sin(x(1)^2 + x(2)^2) - x(1);
w = w(:);
function s = J2(x)
s = [1 1;
2*x(1)*cos(x(1)^2
x(2)^2)];

x(2)^2)-1

dengan nilai awalnya adalah :


x0 = [0 1];

sehingga pembuat nol r diperoleh


[r, niter] = NR('fun2', 'J2', x0, eps, eps, 10)
r =

2*x(2)*cos(x(1)^2

Pemrograman Linier dengan MATLAB

111

0.48011911689839
0.51988088310161
niter =
5

bila nilai awalnya


x0 = [1 1];
[r, iter] = NR('fun2', 'J2', x0, eps, eps, 10)
r =
-0.85359545600207
1.85359545600207
iter =
10

memberikan penyelesaian lainnya. Nilai dari function fun2


untuk menghitung pembuat nol r adalah
feval('fun2', r)
ans =
1.0e-015 *
0
-0.11102230246252

Implementasi
metode
klasik
lainnya
untung
menghitung pembuat nol dari persamaan skalar termasuk
metode fixed-point iteration, metode secant dan metode
Schroder akan dibahas pada akhir bahasan bab ini..

7.3 Interpolasi
Jika kita melakukan suatu penelitian terhadap n+1 titik
pengamatan maka akan diperoleh pasangan data (x0, y0), (x1,

112

Judul Buku

y1),, (xn, yn). Karena suatu kebetulan kita perlu mengetahui


nilai y untuk x1< x <, x2 yang kebetulan tidak diamati, maka
tentu akan timbul pertanyaan dari apa yang harus
dilakukan ?
Untuk menjawabnya maka kita harus melihat kembali
bahwa bila hubungan antara kedua variabel diketahui, maka
masalah ini mudah dipecahkan. Akan tetapi pada umumnya
hubungan tersebut tidak diketahui atau bilapun diketahui
hanya bentuk umumnya saja dimana koefisien-koefisien
tetap tetap tidak tidak diketahui. Dalam sistuasi semacam ini
maka bisanya langkah yang diambil adalah dengan
melakukan interpolasi. Ada banyak metode untuk melakukan
interpolasi ini diantaranya adalah :
1. Interpolasi polinom, dipakai bila hubungan
fungsional tidak diketahui dan jumlah data
pengamatan tidak banayak.
2. Interpolasi least square, bila hubungan fungsional
diketahui.
3. Interpolasi spline, bila hubungan fungsionalnya
tidak diketahui dan jumlah data pengamatan boleh
banyak maupun sedikit., yang alternatif-alternatifnya
juga ada dalam buku yang kami tulis di hal.105.
Kemudian seandainya anda mempunyai suatu fungsi
atau data dengan variabel bebas dan variabel terikat,
katakanlah ada variabel x sebagai variabel bebas dan y=f(x)
sebagai variabel terikat. Maka untuk menentukan interpolasi
suatu titik di MATLAB, anda dapat melakukannya dengan
menggunakan function yang telah ada di MATLAB yaitu
interp1 untuk interpolasi data satu dimensi, jika dua dimensi
menggunakan interp2.
Interpolasi fungsi juga merupakan salah satu
permasalahan klasik dalam analisa numerik. Permasalahan
interpolasi satu dimensi dirumuskan seperti berikut ini :
Diberikan sekumpulan n+1 titik {xk , yk}, 0kn,
dengan x0 < x1 < < xn, Mendapatkan fungsi f(x) grafik

Pemrograman Linier dengan MATLAB

113

interpolasi dari kumpulan titik data, sebagai contoh f(xk) =


yk, untuk k = 0, 1, , n.
Dalam bagian ini akan digunakan
polinomial aljabar dan spline functions.

interpolasi

fungsi

7.3.1 MATLAB function interp1


Bentuk umum dari function interp1 adalah yi =
interp1(x, y, xi, method), dimana vektor x dan y vektorvektor koordinat
x dan y dari titik-titik yang
diinterpolasi,masing-masing, xi adalah vektor titik hasil
evaluasi, misalnya, yi = f(xi) dan method adalah string
pilihan khusus dari metode interpolasi.
Metode-metode berikut ini bekerja dengan function interp1 :
1. Interpolasi tetangga terdekat (nearerst neighbor
interpolation), method = 'nearest'. mengahsilkan suatu
konstanta sepotong-sepotong lokal dari interpolant.
2. Interpolasi Linear, method = 'linear'. Menghasilkan
interpolant linear sepotong-sepotong.
3. Interpolasi splineCubic, method = 'spline'. Menghasilkan
interpolant spline cubic.
4. Interpolasi Cubic, method = 'cubic'.
polinomial kubik sepotong-sepotong.

Menghasilkan

Berikut ini adalah contoh untuk masalah ini, titik-titik


(xk, yk) = (k/5, sin(2xk)), k = 0, 1, , 5,
x = 0:pi/5:pi;
y = sin(2.*x);

diinterpolasi dengan menggunakan dua metode interpolasi


yaitu nearest dan cubic . Interpolan dievaluasi pada titiktitik berikut ini :
xi = 0:pi/100:pi;
yi = interp1(x, y, xi, nearest);

114

Judul Buku

Semua titik-titik interpolasi dari hasil interpolant tersebut


dapat ditampilkan dalam bentuk grafik dengan mengetikkan
perintah berikut pada command MATLAB
plot(x, y, o, xi, yi), title(Piecewise constant interpolant of y
=sin(2x))

yi = interp1(x, y, xi, 'cubic');


plot(x, y, 'o', xi, yi), title('Cubic interpolant of y = sin(2x)')

Pemrograman Linier dengan MATLAB

115

Contoh lainnya adalah misalkan ada dua vektor yang


merepresentasikan sensus dari tahun 1900 sampai dengan
1990 dan kaitannya dengan jumlah penduduk suatu
negara.dalam jutaan jiwa.
Dan katakanlah tahun dan jumlah penduduk sudah kita
inputkan ke MATLAB sebagai berikut :
t = 1900:10:1990;
p = [75.995 91.972
150.697 179.323

105.711
203.212

123.203 131.669...
226.505 249.633];

data yang kita inputkan tersebut adalah berinterval sepuluh


tahun, artinya pada tahun 1900 jumlah penduduk negara
tersebut adalah 75,995; pada tahun 1910 jumlah penduduk
negara tersebut adalah 91,972; pada tahun 1920 jumlah
penduduk negara tersebut adalah 105,771; dan seterusnya.
Suatu saat tentunya orang ingin mengetahui
berapakah jumlah penduduk pada tahun 1975. Jika dilihat
bahwa di pengamatan kita jumlah penduduk tahun 1975
tidak ada, untuk itu maka salah satu cara mengetahui
jumlahnya adalah dengan melakukan interpolasi, dan dengan

116

Judul Buku

matlab dapat dilakukan dengan menggunakan function


interp1, yang sintaksnya dapat dituliskan :
interp1(t,p,1975)
ans =
214.8585

diperoleh hasilnya bahwa jumlah penduduk negara tersebut


pada tahun 1975 adalah 214,8585
Selanjutnya jika ingin memplotkan grafiknya maka
dapat dilakukan dengan cara :
x = 1900:1:2000;
y = interp1(t,p,x,'spline');
plot(t,p,'o',x,y)

dan didapatkan :

7.3.2 Interpolation dengan Polinomial Aljabar


Asumsi sekarang adalah bahwa fungsi interpolasi
adalah polinomial aljabar pn(x) berderajat n, dimana n =
jumlah titik interpolasi 1. dan diketahui bahwa interpolasi
polinomial pn selalu ada dan unik. Untuk menghitung
interpolasi polinomial dapat digunakan salah satu metode
berikut ini Vandermonde's method atau bentuk Lagrange
atau bentuk Newton's atau Aitken's method.

Pemrograman Linier dengan MATLAB

117

Metode Newton's akan digambarkan secara jelas


berikut ini. Pertama dimulai dengan menuliskan p(x) sebagai
:
pn(x) =a0 +a1(x x0) + a2(x x0)(x x1) + + an(x x0)
(x x1) (x xn-1)
koefisien-koefisien a0, a1, , an disebut divided differences
dan dapat dihitung nilainya. Persamaan pn(x) tersebut
dinamakan bentuk Newton's dari polinomial interpolasi. Orde
ke k divided difference berdasarkan titik-titik x0, xk,
ditunjukkan dengan [x0, , xk], yang masing-masing
didefinisikan sebagai
[xm] = ym jika k = 0
[x0, , xk] = ([x1, , xk] [x0, , xk-1])/(xk
x0) jika k > 0.
Koefisien-koefisien {ak} dalam pn(x) dan divided differences
dihubungkan dengan cara berikut ini:
ak = [x0, , xk].
Function Newtonpol berikut ini adalah untuk
mengevaluasi suatu interpolasi polinomial pada titik-titik
yang disediakan pengguna.
function [yi, a] = Newtonpol(x, y, xi)
% Values yi of the interpolating polynomial at the points xi.
% Coordinates of the points of interpolation are stored in
% vectors x and y. Horner's method is used to evaluate
% a polynomial. Second output parameter a holds coeeficients
% of the interpolating polynomial in Newton's form.
a = divdiff(x, y);
n = length(a);
val = a(n);
for m = n-1:-1:1
val = (xi - x(m)).*val + a(m);
end

118

Judul Buku

yi = val(:);
function a = divdiff(x, y)
% Divided differences based on points stored in arrays x and y.
n = length(x);
for k=1:n-1
y(k+1:n) = (y(k+1:n) - y(k))./(x(k+1:n) - x(k));
end
a = y(:);

Untuk data dari contoh sebelumnya maka akan dihitung


interpolasi polinomial dengan menggunkan bentuk Newton's
pada derajat terbesar adalah 5, dengan menggunakan
function Newtonpol. Selain itu juga akan ditampilkan grafik
dari titik-tik interpolasi tersebut
[yi, a] = Newtonpol(x, y, xi);
plot(x, y, 'o', xi, yi), title('Quintic interpolant of y = sin(2x)')

Proses interpolasi tidak selalu menghasilkan suatu


barisan
polinomial
yang
konvergen
untuk
fungsi
interpolasinya

Pemrograman Linier dengan MATLAB

119

Contoh
terkenal
fungsi
divergence,
harus
menggunakan Runge, untuk menggambarkan fenomena ini,
misalkan g(x) = 1/(1 + x2), -5 x5, menjadi fungsi yang
diinterpolasi pada n + 1 dengan jarak titik-titik xk = -5 +
10k/n, k = 0, 1, , n.
Script file showint berikut ini akan menghasilkan grafik
keduanya, fungsi g(x) dan interpolasi polinomial pn(x).
% Script showint.m
% Plot of the function 1/(1 + x^2) and its
% interpolating polynomial of degree n.
m = input('Enter number of interpolating polynomials ');
for k=1:m
n = input('Enter degree of the interpolating polynomial ');
hold on
x = linspace(-5,5,n+1);
y = 1./(1 + x.*x);
z = linspace(-5.5,5.5);
t = 1./(1 + z.^2);
h1_line = plot(z,t,'-.');
set(h1_line, 'LineWidth',1.25)
t = Newtonpol(x,y,z);
h2_line = plot(z,t,'r');
set(h2_line,'LineWidth',1.3,'Color',[0 0 0])
axis([-5.5 5.5 -.5 1])
title(sprintf('Example of divergence (n = %2.0f)',n))
xlabel('x')
ylabel('y')
legend('y = 1/(1+x^2)','interpolant')
hold off

120

Judul Buku

end

dengan mengetikkan showint di dalam Command


Window maka prompt akan mmeinta untuk megisikan nilai
parameter m= merupakan jumlah polinomial interpolasi
yang diinginkan untuk dibangkitkan, dan juga harus diisikan
nilai derajat interpolasi polinomial. Dalam contoh ini di ambil
m = 1 dan n = 9. Hasilnya adalah seperti gambar di bawah
ini :

Gambar tersebut menunjukkan bahwa titik-titik


divergennya seperti yang ditunjukkan garis yang berwarna
biru pada interval interpolasinya [-5, 5].
Pembahasan terakhir bagian ini adalah permasalahan
two-point Hermite interpolaion pada cubic polynomials.
Asumsikan bahwa fungsi y= g(x) terdiferensial pada interval
[ a, b]. Diperoleh suatu cubic polynomial p3(x) yang
memenuhi kondisi interpolatory berikut ini :
p3(a) = g(a), p3(b) = g(b), p3'(a) = g'(a), p3' (b) =
g'(b)
Interpolasi polynomial p3(x) selalu ada dan direpresentasikan
seperti berikut ini :
p3(x) = (1 + 2t)(1 - t)2g(a) + (3 - 2t)t2g(b) + h[t(1 t)2g'(a) + t2(t - 1)g'(b)] ,

Pemrograman Linier dengan MATLAB

121

dengan t = (x - a)/(b - a) dan h = b a.


Function Hermpol mengevaluasi Hermite interpolant
pada titik-titik disimpan dalam vektor xi.
function yi = Hermpol(ga, gb, dga, dgb, a, b, xi)
% Two-point
interpolation

cubic

Hermite

interpolant.

Points

of

% are a and b. Values of the interpolant and its first


order
% derivatives at a and b are equal to ga, gb, dga and
dgb,
% respectively.
% Vector yi holds values of the interpolant at the points
xi.
h = b a;
t = (xi - a)./h;
t1 = 1 - t;
t2 = t1.*t1;
yi = (1 + 2*t).*t2*ga + (3 - 2*t).*(t.*t)*gb +
h.*(t.*t2*dga + t.^2.**(t - 1)*dgb);

dalam contoh ini akan diinterpolasi fungsi g(x) =


sin(x) menggunakan a two-point cubic Hermite interpolant
dengan a = 0 dan b = /2.
xi = linspace(0, pi/2);
yi = Hermpol(0, 1, 1, 0, 0, pi/2, xi);
zi = yi sin(xi);
plot(xi, zi), title('Error in interpolation of sin(x) by a two-point
cubic Hermite polynomial')

dan diperoleh hasilnya :

122

Judul Buku

Selanjutnya jika dalam interpolasi kita menggunakan


metode lagrange,yang salah kegunaan interpolasi ini adalah
untuk mencari bentuk polinomial dari data yang diberikan,
maka sebagai ilustrasinya dapat dilihat contoh kasus berikut
ini :
Aggaplah kita mempunyai sekumpulan data asli.
Dalam hal ini kita ingin mendapatkan polinomial fittingnya
(kecocokan
polinomialnya)
dengan
menggunakan
interpolasi Langrange :
X

-2

-1

Y= f(x)

-39

-15

-5

-3

39

Dari tabel di atas terlihat ada 5 pasangan (x,y). Untuk


mencari polinomial fittingnya maka di MATLAB bisa kita
gunakan function polyfit, yang dapat mengahasilkan
polinomial orde 4 dengan menggunakan interpolasi lagrange.
Dan untuk membandingkian hasilnya grafiknya dapat juga
kita gunakan interp1 yang kemungkinan memberikan kurva
yang lebih mulus untuk pencocokan kurvanya yaitu dengan
menggunakan piecewise cubic Hermite interpolation.

Pemrograman Linier dengan MATLAB

123

Permasalahan di atas dapat diselesaikan sebagai berikut :


Kita namakan function ini dengan nama M-filenya
L_interperlation.m dan denan plot pencocokan kurvanya
seperti berikut ini :
% Lagrange interpolating polynomial fitting
x=[-2 -1 0 1 2];
y=[-9 -15 -5 -3 39];
[m n]=size(x)
p=polyfit(x,y,n-1)
x1=linspace(-2,2,50);
y1=polyval(p,x1);
y2=interp1(x,y,x1,'cubic');
plot(x,y,'o',x1,y1,'-',x1,y2,'.');
xlabel('x'),ylabel('y=f(x)')
title ('Lagrange
interpolation')

and

Piecewise

cubic

Hermite

jika function tersebut dijalan di MATLAB


>> L_interpolation
p =
3.0000 2.0000 -7.0000 4.0000 -5.0000

hasil tersebut bermakna bahwa polinomial Orde 4 yang


dihasilkan adalah :
f(x)= 3x4 + 2x3 - 7x2 + 4x 5
dan kurva yang dihasilkan dapat dilihat seperti berikut ini,
dimana titik dengan bulatan yang berwarba biru
menunjukkan titik asli/nilai aslinya. Garis pada menunjukkan
polinomial orde 4 dengan interpolasi lagrange dan titik-titik
yang berwarna orange menunjjkan pencocokan kurva
dengan piecewise cubic Hermite interpolation.

124

Judul Buku

7.4 Interpolasi dua dimensi


Permasalahan interpolasi yang akan didiskusikan
dalam bagian ini adalah interpolasi dua dimensi yang dapat
diformulasikan seperti berikut ini :
Diberikan grid segiempat {xk, yl} dan sekumpulan
bilangan zkl, 1 k m, 1 l n, mendapatkan suatu fungsi
bivariate z = f(x, y) yang menginterpolasi data-data,
sebagai contoh f(xk. yl) = zkl untuk semua nilai k dan l.
Titik-titik grid tersebut harus diurutkan secara
monotonik, sebagai contoh x1 < x2 < < xm dengan urutan
yang sama dari ordinat y.
MATLAB menyediakan fungsi built-in untuk interpolasi
ini yaitu function zi = interp2(x, y, z, xi, yi, 'method')
yang membangkitkan bivariate interpolant pada grid
segiempat dan mengevaluasinya pada titik-titik yang
ditetapkan dalam array xi dan yi.
Input parameter 'method' merupakan pilihan dan
menentukan dalam metode interpolasi. Metode-metode yang
tersedia adalah :
1. 'nearest' ineterpolasi tetangga terdekat
2. 'linear' interpolasi bilinear

Pemrograman Linier dengan MATLAB

3.

125

'cubic' interpolasi bicubic

4. 'spline' interpolais spline


dalam contoh berikut jika fungsi bivariate adalah z =
sin(x2 + y2) diinterpolasi pada interval 1 x1, -1 y1
menggunakan metode 'linear' dan the 'cubic' methods
hasilnya ditunjukkan pada gambar berikut ini
[x, y] = meshgrid(-1:.25:1);
z = sin(x.^2 + y.^2);
[xi, yi] = meshgrid(-1:.05:1);
zi = interp2(x, y, z, xi, yi, 'linear');
surf(xi, yi, zi), title('Bilinear interpolant to sin(x^2 + y^2)')

Dengan bicubic interpolant diperoleh gambar sama


zi = interp2(x, y, z, xi, yi, 'cubic');

126

Judul Buku

7.5 Integral dan Diferensial


Numerik
Permasalahan klasik integrasi numerik adalah seperti
yang diformulasikan berikut ini:
Diberikan suatu fungsi kontinu f(x), a x b, untuk
mendapat koefisien {wk} and nodes {xk}, 1 k n,
sehingga formula quadraturenya adalah :
b

f ( x)dx = wk f ( x k )
1

Untuk rata-rata jarak nodes {xk} hasil dari rumus


quadrature disebut dengan formula Newton-Cotes. Jika
koefisien {wk} diasumsikan semua sama, maka formula
quadrature disebut dengan formula Chebyshev quadrature.
Dan jika kedua-duanya yaitu koefisien {wk} dan nodes {xk}
dihitung dengan persyaratan formula diatas adalah exact
untuk polynomial pada derajat tertinggi, maka formula yang
dihasilkan dinamakan Gauss quadrature.

Pemrograman Linier dengan MATLAB

127

7.5.1 Integrasi Numerik menggunakan functions quad


dan quad8 pada MATLAB
Dua function MATLAB yaitu functions quad('f ', a, b,
tol, trace, p1, p2, ) dan quad8('f ', a, b, tol, trace, p1,
p2, ) dirancang untuk untuk integrasi numerik dari fungsi
univariate. Input parameter 'f' adalah string yang berisi
nama fungsi yang akan diintegralkan dari a ke b. Input
parameter tol adalah pilihan dan tetapan yang dipilih
pengguna untuk kesalahan relatif dari perhitungan integral.
Parameter tol dapat juga kesalahan relatif atau kesalahan
mutlak yang diberikan pengguna. Dalam kasus ini vektor dua
dimensi tol = [rel_tol, abs_tol] harus dimasukkan.
Selanjutnya parameter trace adalah pilihan dan traces
evaluasi fungsi dengan plot titik dari suatu integral. Untuk
menggunakan nilai default bagi tol atau trace harus nilainya
dalam matriks kosong [ ]. Parameter-parameter p1, p2,
juga suatu pilihan dan parameter-parameter tersebut
dimasukkan hanya jika pengintegralannya tergantung pada
p1, p2, .
Untuk contohnya
sederhana yaitu ;

f ( x) =

diambil

suatu

fungsi

rasional

a + bx
1 + cx 2

function y = rfun(x, a, b, c)
% A simple rational function that depends on three
% parameters a, b and c.
y = (a + b.*x)./(1 + c.*x.^2);
y = y';

dintegralkan secara numerik dari 0 ke 1 menggunakan


functions quad dan quad8. Diasumsikan kesalahan relative
dan absolute disimpan dalam vektor tol
tol = [1e-5 1e-3];
format long

128

Judul Buku

[q, nfev] = quad('rfun', 0, 1, tol, [], 1, 2, 1)


q =
1.47856630183943
nfev =
9

dengan menggunakan function quad8 diperoleh :


[q8,nfev] = quad8('rfun', 0, 1, tol, [], 1, 2, 1)
q8 =
1.47854534395683
nfev =
33

output parameter yang kedua nfev memberikan suatu


informasi tentang jumlah dari fungsi evaluasi
yang
dibutuhkan dalam rangkaian perhitungan integral.
Nilai eksak dari integral adalah :
exact = log(2) + pi/4
exact =
1.47854534395739

kesalahan relatif dalam perhitungan aproksimasi q dan q8


adalah :
rel_errors = [abs(q exact)/exact; abs(q8 exact)/exact]
rel_errors =
1.0e-004 *
0.14174663036002
0.00000000380400

Pemrograman Linier dengan MATLAB

129

7.5.2 Formula quadrature Newton Cotes


Salah satu metode tertua untuk menghitung
pendekatan nilai integral tertentu pada interval [a, b] adalah
yang diajukan oleh Newton dan Cotes. Simpul-simpul dari
formula Newton Cotes dipilih untuk rata-rata space dalam
interval integrasi. Ada dua tipe formula Newton Cotes yaitu
formula terbuka dan formula tertutup. Dalam kasus pertama
titik akhir dari interval integrasi dimasukkan ke dalam
himpunan simpul sedangkan formula terbuka sebaliknya.
Bobot {wk} dihitung dengan syarat bahwa formula
quadrature adalah eksak untuk polynomials yang berderajat
paling tinggi.
Untuk formula Newton Cotes dari tipe tertutup,
simpul-simpul dari formula n titik didefinisikan sebagai
xk = a + (k 1)h, k = 1, 2, , n, where h = (b
a)/(n 1), n > 1.
Bobot dari formula quadrature dihitung dari kondisi dengan
persamaan berikut dipenuhi untuk monomial f(x) = 1, x,
xn - 1
b

f ( x)dx = wk f ( x k )
1

dan untuk pemrograman di MATLAB adalah seperti yang


ditunjukkan oleg m-file berikut ini :
function [s, w, x] = cNCqf(fun, a, b, n, varargin)
% Numerical approximation s of the definite integral of
% f(x). fun is a string containing the name of the
integrand f(x).
% Integration is over the interval [a, b].
% Method used:
% n-point closed Newton-Cotes quadrature formula.
% The weights and the nodes of the quadrature formula
% are stored in vectors w and x, respectively.

130

Judul Buku

if n < 2
error(' Number of nodes must be greater than 1')
end
x = (0:n-1)/(n-1);
f = 1./(1:n);
V = Vander(x);
V = rot90(V);
w = V\f';
w = (b-a)*w;
x = a + (b-a)*x;
x = x';
s = feval(fun,x,varargin{:});
s = w'*s;

Untuk kasus ini kesalahan fungsinya adalah Erf(x) , dimana :


Erf ( x) =

t 2

dt

akan diaproksimasi pada x = 1 menggunkanan formula


Newton Cotes quadrature tertutup dengan n = 2 (Aturan
Trapezoidal ), n = 3 (Aturan Simpson's ), dan n = 4 (Aturan
Boole's). Perhitungan integral dari integral sebelumnya
dievaluasi dengan menggunakan function exp2. berikut :
function w = exp2(x)
% The weight function w of the Gauss-Hermite quadrarure
formula.
w = exp(-x.^2);
approx_v = [];
for n =2:4

Pemrograman Linier dengan MATLAB

131

approx_v = [approx_v; (2/sqrt(pi))*cNCqf('exp2', 0, 1,


n)];
end
approx_v
approx_v =
0.77174333225805
0.84310283004298
0.84289057143172

Sebagai perbandingannya, dengan menggunakan


function built-in pada MATLAB's yaitu function erf diperoleh
aproksimasinya berikut ini dengan nilai fungsi kesalahan
pada x = 1
exact_v = erf(1)
exact_v =
0.84270079294971

7.4.3 Formula Quadratur Gauss


Golongan formula integrasi numerik ini dibangun
dengan syarat bahwa formula tersebut adalah aksak untuk
derajat paling tinggi. Formula Gauss diberikan oleh :
b

k =1

p( x) f ( x)dx = wk f ( x k )
dimana p(x) menyatakan fungsi bobot. Tipe memilih fungsi
bobot beserta dengan interval integrasi seperti berikut ini :
Bobot
p(x)

Interval [a,b]

Nama
Quadratur

[-1,1]

Gauss-Legendre

132

Judul Buku

1/ 1 x

[-1,1]

e-x

[0, )
(, -)

x 2

GaussChebyshev
Gauss Laquerre
Gauss Hermiet

Bentuk di atas dikenal dengan nama bobot formula Gauss,


semua positif dan simpul simpulnya adalah akar-akar dari
golongan polinomial yang ortogonal, dengan masing-masing
diketahui fungsi bobot p(x) nya.
Berikut ini function untuk perhitungan numerik dari
integral tertentu menggunakan formula quadratur Gauss
yaitu Gquad1 dan Gquad2.
function [s, w, x] = Gquad1(fun, a, b, n, type, varargin)
% Numerical integration using either the Gauss-Legendre (type =
'L')
% or the Gauss-Chebyshev (type = 'C') quadrature with n (n > 0)
nodes.
% fun is a string representing the name of the function that is
% integrated from a to b. For the Gauss - Chebyshev quadrature
% it is assumed that a = -1 and b = 1.
% The output parameters s, w, and x hold the computed
approximation
% of the integral, list of weights, and the list of nodes,
% respectively.
d = zeros(1,n-1);
if type == 'L'
k = 1:n-1;
d = k./(2*k - 1).*sqrt((2*k - 1)./(2*k + 1));
fc = 2;
J = diag(d,-1) + diag(d,1);
[u,v] = eig(J);
[x,j] = sort(diag(v));

Pemrograman Linier dengan MATLAB

133

w = (fc*u(1,:).^2)';
w = w(j)';
w = 0.5*(b - a)*w;
x = 0.5*((b - a)*x + a + b);
else
x = cos((2*(1:n) - (2*n + 1))*pi/(2*n))';
w(1:n) = pi/n;
end
f = feval(fun,x,varargin{:});
s = w*f(:);
w = w';

dalam contoh ini akan diambil aproksimasi fungsi kesalahan


Erf(1) menggunakan formula Gauss-Legendre dengan n =
2, 3, , 8.
approx_v = [];
for n=2:8
approx_v = [approx_v; (2/sqrt(pi))*Gquad1('exp2', 0, 1,
n, 'L')];
end
approx_v
approx_v =
0.84244189252255
0.84269001848451
0.84270117131620
0.84270078612733
0.84270079303742
0.84270079294882

134

Judul Buku

0.84270079294972

dengan memanggil kembali function built in MATLAB erf


diperoleh hasil :

exact_v = erf(1)
exact_v =
0.84270079294971

Jika interval integrasi adalah semi-infinite atau bi-infinite


maka digunakan function Gquad2.
function [s, w, x] = Gquad2(fun, n, type, varargin)
% Numerical integration using either the Gauss-Laguerre
% (type = 'L') or the Gauss-Hermite (type = 'H') with n (n > 0)
nodes.
% fun is a string containing the name of the function that is
% integrated.
% The output parameters s, w, and x hold the computed
approximation
% of the integral, list of weights, and the list of nodes,
% respectively.
if type == 'L'
d = -(1:n-1);
f = 1:2:2*n-1;
fc = 1;
else
d = sqrt(.5*(1:n-1));

Pemrograman Linier dengan MATLAB

135

f = zeros(1,n);
fc = sqrt(pi);
end
J = diag(d,-1) + diag (f) + diag(d,1);
[u,v] = eig(J);
[x,j] = sort(diag(v));
w = (fc*u(1,:).^2)';
w = w(j);
f = feval(fun,x,varargin{:});
s = w'*f(:);

Jika diketahui fungsi Euler's gamma

(t ) = e t x t 1 dx (t>-1)
0

maka integral tersebut dapat diaproksimasi dengan


menggunakan function Gquad2 dengan tipe 'L' (quadratur
Gauss-Laguerre). Misalkan (n)

= (n - 1)! for n = 1, 2, .
maka function mygamma dibuat untuk menghitung
aproksimasi numerik fungsi gamma menggunakan quadratur
Gauss-Laguerre, seperti berikut ini :
function y = mygamma(t)
% Value(s) y of the Euler's gamma function evaluated at t (t > -1).
td = t - fix(t);
if td == 0
n = ceil(t/2);
else
n = ceil(abs(t)) + 10;
end
y = Gquad2('pow',n,'L',t-1);

136

Judul Buku

Fungsi berikut ini adalah function mygamma


function z = pow(x, e)
% Power function z = x^e
z = x.^e;

dalam contoh ini akan diakprosimasi fungsi gamma untuk t =


1, 1.1, , 2 dan membandingkan hasilnya dengan hasil
yang diperoleh dengan menggunakan fungstion built in
MATLAB yaitu function gamma. File scriptnya adalah
testmyg untuk menghitung nilai aproksimasi fungsi gamma
menggunakan dua fungsi yaitu functions mygamma and
gamma.
% Script testmyg.m
format long
disp(' t mygamma gamma')
disp(sprintf('\n
_____________________________________________________'))
for t=1:.1:2
s1 = mygamma(t);
s2 = gamma(t);
disp(sprintf('%1.14f %1.14f %1.14f',t,s1,s2))
end

jika function tersebut dijalan di command window dengan


mengetikkan:
testmyg

maka diperoleh hasilnya :

Pemrograman Linier dengan MATLAB

mygamma

137

gamma

_____________________________________________________
1.00000000000000 1.00000000000000 1.00000000000000
1.10000000000000 0.95470549811706 0.95135076986687
1.20000000000000 0.92244757458893 0.91816874239976
1.30000000000000 0.90150911731168 0.89747069630628
1.40000000000000 0.89058495940663 0.88726381750308
1.50000000000000 0.88871435840715 0.88622692545276
1.60000000000000 0.89522845323377 0.89351534928769
1.70000000000000 0.90971011289336 0.90863873285329
1.80000000000000 0.93196414951082 0.93138377098024
1.90000000000000 0.96199632935381 0.96176583190739
2.00000000000000 1.00000000000000 1.00000000000000

7.4.4 Metode Romberg's


Metode Romberg terdiri dari dua fase, fase pertama
yaitu fase yang dibangkitkan dari barisan pendekatan yang
menggunakan composite trapezoidal rule. Dan fase yang
kedua adalah fase yang dibangun dari aproksimasi yang
diperoleh dalam fase pertama menggunakan Richardson's
extrapolation.
Proses ini adalah proses rekursif dan jumlah iterasinya
tergantung pada nilai parameter integral n. Dalam banyak
kasus nilai sederhana untuk n mencukupi untuk memperoleh
aproksimasi yang memuaskan.
Function Romberg(fun, a, b, n, varargin) yang
mengimplementasikan algoritma Romberg's seperti berikut
ini
function [rn, r1] = Romberg(fun, a, b, n, varargin)

138

Judul Buku

% Numerical approximation rn of the definite integral from a to b


% that is obtained with the aid of Romberg's method with n rows
% and n columns. fun is a string that names the integrand.
% If integrand depends on parameters, say p1, p2, ... , then
% they should be supplied just after the parameter n.
% Second output parameter r1 holds approximate values of the
% computed integral obtained with the aid of the composite
% trapezoidal rule using 1, 2, ... ,n subintervals.
h = b - a;
d = 1;
r = zeros(n,1);
r(1) = .5*h*sum(feval(fun,[a b],varargin{:}));
for i=2:n
h = .5*h;
d = 2*d;
t = a + h*(1:2:d);
s = feval(fun, t, varargin{:});
r(i) = .5*r(i-1) + h*sum(s);
end
r1 = r;
d = 4;
for j=2:n
s = zeros(n-j+1,1);
s = r(j:n) + diff(r(j-1:n))/(d - 1);
r(j:n) = s;
d = 4*d;
end
rn = r(n);

Pemrograman Linier dengan MATLAB

139

Berikut ini akan dicoba function


Romberg
mengintegrasikan fungsi rasional yang telah disebutkan
sebeumnya dalam bahasan (dapat dilihat m-file rfun).
Interval dari integrasinya adalah [a, b] = [0, 1], n= 10, dan
nilai parameter a, b, dan c masing-masing 1, 2, dan 1.
berikut ini :
[rn, r1] = Romberg('rfun', 0 , 1, 10, 1, 2, 1)
rn =
1.47854534395739
r1 =
1.25000000000000
1.42500000000000
1.46544117647059
1.47528502049722
1.47773122353730
1.47834187356141
1.47849448008531
1.47853262822223
1.47854216503816
1.47854454922849

Kesalahan absolute and relative rn adalah :


[abs(exact - rn); abs(rn - exact)/exact]
ans =
0

140

Judul Buku

7.4.4 Integral Numerik dari Fungsi


menggunakan function MATLAB dblquad

bivariate

Function dblquad merupakan function untuk


menghitung aproksimasi numerik dari integral lipat dua
berikut ini :

f ( x, y )dxdy
D

dimana D = {(x, y): a x b, c y d} yang


merupakan domain fungsi yang akan diintegralkan. Sintaks
dari function dblquad adalah dblquad (fun, a, b, c, d,
tol), dimana parameter tol adalah parameter yang
mempunya arti yang sama dengan function quad.
Misalkan fungsi f(x, y) = e-xy sin( xy), -1 x 1, 0
y 1., dan m-file esin digunakan untuk mengevaluasi fungsi
f
function z = esin(x,y);
z = exp(-x*y).*sin(x*y);

Pengintegralan fungsi f , dengan bantuan function dblquad,


pada domain yang telah diketahui di atas, diperoleh hasil :
result = dblquad('esin', -1, 1, 0, 1)
result =
-0.22176646183245

7.4.5 Differensiasi Numerik


Permasalah yang akan dibahas pada bagian ini adalah
tentang diferensiasi numerik yang dirumuskan berikut ini. Jika
diketahui sebuah fungsi univariat f(x) maka nantinya dengan
menggunakan MATLAB akan dihitung nilai aproksimasi dari f
'(x).
Algoritma yang disajikan berikut ini menghitung
barisan nilai aproksimasi dari turunan
menggunakan
aproksimasi finite difference fungsi f '(x)

Pemrograman Linier dengan MATLAB

f ' ( x) =

141

f ( x + h) f ( x h)
2h

dimana h adalah h ukuran langkah awal. Langkah pertama


dari metode ini adalah menghitung barisan aproksimasi
untuk f'(x) menggunakan beberapa nilai h. Bila aproksimasi
selanjutnya ditemukan untuk nilai h sebelumnya maka dibagi
dua. Langkah berikutnya adalah menggunakan ekstrapolasi
Richardson's .
Function numder berikut mengimplementasikan metode
untuk menghitung integrasi numerik.
function der = numder(fun, x, h, n, varargin)
% Approximation der of the first order derivative, at the
point x,
% of a function named by the string fun. Parameters h and
n
% are user supplied values of the initial stepsize and
the number
%
of
performed
extrapolation.

iterations

in

the

Richardson

% For fuctions that depend on parameters their values


must follow
% the parameter n.
d = [];
for i=1:n
s
=
(feval(fun,x+h,varargin{:})-feval(fun,xh,varargin{:}))/(2*h);
d = [d;s];
h = .5*h;
end
l = 4;
for j=2:n

142

Judul Buku

s = zeros(n-j+1,1);
s = d(j:n) + diff(d(j-1:n))/(l - 1);
d(j:n) = s;
l = 4*l;
end
der = d(n);

Sebagai contoh akan dihitung aproksimasi numerik


turunan pertama dari fungsi
dengan
f ( x ) = e x ,
menggunakan function numder and dan akan dibandingkan
hasilnya dengan nilai eksak f '(x) pada x = 0.1, 0.2, ,
1.0. Nilai inputan parameter h dan n masing-masing 0.01
dan 10,
2

function testnder(h, n)
% Test file for the function numder. The initial stepsize is h and
% the number of iterations is n. Function to be tested is
% f(x) = exp(-x^2).
format long
disp(' x numder exact')
disp(sprintf('\n
_____________________________________________________'))
for x=.1:.1:1
s1 = numder('exp2', x, h, n);
s2 = derexp2(x);
disp(sprintf('%1.14f %1.14f %1.14f',x,s1,s2))
end
function y = derexp2(x)
% First order derivative of f(x) = exp(-x^2).

Pemrograman Linier dengan MATLAB

143

y = -2*x.*exp(-x.^2);

Berikut ini adalah hasil yang diperoleh denan menggunakan


function testndr, dengan mengetikkan :
testnder(0.01, 10)

dan diperoleh hasil :


x

numder

exact

_____________________________________________________
0.10000000000000 -0.19800996675001 -0.19800996674983
0.20000000000000 -0.38431577566308 -0.38431577566093
0.30000000000000 -0.54835871116311 -0.54835871116274
0.40000000000000 -0.68171503117430 -0.68171503117297
0.50000000000000 -0.77880078306967 -0.77880078307140
0.60000000000000 -0.83721159128436 -0.83721159128524
0.70000000000000 -0.85767695185699 -0.85767695185818
0.80000000000000 -0.84366787846708 -0.84366787846888
0.90000000000000 -0.80074451919839 -0.80074451920129

7.5. Metode Numerik untuk Persamaan Differensial


Biasa.
Banyak permasalahan yang muncul dalam ilmu
pengetahuan dan teknik yang membutuhkan pengetahuan
mengenai fungsi y = y(t) yang memenuhi persamaan
differensial orde pertama y' = f(t, y) dan kondisi awal y(a)
= y0, dimana a dan y0 adalah bilangan real dan f adalah
fungsi bivariate yang memenuhi kondisi tertentu. Secara
umum permasalahan tersebut dapar dirumuskan seperti
berikut ini :
Diberikan suatu fungsi f dari n variabel, untuk
mendapatkan fungsi y = y(t) yang memenuhi persamaan
differensial orde ke-n.

144

Judul Buku

y( n ) = f(t, y, y', , y(n 1)) beserta dengan kondisi awal y(a)


= y0, y'(a) = y0', ,
y( n 1) (a) = y0( n 1).
Permasalahan
selanjutnya
adalah
bagaimana
mentransformasikan
persamaan
tersebut
ke
dalam
pemecahan sistem persamaan differensial biasa orde
pertama. Istilah Persamaan Differensial biasa akan disingkat
dengan ODE.

7.5.1 Pemecahan maslaah nilai awal menggunkan


fungsi built-in MATLAB
MATLAB mempunyai beberapa function untuk
menghitung penyelesaian numerik bagi permasalahan nilai
awal untuk ODE. Function-function tersebut adalah seperti
pada tabel berikut ini:
Aplikasi

Metode yang digunakan

Formula Explicit Runge-Kutta

ode15s

ODE
non
stiff
ODE
non
stiff
ODE
non
stiff
ODE stiff

ode23s

ODE stiff

Functio
n
ode23
ode45
ode113

Formula Explicit Runge-Kutta


Adams-Bashforth-Moulton
solver
Pemecahan yang didasarkan
pada
formula differensial numerik
Pemecahan yang didasarkan
pada
formula modifikasi Rosenbrock
orde 2

Pemrograman Linier dengan MATLAB

Bentuk sederhana sintaks untuk


penyelesaian ODE adalah :

145

MATLAB bagi

[t, y] = solver(fun, tspan, y0], fun merupakan string


yang berisi nama dari ODE m-file yang menggambarkan
persamaan
differensial,
tspan
merupakan
interval
pengintegralan, dan y0 adalah vektor untuk nilai-nilai awal.
Jika tspan mempunyai elemen/unsur lebih dari dua, maka
pemecahan kembali menghitung nilai pada titik-titik tersebut.
Output parameters t dan y adalah vektor-vektor titik evaluasi
nilai perhitungan dari y pada titik-titik tersebut.
Sebagai contoh akan dicari penyelesaian numerik dari
y pada t = 0, .25, .5, .75, 1 untuk permasalahan nilai awala
y' = -2ty2, dengan kondisi awal y(0) = 1. Disini akan
digunakan function ode23 dan ode45. Penyelesaian eksak
dari masalah ini adalah y(t) = 1/(1 + t2) . M-file ODE untuk
perhitungan ini diberi nama eq1
function dy = eq1(t,y)
% The m-file for the ODE y' = -2ty^2.
dy = -2*t.*y(1).^2;
format long
tspan = [0 .25 .5 .75 1]; y0 = 1;
[t1 y1] = ode23('eq1', tspan, y0);
[t2 y2] = ode45('eq1', tspan, y0);

Untuk membandingkan hasil yang diperoleh, maka dibuat


tiga kolom untuk hasil evaluasinya dan nilai y diperoleh
dengan bantuan function ode23 dan ode45.
[t1 y1 y2]
ans =
0 1.00000000000000 1.00000000000000
0.25000000000000 0.94118221525751 0.94117646765650
0.50000000000000 0.80002280597122 0.79999999678380

146

Judul Buku

0.75000000000000 0.64001788410487 0.63999998775736


1.00000000000000 0.49999658522366 0.50000000471194

Contoh berikutnya adalah yang berhubungan dengan sistem


ODE orde pertama.
y1'(t) = y1(t) 4y2(t), y2'(t) = -y1(t) + y2(t),
y1(0) = 1; y2(0) = 0.
Untuk sistem ODE m file ini, akan digunakan function inline
dari MATLAB.
dy = inline('[1 4;-1 1]*y', 't', 'y')
dy =
Inline function:
dy(t,y) = [1 4;-1 1]*y

Function inline dibuat pada Command Window. Interval dari


penyelesaian numerik dihitung dan nilai awalnya disimpan
masing-masing dalam vektor tspan dan y0.
tspan = [0 1]; y0 = [1 0];
Penyelesaian numerik dari sistem ini diperoleh dengan
menggunakan function ode23
[t,y] = ode23(dy, tspan, y0);
Grafik dari y1(t) (line padat) and y2(t) (garis putus-pustus)
seperti ditunjukkan berikut ini :
plot(t,y(:,1),t,y(:,2),'--'),legend('y1','y2'),
xlabel('t'),ylabel('y(t)'), title('Numerical solutions
y_1(t) and y_2(t)')

Pemrograman Linier dengan MATLAB

147

Penyelesaian eksak (y1(t), y2(t)) untuk sistem ini adalah :


y1, y2
y1 =
1/2*exp(-t)+1/2*exp(3*t)
y2 =
-1/4*exp(3*t)+1/4*exp(-t)

Fungsi y1 dan y2 diperoleh dengan menggunakan command


dsolve yang disediakan dalam Symbolic MathToolbox.
Contoh terakhir dalam bagian ini adalah yang berhubungan
dengan stiff ODE.
Misalkan :
y ' (t ) = 1000 ( y log( 1 + t )) +

1
,
1 +t

y(0)=1.

Dengan MATLAB dapat diketikkan


dy = inline('-1000*(y log(1 + t)) + 1/(1 + t)', 't',
'y')
dy =
Inline function:
dy(t,y) = -1000*(y log(1 + t)) + 1/(1 + t)

148

Judul Buku

Penggunaan function ode23s pada interval :


tspan = [0 0.5];

diperoleh hasil :
[t, y] = ode23s(dy, tspan, 1);

Untuk menggambarkan efek dari stiffness persamaan


differensial, maka dapat dilihat dari plot grafiknya yaitu :
plot(t, y), axis([-.05 .55 -.05 1] ), xlabel('t'), ylabel('y(t)'),
title('Solution to the stiff ODE')

Penyelesaian eksak untuk


masalah ini adalah y(t) =
log(1+t) + exp(-1000*t). Dapat dicoba dengan
memplotkan fungsi tersebut pada interval [-0.05, 0.5].

7.5.2 Permasalahan Two Point Boundary value untuk


ODE Orde Dua
Tujuan dari bagian ini dalah membahas metode
numerik untuk permasalahan dua titik nilai batas (two point
boundary value) bagi ODE orde dua
y''(t) = f(t, y, y')
y(a) = ya, y(b) = yb.

Pemrograman Linier dengan MATLAB

149

Metode yang digunakan dalam masalah ini adalah finite


difference method. Misalkan diasumsikan bahwa fungsi f
berbentuk f(t, y, y') = g0(t) + g1(t)y + g2(t)y'. Sehingga
fungsi f adalah kedua-duanya linear y dan y'.
Penggunaan aproksimasi orde dua standar untuk y'
dan y'' memudahkan untuk membuat persamaan sistem
linear untuk perhitungan nilai aproksimasi dari fungsi y pada
sekumpulan titik-titik yang diketahui.
Function bvp2ode mengimplementasikan metode ini :
% Numerical solution y of the boundary value problem
% y'' = g0(t) + g1(t)*y + g2(t)*y', y(a) = ya, y(b) = yb,
% at n+2 evenly spaced points t in the interval tspan = [a b].
% g0, g1, and g2 are strings representing functions g0(t),
% g1(t), and g2(t), respectively. The boundary values
% ya and yb are stored in the vector bc = [ya yb].
a = tspan(1);
b = tspan(2);
t = linspace(a,b,n+2);
t1 = t(2:n+1);
u = feval(g0, t1);
v = feval(g1, t1);
w = feval(g2, t1);
h = (b-a)/(n+1);
d1 = 1+.5*h*w(1:n-1);
d2 = -(2+v(1:n)*h^2);
d3 = 1-.5*h*w(2:n);
A = diag(d1,-1) + diag(d2) + diag(d3,1);
f = zeros(n,1);

150

Judul Buku

f(1) = h^2*u(1) - (1+.5*h*w(1))*bc(1);


f(n) = h^2*u(n) - (1-.5*h*w(n))*bc(2);
f(2:n-1) = h^2*u(2:n-1)';
s = A\f;
y = [bc(1);s;bc(2)];
t = t';

contoh berikut ini adalah berhubungan dengan two-point


boundary value problem
y''(t) = 1 +sin(t)y + cos(t)y'
y(0) = y(1) = 1.
Maka akan didefinisikan tiga function inline yaitu :
g0 = inline('ones(1, length(t))', 't'), g1 = inline('sin(t)', 't'), g2
= inline('cos(t)', 't')
g0 =
Inline function:
g0(t) = ones(1, length(t))
g1 =
Inline function:
g1(t) = sin(t)
g2 =
Inline function:
g2(t) = cos(t)

dan fungsi berikutnya yang dikjalankan adalah function


bvp2ode untuk memperoleh
[t, y] = bvp2ode(g0, g1, g2, [0 1],[1 1],100);

Grafik dari fungsi debangkitkan oleh function bvp2ode


seperti yang ditunjukkan berikut ini :
plot(t, y), axis([0 1 0.85 1]), title('Solution to the boundary value
problem'), xlabel('t'), ylabel('y(t)')

Pemrograman Linier dengan MATLAB

151

152

Judul Buku

BAB 9
9 Pemrograman MATLAB untuk
Kriptografi
Contoh 1.
Program ini digunakan untuk melakukan proses
merubah data dari bentuk asli ke bentuk baru (enkripsi) dan
proses pengembalian dari bentuk baru ke bentuk asli
(dekripsi).
Untuk
proses
cipher
yang
digunakan
menggunakan metode transposisi yaitu dengan mengubah
posisi karakter-karakternya dengan cara tertentu. Pada
bagian ini akan digunakan 2 cara, yaitu:
1. Metode zig-zag menggunaan n baris
Pada metode ini pada prinsipnya pesan yang akan
dikirimkan ditulis perbaris sebanyak baris yang
ditentukan (sesuai dengan nilai n nya). Dengan
sebelumnya carakter disusun dalam posisi baris dan
kolom dengan urutan penyusunan sebagai berikut :
baris ke-1 dengan menyusun karakter dengan
urutan menggunakan jeda ke-1 = 2*n baris 2
dan jeda 2 = 0
baris ke-2 dengan menyusun karakter dengan
urutan menggunakan jeda ke-1 sebelumnya
dikurangi 2 dan jeda ke-2 dengan menambah
nilai jeda ke-2 sebelumnya dengan 2
demikian seterusnya sampai baris ke-n
Ilustrasi :
Plaintext = a1 a2 a3 a4 an
Dikirim menggunakan metode zig-zag : n baris

Pemrograman Linier dengan MATLAB

153

Pesan akan dikirimkan ditulis perbaris dari


pola :
a1

an+3 dst

a2

an+2

an+1
an

sehingga ciphertext menjadi = a1 an+3 a2


an+2 dst.
2. Metode permutasi
Prinsip pada metode ini plaintext dibagi menjadi
beberapa kolom sesuai dengan banyak permutasi
yang aan digunakan, kemudian masing-masing kolom
dilakukan proses transpose sehingga menjadi baris
kemudian ciphertext dihasilkan dengan menyusun
barisan karakter sesuai dengan urutan permutasi yang
diinginkan.
Ilustrasi :
Permutasi yang digunakan misalnya a1 a2 a3 ..
an
Maka plaintext dibagi menjadi n kolom

Kolom 1

kolom 2

kolom 3

kolom n
Kemudian diubah menjadi baris
Kolom 1
Kolom 2
Kolom 3

Kolom n

a1

a2

a3

..

an

154

Judul Buku

Dengan menggunkan MATLAB


tersebut dapat diselesaikan :

maka

permasalahan

Permasalahan 1 :
Fungsi encipher dan decipher menggunakan
transposisi dengan formula zig-zag.
a. Fungsi Enchiper
Fungsi enchiper diberi nama function enkripsi
function c=enkripsi(x,baris)
n=size(x,2);
jeda1=2*baris-2;
jeda2=0;
c=[];
for i=1:baris
k=i;
c=[c x(k)];
while k<=n
k=k+jeda1;
if k<=n & jeda1~=0
c=[c x(k)];
end
k=k+jeda2;
if k<=n & jeda2~=0
c=[c x(k)];
end
end

proses

Pemrograman Linier dengan MATLAB

jeda1=jeda1-2;
jeda2=jeda2+2;
end

Sebagai contohnya function di atas dapat dijalankan :


x='MUHAMMAD ARHAMI'
x =
MUHAMMAD ARHAMI
baris=5
baris =
5
c=enkripsi(x,baris)
c =
M UDAHARIAMHMMA

b. Fungsi Dechiper
Fungsi dechiper diberi nama function dekrip
function c=dekrip(x,baris)
n=size(x,2);
jeda1=2*baris-2;
jeda2=0;
pos=0;
for i=1:baris
k=i;
pos=pos+1;

155

156

Judul Buku

deciper(k)=[x(pos)];
while k<=n
k=k+jeda1;
if k<=n & jeda1~=0
pos=pos+1;
deciper(k)=[x(pos)];
end
k=k+jeda2;
if k<=n & jeda2~=0
pos=pos+1;
deciper(k)=[x(pos)];
end
end
jeda1=jeda1-2;
jeda2=jeda2+2;
end
c=[];
for i=1:n
c=[c deciper(i)];
end

Jika function di atas dijalankan dengan inputannya


merupakan hasil enkripsi di atas maka dipewroleh :
x='M UDAHARIAMHMMA'
x =
M UDAHARIAMHMMA
baris=5
baris =

Pemrograman Linier dengan MATLAB

157

5
d=dekrip(x,baris)
d =
MUHAMMAD ARHAMI

Permasalahan 2 :
Fungsi encipher dan decipher menggunakan
transposisi dengan formula permutasi.
a. Fungsi Enchiper
Fungsi enchiper diberi nama function enkripsi
function c=enkripsiP(x,permutasi)
k=size(permutasi,2);
n=size(x,2);
y=mod(n,k);
if y==0
b=n/k;
else
b=((n-y)/k)+1;
end
index=1;
for i=1:b
for j=1:k
if index>n
ciper(i,j)=[' '];

proses

158

Judul Buku

else
ciper(i,j)=[x(index)];
end
index=index+1;
end
end
cb=1:1:b;
ciperp=ciper(cb,permutasi);
d=ciperp(:);
c=d';

jika function tersebut di jalankan dengan inputan x dan


permutasinya maka didapatkan hasil :
x='HARAP KAMU DATANG SEGERA KEMARI PENTING'
x =
HARAP KAMU DATANG SEGERA KEMARI PENTING
permutasi=[3 5 1 4 2 6]
permutasi =
3

c=enkripsiP(x,permutasi)
c =
RMAGEPGP GRAN HKAS IIAUNEME AATEK N D ART

Pemrograman Linier dengan MATLAB

b. Fungsi Dechiper
Fungsi dechiper diberi nama function dekrip
function c=dekripP(x,permutasi)
k=size(permutasi,2);
n=size(x,2);
y=mod(n,k);
if y==0
b=n/k;
else
b=((n-y)/k)+1;
end
index=1;
for i=1:k
for j=1:b
deciper(i,j)=[x(index)];
index=index+1;
end
end
for i=1:k
j=1;
while permutasi(j)~=i
j=j+1;
end
for l=1:b
deciperp(i,l)=deciper(j,l);
end

159

160

Judul Buku

end
deciperk=deciperp(:);
c=deciperk';

Jika function di atas dijalankan dengan inputannya


merupakan hasil enkripsi di atas maka diperoleh
x='RMAGEPGP GRAN HKAS IIAUNEME AATEK N D ART '
x =
RMAGEPGP GRAN HKAS IIAUNEME AATEK N D ART
permutasi=[3 5 1 4 2 6]
permutasi =
3

d=dekripP(x,permutasi)
d =
HARAP KAMU DATANG SEGERA KEMARI PENTING

Berikut ini ada bebarapa contoh soal tentang kriptografi


yang diselesaikan dengan menggunakan pemrograman
MATLAB. Soal-soal dan penyelesaiannya adalah :

Contoh 2.
1. Diket : matrik permutasi = m = [7 3 5 6 1 4 2]
Kunci = k = sugengraharjo
Spasi antar kata = X
Plaintext = p = SELAMA UJIAN BERLANGSUNG
TIDAK BOLEH MEMINJAM BUKU
TEMANNYA

Pemrograman Linier dengan MATLAB

161

Ciphertext=QCDSPSNSJTMLUCMSHJFBLQNNPLDPTL
SHNQMXJJXFFL
Buatlah :
a. enkripsi plaintext dengan
dengan monoalfabetik

transposisi

kemudian

b. dekripsi ciphertext dengan monoalfabetik kemudian


dengan transposisi
Program yang digunakan untuk enkripsi plaintext
dengan algoritma permutasi memanggil fungsi blok dalam
program fungsi permutasi (transposisi). Program untuk
enkripsi monoalfabetik memanggil program kuncibaru.
Fungsi blok gunanya untuk membuat blok pesan
menjadi matrik dengan jumlah kolom yang
sama
dengan
jumlah
elemen
matrik
permutasinya.
function b=blok(p,sblok)
sisa=input('masukkan
dibelakang : ','s');

abjad

pengisi

sisa=upper(sisa);
n=size(p,2);
nblok=ceil(n/sblok);
p=upper(p);
temp=[];
for i=1:sblok*nblok-n
temp=[temp sisa];
end;
p=[p temp];
for j=1:nblok
b(j,1:sblok)=p((j-1)*sblok+1:j*sblok);
end

blok

162

Judul Buku

Fungsi

transposisi(permutasi) gunanya untuk


menekripsi plaintext dengan
algoritma permutasi.

function t=transposisi(p,trans);
n=size(trans,2);
b=blok(p,n);
disp('hasil bloknya menjadi:');
disp(b);
[a,z]=size(b);
c=[];
for i=1:a
for j=1:z
for k=1:n
if j==trans(k)
c(i,k)=b(i,j);
end;
end;
end;
end;
%baca matrik cipher
tmp=[];
for i=1:a
for j=1:z
tmp=[tmp c(i,j)];
end;
end;
t = setstr(tmp);

Pemrograman Linier dengan MATLAB

163

Fungsi kuncibaru digunakan untuk menghilangkan abjad


yang sama dalam kunci.
function k = kuncibaru(kunci)
n=size(kunci,2);
k=[];
for i=1:n;
if kunci(i)~=' ' & ~ismember(kunci(i),k)
k=[k kunci(i)];
end;
end;

Fungsi mono digunakan untuk mengenkripsi plaintext


dengan algoritma monoalfabetik.
function c = mono(p,kunci);
alfabet = 'A' : 'Z' ;
kunci = kuncibaru(upper(kunci));
alfabet =[kunci setdiff(alfabet,kunci)];
n=size(p,2);
for i = 1:n
if (p(i) == ' ' );
c(i) = p(i);
else
c(i)=alfabet(upper(p(i)) - 'A' + 1);
end;
end;

maka untuk mengerjakan soal no 1a dibuat fungsi untuk


memanggil program-program diatas, dimana fungsi soal1a ini

164

Judul Buku

memanggil fungsi pesanbaru untuk menggantikan spasi


dengan abjad yang diinginkan.
Fungsi pesanbaru gunanya untuk mengganti spasi
dengan abjad yang diinginkan.
function pb=pesanbaru(p);
spasi=input('masukkan huruf pengganti spasi : ','s');
spasi=upper(spasi);
n=size(p,2);
pb=[];
for i=1:n;
if p(i)~=' '
pb=[pb p(i)];
else
pb(i)=spasi;
end;
end;

Fungsi vigenerenya digunakan untuk menenkripsi pesan


dengan metode vigenere:
function v = vigenere(pesan,kunci);
pesan=upper(pesan);%ini wajib dihurufbesarkan....
kunci=upper(kunci);
%membuat pesan&kunci menjadi numerik
abspesan=abs(pesan);
abskunci=abs(kunci);
i=length(abspesan);
j=length(abskunci);
%membuat panjang kunci=pj pesan

Pemrograman Linier dengan MATLAB

pjkunci=[];
for x=1:round(i/j);
pjkunci=[pjkunci abskunci];
end;
for x=1:rem(i,j);
pjkunci=[pjkunci abskunci(x)];
end;
%menambahkan pesan+kunci dalam numerik
penampung=[];
for x=1:i;
penampung(x)=abspesan(x)+pjkunci(x);
%disp(penampung);
end;
%encripsi
hasil=[];
for x=1:i;
%if penampung(x)~=32;
hasil(x)=penampung(x)-65;
if hasil(x)>90;
hasil(x)=hasil(x)-26;
end;
%end;
end;
%merubah kembali kehuruf

165

166

Judul Buku

v=setstr(hasil);
%disp(v);

Fungsi soal1a fungsi yang dibuat untuk mengerjakan


sola no 1a.
function s1=soal1a(m,k,pesan)
p=pesanbaru(pesan);
disp('pesan barunya menjadi : ');
disp(p);
t=transposisi(p,m);
disp('hasil transposisinya adalah :');
disp(t);
disp('hasil vigenerenya adalah:');
v = vigenere(t,k);
s1=v;

maka hasil running programnya adalah:


>> m = [7

2]

m =
7

>> k = 'sugengraharjo'
k =
sugengraharjo
>> p = 'SELAMA UJIAN BERLANGSUNG TIDAK BOLEH MEMINJAM
BUKU TEMANNYA'
p =

Pemrograman Linier dengan MATLAB

SELAMA UJIAN
TEMANNYA

BERLANGSUNG

TIDAK

167

BOLEH

MEMINJAM

BUKU

>> hasil=soal1a(m,k,p)
masukkan huruf pengganti spasi : x
pesan barunya menjadi :
SELAMAXUJIANXBERLANGSUNGXTIDAKXBOLEHXMEMINJAMXBUKUXTEMANN
YA
masukkan abjad pengisi blok dibelakang : z
hasil bloknya menjadi:
SELAMAX
UJIANXB
ERLANGS
UNGXTID
AKXBOLE
HXMEMIN
JAMXBUK
UXTEMAN
NYAZZZZ
hasil transposisinya adalah :
XLMASAEBINXUAJSLNGEARDGTIUXNEXOLABKNMMIHEXKMBUJXANTMAUEXZ
AZZNZY
hasil vigenerenya adalah:
hasil =

PFSEFGVBPNODOBMRRTKRRKGKRIPHKBBRRBRNDVWZYDOZ
HLJEAECASOKBMGQZUZP

b. Program yang digunakan untuk dekripsi dengan algoritma

monoalfabetik memanggil fungsi kuncibaru, sedangkan


dekripsi dengan algoritma permutasi memanggil fungsi

168

Judul Buku

blok tetapi pada fungsi blok ini tidak memasukkan huruf


pengganti dibelakang bloknya.
Fungsi bloknya menjadi:
unction b=blok(p,sblok)
n=size(p,2);
nblok=ceil(n/sblok);
p=upper(p);
temp=[];
for i=1:sblok*nblok-n
temp=[temp 'X'];
end;
p=[p temp];
for j=1:nblok
b(j,1:sblok)=p((j-1)*sblok+1:j*sblok);
end

Fungsi detrans gunanya untuk mendekripsi ciphertext


dengan
algoritma
permutasi.
function dt=detrans(t,trans);
n=size(trans,2);
b=blok(t,n);
disp('hasil bloknya menjadi :');
disp(b);
[a,z]=size(b);
%bikin matrik angka asli
asli=[];
for q=1:n
asli=[asli q];
end;

Pemrograman Linier dengan MATLAB

temp=[];
for p=1:n
for q=1:n
if asli(p)==trans(q)
temp=[temp asli(q)];
end;
end;
end;
disp(temp)
%baca matriks ciphertext
dt=[];
for i=1:a
for j=1:z
for k=1:n
if temp(k)==j;
dt(i,k)=b(i,j);
end;
end;
end;
end;
disp('pesan aslinya dalam blok adalah:');
disp(setstr(dt));
%menyatukan blok
d=[];
for i=1:a
for j=1:z
d=[d dt(i,j)];
end;

169

170

Judul Buku

end;
dt=setstr(d);

Fungsi balik digunakan untuk mendekripsi ciphertext


dengan algoritma monoalfabelik.
function d = balik(c,kunci);
alfabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
kunci = kuncibaru(upper(kunci));
alpha = [kunci alfabet];
c=upper(c);
n=size(alpha,2);
k=[];
for i=1:n;
if alpha(i)~=' ' & ~ismember(alpha(i),k)
k=[k alpha(i)];
end;
end;
%mencocokkan pesan dengan kunci
d=[];
m = size(c,2);
n = size(k,2);
for p=1:m;
if c(p)==' ';
d=[d c(p)];
end;
for q=1:n;
if c(p)==k(q);
d=[d alfabet(q)];

Pemrograman Linier dengan MATLAB

171

end;
end;
end;

maka untuk mengerjakan soal no 1b dibuat fungsi untuk


memanggil program-program diatas
function s1b=soal1b(m,k,c);
d = balik(c,k);
disp('hasil dekripsi dengan monoalfabetik adalah :');
disp(d);
dt=detrans(d,m);
disp('hasil dekripsi dengan transposisi adalah :');
s1b=dt;

maka hasil running programnya adalah:


>> m = [7

2]

m =
7

>> k = 'sugengraharjo'
k =
sugengraharjo
>> c='QCDSPSNSJTMLUCMSHJFBLQNNPLDPTLSHNQMXJJXFFL'
c =
QCDSPSNSJTMLUCMSHJFBLQNNPLDPTLSHNQMXJJXFFL
>> jawab=soal1b(m,k,c)
hasil dekripsi dengan monoalfabetik adalah :
TLMASAEAIURQBLRAHINKQTEESQMSUQAHETRXIIXNNQ
hasil bloknya menjadi :

172

Judul Buku

TLMASAE
AIURQBL
RAHINKQ
TEESQMS
UQAHETR
XIIXNNQ
pesan aslinya dalam blok adalah:
SELAMAT
QLIBURA
NQAKHIR
QSEMEST
ERQTAHU
NQINIXX
hasil dekripsi dengan transposisi adalah :
jawab =

SELAMATQLIBURANQAKHIRQSEMESTERQTAHUNQINIXX

2. Diket : nkunci = 3
kunci1= programmagister
kunci2 = ilmukomputer
kunci3 = fakultasmipa
kunci vigenere= kv = pilprescapres
plaintext = p = pilihlah presiden dan wakil
presiden
sesuai hati nurani anda
spasi antar kata = Q
ciphertext=c=TXQXGJPESVZBSZKWUTMPDLMSTVYCYM

Pemrograman Linier dengan MATLAB

173

IYTKDMZTKCYCDOBPZK

ukuran blok = 8
Buatlah program
a. enkripsi plaintext dengan polialfabetik kemudian
dengan vigenere
b. dekripsi ciphertext
dengan polialfabetik

dengan

vigenere

kemudian

Program yang digunakan untuk enkripsi plaintext dengan


algoritma polialfabetik fungsi blok dan fungsi kuncibaru .
kemudian dienkripsi lagi dengan program fungsi vigenere.
Untuk fungsi blok dan fungsi kuncibaru sama seperti listing
program pada no 1.
Fungsi poli digunakan untuk menenkripsi plaintext
dengan metode polialfabetik.
function c=poli(p,sblok,nkunci);
alfabet='A':'Z';
nalfabet=size(alfabet,2);
b=blok(p,sblok);
for i=1:nkunci,
kunci= input('Masukin kunci :','s');
kunci=kuncibaru(upper(kunci));
alfakunci(i,:)=[kunci setdiff(alfabet,kunci)];
end;
[m,n]=size(b);
c=[];
for i=1:m
k=mod(i-1,nkunci)+1;
for j=1:n,

174

Judul Buku

l=b(i,j)-'A'+1;
c=[c alfakunci(k,l)];
end;
end;

Fungsi vigenere digunakan untuk menenkripsi pesan


dengan metode vigenere.
function v = vigenere(pesan,kunci);
pesan=upper(pesan);%ini wajib dihurufbesarkan....
kunci=upper(kunci);
%membuat pesan&kunci menjadi numerik
abspesan=abs(pesan);
abskunci=abs(kunci);
i=length(abspesan);
j=length(abskunci);
%membuat panjang kunci=pj pesan
pjkunci=[];
for x=1:round(i/j);
pjkunci=[pjkunci abskunci];
end;
for x=1:rem(i,j);
pjkunci=[pjkunci abskunci(x)];
end;
%menambahkan pesan+kunci dalam numerik
penampung=[];
for x=1:i;
penampung(x)=abspesan(x)+pjkunci(x);
end;

Pemrograman Linier dengan MATLAB

175

%encripsi
hasil=[];
for x=1:i;
hasil(x)=penampung(x)-65;
if hasil(x)>90;
hasil(x)=hasil(x)-26;
end;
end;
%merubah kembali kehuruf
v=setstr(hasil);

maka untuk mengerjakan soal no 2a dibuat fungsi untuk


memanggil program-program diatas,dimana fungsi soal2a
memanggil fungsi pesanbaru untuk menggantikan spasi
dengan abjad yang diinginkan. Fungsi pesan baru sama
seperti pada soal 1.
Fungsi soal2a digunakan untuk menyelesaikan soal no
2a
function s2a=soal2a(blok,p,nkunci,k)
pb=pesanbaru(p);
disp(pb);
c=poli(pb,blok,nkunci);
disp(c);
v = vigenere(c,k);
s2a=v;

maka hasil running programnya adalah:


>> nkunci = 3

176

Judul Buku

nkunci =
3
>> p = 'pilihlah presiden dan wakil presiden sesuai hati
nurani anda'
p =
pilihlah presiden dan wakil presiden sesuai hati nurani
anda
>> vg='pilprescapres'
vg =
pilprescapres
>> blok=8
blok =
8
>> s2a=soal2a(blok,p,nkunci,vg)
masukkan huruf pengganti spasi : q
pesan barunya menjadi :
pilihlahQpresidenQdanQwakilQpresidenQsesuaiQhatiQnuraniQa
nda
masukkan abjad pengisi blok dibelakang : x
Masukin kunci :programmagister
Masukin kunci :ilmukomputer
Masukin kunci :fakultasmipa
hasil enkripsi polialfabetiknya adalah :
JTCTSCPSHGJKNEUKEJUFEJWFBTCKJLANEUKDHNKNRFIJMFQIKFULPFTKI
DUIXXXX
hasil enkripsi dengan vigenerenya adalah :
s2a =

Pemrograman Linier dengan MATLAB

177

YBNIJGHUHVAOFTCVTAYXGJLWFLRSUARRWWKSYRCCZQXAQ
XSIZWYDENEZZHMKXMOB
Program yang digunakan untuk dekripsi dengan
algoritma vegenere kemudian didekripsi lagi dengan
algoritma polialfabetik yang memanggil fungsi kuncibaru dan
fungsi blok seperti pada soal no 1b.
Fungsi devig digunakan untuk mendekripsi ciphertext
dengan
metode vegenere.
function dv=devig(pesan,kunci);
pesan=upper(pesan);%ini wajib dihurufbesarkan....
kunci=upper(kunci);
%membuat pesan&kunci menjadi numerik
abspesan=abs(pesan);
abskunci=abs(kunci);
i=length(abspesan);
j=length(abskunci);
%membuat panjang kunci=pj pesan
pjkunci=[];
for x=1:round(i/j);
pjkunci=[pjkunci abskunci];
end;
for x=1:rem(i,j);
pjkunci=[pjkunci abskunci(x)];
end;
%dekripsi
hasil=[];
for x=1:i;
hasil(x)=abspesan(x)+65-pjkunci(x);

178

Judul Buku

if hasil(x)<65;
hasil(x)=hasil(x)+26;
end;
end;
%merubah kembali kehuruf
dv=setstr(hasil);

Fungsi bpoli digunakan untuk mendekripsi pesan dengan


metode polialfabetik.
function bp = bpoli(p,sblok,nkunci);
alfabet='A':'Z';
nalfabet=size(alfabet,2);
b=blok(p,sblok);
for i=1:nkunci,
kunci= input('Masukin kunci :','s');
kunci=kuncibaru(upper(kunci));
alfakunci(i,:)=[kunci setdiff(alfabet,kunci)];
end;
[m,n]=size(b);
c=[];
for i=1:m
k=mod(i-1,nkunci)+1;
for j=1:n;
for x=1:26
if b(i,j)==alfakunci(k,x);
c=[c alfabet(x)];
end;
end;

Pemrograman Linier dengan MATLAB

179

end;
end;
%merubah kembali ke huruf
bp=setstr(c);

maka untuk mengerjakan soal no 2b dibuat fungsi soal2b


untuk memanggil program-program diatas,dimana fungsi
soal2b memanggil fungsi devig untuk dan fungsi bpoli.
Fungsi soal2b digunakan untuk menyelesaikan soal no
2b
function s2b=soal2b(blok,p,nkunci,k)
dv=devig(p,k);
disp('hasil dekripsi dengan vigenerenya adalah : ');
disp(dv);
bp = bpoli(dv,blok,nkunci);
disp('hasil dekripsi polialfabetiknya adalah : ');
s2b=bp;

maka hasil running programnya adalah:


>> nkunci = 3
nkunci =
3
>> vg='pilprescapres'
vg =
pilprescapres
>> blok=8
blok =

180

Judul Buku

8
>> c='TXQXGJPESVZBSZKWUTMPDLMSTVYCYMIYTKDMZTKCYCDOBPZK'
c =
TXQXGJPESVZBSZKWUTMPDLMSTVYCYMIYTKDMZTKCYCDOBPZK
>> s2b=soal2b(blok,c,nkunci,vg)
hasil dekripsi dengan vigenerenya adalah :
EPFIPFXCSGIXAKCLFCIXBLXBPDJUNXRUBIDXIPSNQROXXXXK
Masukin kunci :programmagister
Masukin kunci :ilmukomputer
Masukin kunci :fakultasmipa
hasil dekripsi polialfabetiknya adalah :
s2b

JANGANXLUPAXKEMBALIXKEXKAMPUSXBULANXAGUSTUSXXX
XC

3. Diket : k = dilarang menyontek teman


Plaintext = p = berikan yang terbaik buat saudara
anda
Ditanya : enkripsi dengan algoritma playfair ciphering.
Untuk menngerjakan soal ini digunakan program fungsi
polibaru untuk menenkripsi plaintext, dimana step yang
diambil bila ada abjad pada kolom atau huruf yang sama
adalah 2. Fungsi polibaru ini memanggil fungsi kunci baru
dan fungsi blok yang sama seperti jawaban nomor
sebelumnya.

Pemrograman Linier dengan MATLAB

Fungsi polibaru
function p=polibaru(kunci,baris,text)
alfabet1='A':'P';
alfabet2='R':'Z';
alfabet=[alfabet1 alfabet2];
text=upper(text);
kunci=kuncibaru(upper(kunci));
disp('kuncinya menjadi: ');
disp(kunci);
alfabet=[kunci setdiff(alfabet,kunci)];
mat_kunci=blok(alfabet,baris);
disp('matrik kuncinya adalah');
disp(mat_kunci);
n=size(text,2);
if mod(n,2)==1
text=[text 'X'];
n=size(text,2);
end;
p=[];
for i=1:n
if text(i)=='Q'
text(i)='X';
n=size(text,2);
end;
end;
for j=1:2:n
[baris1,kolom1]=find(mat_kunci==text(j));
[baris2,kolom2]=find(mat_kunci==text(j+1));

181

182

Judul Buku

if text(j)==text(j+1)
p=[p text(j) 'X' text(j+1)];
elseif baris1==baris2
kolom1=kolom1+2;
kolom2=kolom2+2;
if kolom1>5
kolom1=1;
end;
if kolom2>5
kolom2=1;
end;
,k

p=[pmat_kunci(baris1,kolom1)mat_kunci(baris2
olom2)];

elseif kolom1==kolom2
baris1=baris1+2;
baris2=baris2+2;
if baris1>5
baris1=1;
end;
if baris2>5
baris2=1;
end;
p=[pmat_kunci(baris1,kolom1)mat_ku
nci(baris2,kolom2)];
elseif (baris1~=baris2) & (kolom1~=kolom2)
p=[pmat_kunci(baris1,kolom2)mat_kunci
(baris2,kolom1)];
end;
end;
disp('Hasil CIPHER-nya :')

Pemrograman Linier dengan MATLAB

maka hasil running programnya adalah:


>> k='dilarangmenyontekteman'
k =
dilarangmenyontekteman
>> p='berikanyangterbaikbuatsaudaraanda'
p =
berikanyangterbaikbuatsaudaraanda
>> pb=polibaru(k,5,p)
kuncinya menjadi:
DILARNGMEYOTK
matrik kuncinya adalah
DILAR
NGMEY
OTKBC
FHJPS
UVWXZ
Hasil CIPHER-nya :
pb = XPDABLMNDEHVYAXBLTOXIBPRDODDAXAFOBA

4. Diket : m =
7

1
4

183

184

Judul Buku

plaintext = dilarang merokok di lantai tiga gedung


sic
cipher text = KCHZESKBOWNTSWBGRBCXPINASQKB

Ditanya : a. enkripsi plaintext dengan algoritma hill cipher.


b. dekripsi ciphertext dengan algoritma hill
cipher.
Penyelesaian
untuk menjawab soal 4a diperlukan program fungsi hill yang
digabungkan dengan program fungsi pesanbaru untuk
memasukkan abjad pengganti spasi.
Fungsi hill digunakan untuk menenkripsi plaintext
dengan algoritma hill.
function c=hill(kunci,pesan);
kunci=upper(kunci);
b=blok(pesan,size(kunci,2));
b=b.'-65;
t=kunci*b;
q=mod(t,26);
k=char(q+65);
c=k;
m=[];
for i=1:size(k,2);
for j=1:size(k,1);
m=[m k(j,i)];
c=m;
end;
end;

maka hasil running programnya adalah:

Pemrograman Linier dengan MATLAB

185

>> m=[3 1;7 4]


m =
3

>> plaintext = 'dilarang merokok di lantai tiga gedung


sic'
plaintext =
dilarang merokok di lantai tiga gedung sic
>> p=pesanbaru(plaintext)
masukkan huruf pengganti spasi : x
p =
dilarangXmerokokXdiXlantaiXtigaXgedungXsic
>> c=hill(m,p)
c =

RBHZZPTLDBDSAIAIURVSHZGLIGKDECXOWGDXTLJZA
M
untuk mengdekripsikan ciphertext menggunakan algoritma
hill, diperlukan pemanggilan fungsi-fungsi sebagai berikut:
fungsi invers untuk mencari invers matri kunci dalam
modulo 26
function ki=invers(k)
j=invint1(k);
[r,c]=size(k);
for i=1:c
for s=1:c
kij=adj(k);

186

Judul Buku

end;
end;
ki=mod(j*kij,26);

fungsi invint1 untuk mencari factor gcd


function j=invint1(k);
d=det(k);
x=[];
for i=1:26
if (mod((abs(d)*i),26)== 1) & d < 0
x=mod(-i,26);
elseif (mod((abs(d)*i),26)== 1) & d > 0
x=i;
elseif d==0|gcd(d,26)~=1
x=[];
end;
end;
j=x;

fungsi adj untuk mencari adjoint dari martrik.


function kij=adj(k)
c=size(k,2);
for i=1:c
for j=1:c
a=k;
a(:,j)=[];
a(i,:)=[];
kij(j,i)=(-1)^(i+j)*det(a);
end;

Pemrograman Linier dengan MATLAB

187

end;

untuk menyelesaikan soal no 4b maka fungsi


hillnya adalah:
fungsi dhill
function d=dhill(k,text)
text=upper(text);
co=size(k,2);
b=blok(text,co);
bb=b';
x=abs(bb)-65;
ki=invers(k);
xx=ki*x;
yy=mod(xx,26);
y=char(yy+65);
m=[];
for i=1:size(y,2)
for j=1:size(y,1)
m=[m y(j,i)];
d=m;
end;
end;

maka hasil running programnya adalah:


>> m=[3 1;7 4]
m =
3

dekripsi

188

>> c='KCHZESKBOWNTSWBGRBCXPINASQKB'
c =
KCHZESKBOWNTSWBGRBCXPINASQKB
>> hsl = dhill(m,c)
hsl =

SILAKANXMEROKOKXDIXLAPANGANX

Judul Buku

Pemrograman Linier dengan MATLAB

189

BAB 10
10

Graphic User Interfaces

Untuk mengefisiensikan suatu program maka sering


orang akan mencari sesuatu yang dapat memberikan hasil
yang baik, sederhana dan familiar untuk digunakan, serta
mudah untuk menginputkan data atau melihat hasilnya.
Penggunaan Graphic User Interfaces (GUI), yang
memberikan/menyediakan
fasilitas
seperti
menus,
pushbuttons, sliders dan sebagainya, sesuai dengan
program yang diinginkan atau digunakan tanpa
knowledge dari Matlab. GUI juga memberikan cara untuk
efisiennya manajemen data.
GUI merupakan Matlab script file yang dibuat untuk
menunjukkan analisa dari suatu permasalahan yang
khusus. Ada dua cara untuk merancang GUI . yaitu
dengan metode sederhana yaitu dengan menggunakan
tool khusus untuk merancang suatu yang diinginkan.
Matlab menyediakan toolnya dan dapat dilihat dengan
mengetikkan 'guide' pada MATLAB command window.
Kemampuan maksimum dan kontrolnya adalah
dengan pemrograman, namun demikian hasil yang
diperoleh didapatkan dengan menggunakan perintahperintah
basic user interface commands. Berikut ini

190

Judul Buku

adalah salah satu contoh sederhana penggunaan GUI


menggunakan beberapa perintah dasar MATLAB.
Contohnya : Anggaplah bahwa spektrum suara diplotkan
grafiknya. Ada empat pilihan plotnya yaitu :lin-lin, lin-log, loglin and log-log. GUI di bawah ini membaca data tekanan
yang telah disimpan dalam file dengan ekstensi binary yang
dipilih oleh user, kemudian memplotkannya dalam format
lin-lin maka akan dapat dilihat hasilnya seperti bentuk
frekuensi dan pengguna juga dapat memilih plotnya dalam
bentuk yang lain dengan cara menekan salah satu tombol
yang ada.
Dalam contoh ini akan dibuat dua program m-file yaitu
yang pertama specplot.m yang merupakan function utama
yang akan menampilkan window tempat tempilan grafiknya
dan function yang kedua adalah firstplot.m yang akan
menyediakan pilihan kepada pengguna untuk memilih file
dengan ekstensi bin yang ada dalam direktorinya.
Dan functionnya adalah seperti berikut ini :
% File: specplot.m
% GUI for plotting a user selected frequency spectrum
% in four alternative plot formats, lin-lin,
% lin-log, log-lin and log-log.
%
% Create figure window for graphs
figWindow = figure('Name','Plot alternatives');
% Create file input selection button
fileinpBtn = uicontrol('Style','pushbutton',...
'string','File','position',[5,395,40,20],...
'callback','[fdat,pdat] = firstplot;');
% Press 'File' calls function 'firstplot'
% Create pushbuttons for switching between four
% different plot formats. Set up the axis stings.
X = 'Frequency, [Hz]';
Y = 'Pressure amplitude, [Pa]';
linlinBtn = uicontrol('style','pushbutton',...
'string','lin-lin',...
'position',[200,395,40,20],'callback',...

Pemrograman Linier dengan MATLAB

'plot(fdat,pdat);xlabel(X);ylabel(Y);');
linlogBtn = uicontrol('style','pushbutton',...
'string','lin-log',...
'position',[240,395,40,20],...
'callback',...
'semilogy(fdat,pdat);xlabel(X);ylabel(Y);');
loglinBtn = uicontrol('style','pushbutton',...
'string','log-lin',...
'position',[280,395,40,20],...
'callback',...
'semilogx(fdat,pdat);xlabel(X);ylabel(Y);');
loglogBtn = uicontrol('style','pushbutton',...
'string','log-log',...
'position',[320,395,40,20],...
'callback',...
'loglog(fdat,pdat);xlabel(X); ylabel(Y);');
% Create exit pushbutton with red text.
exitBtn = uicontrol('Style','pushbutton',...
'string','EXIT','position',[510,395,40,20],...
'foregroundcolor',[1 0 0],'callback','close;');

% Script file: firstplot.m


% Brings template for file selection. Reads
% selected filename and path and plots
% spectrum in a lin-lin diagram.
% Output data are frequency and pressure
% amplitude vectors: 'fdat' and 'pdat'.
% Author: U Carlsson, 2001-08-22
function [fdat,pdat] = firstplot
% Call Matlab function 'uigetfile' that
% brings file selction template.
[filename,pathname] = uigetfile('*.bin',...
'Select binary data-file:');
% Change directory
cd(pathname);
% Open file for reading binary floating
% point numbers.
fid = fopen(filename,'rb');
data = fread(fid,'float32');
% Close file
fclose(fid);
% Partition data vector in frequency and

191

192

Judul Buku

% pressure vectors
pdat = data(2:2:length(data));
fdat = data(1:2:length(data));
% Plot pressure signal in a lin-lin diagram
plot(fdat,pdat);
% Define suitable axis labels
xlabel('Frequency, [Hz]');
ylabel('Pressure amplitude, [Pa]');

setelah m-filenya selesai, maka di command MATLAB


(diprompt nya) diketikkan specplot, maka akan muncul :

selanjutnya dengan memilih file maka akan muncul pilihan


file-file *.bin, yang tersedia dalam directori yang dituju.

Pemrograman Linier dengan MATLAB

jika file yang diambil adalah W98setup.bin,


diperoleh hasil untuk format lin-lin.yaitu :

193

maka

dan jika pengguna menginginkan formatnya dalam bentuk


log-lin maka dapat memilih log-lin dari window dan dapat
dilihat hasilnya sebagai berikut :

demikian juga untuk pilihan yang lainnya baik filenya


maupun jenis format plot grafiknya.

194

Judul Buku

BAB 11
11

Pemrograman Linier
dengan MATLAB

11.1 Pendahuluian
Program linier merupakan salah satu cabang riset
operasi yang khusus yang terdiri dari fungsi objektif dan
kendalanya yang kedua-duanya linier. Bentuk umum dari
program linier ini adalah:
Maks
Z=p1x1 + p2x2 ++ pnxn
Kendala
a11x1 + a12x2 ++ a1nxn a1
a21x1 + a22x2 ++ a2nxn a2
.
.
.
am1x1 + am2x2 ++ amnxn am
x1 , x2,, xn 0
ada beberapa terminologi
diantaranya adalah :
daerah feasible
semua kendala

yaitu

dalam
daerah

program
yang

linier

memenuhi

Vertex yaitu titik potong dua kendala

Vertex feasible yaitu vertek yang terletak pada


daerah feasible.

Pemrograman Linier dengan MATLAB

195

Bab ini akan mendiskusikan penggunaan MATLAB


untuk pemrograman linier yang meliputi solusi feasible, titik
ekstrim dan arah ekstrim dari kumpulan kendala yang ada,
penyelesaian geometri dari permasalahan program linier,
metode dua fase, algoritma simpleks, penambahan kendala,
dan algoritma Gomory's cutting plane.

10.2 Function-function MATLAB


untuk Program Linier
Function-function MATLAB untuk Program Linier
yang digunakan adalah sebagai berikut :
Function
abs
all
any
axis
break
clc
convhull
diff
disp
esp
eye
find
fontsize
gca
get
grid
hold
inf

Keterangan
Nilai mutlak
Benar jika semua unsur dari vektor adalah
tidak nol
Benar jika ada unsur dari vektor adalah
tidak nol
Kontrol penskalaan sumbu
Terminasi eksekusi untuk loop while
Pembersihan command window
Convex hull
Diferensiasi dan aproksimasi turunan
Tampilan array
Floating point untuk akurasi yang relatif
Identitas matriks
Dapatkan unsur /elemen nol atau tak nol
Ukuran font
Get handle tro current axis
Mendapatkan sifat-sifat objek
Grid lines
Hold current graph
Infiniti

196

Judul Buku

Berikutnya adalah simbol-simbol yang akan digunakan


dalam bahasan ini :

adalah ruang vektor Euclidean dimensi n. Setiap


anggota dari ruang ini adalah vektor kolom
berdimensi n.
adalah matriks real dengan baris m dan kolom
n.

T adalah operator transposition. Dalam MATLAB the


single quote operator ' digunakan untuk membuat
transposition dari suatu vektor atau matriks real.

xTy adalah inner product (dot product) dari x dan y

x 0 adalah vektor tak negatif. Semua komponen


dari x lebih besar atau sama dengan nol.

10.3 Lima function MATLAB


pembantu
Beberapa function
MATLAB yang ditampilkan
dalam pokok bahsan ini akan melibatkna beberapa
function MATLAB lainnya yang akan membantu dalam
pembuatan pemrograman m-file program linier yaitu ver,
delcols, MRT, MRTD dan Br.
Berikut ini adalah function-function tersebut :
function e = vr(m,i)
% The ith coordinate vector e in the m-dimensional Euclidean
space.
e = zeros(m,1);
e(i) = 1;
function d = delcols(d)
% Delete duplicated columns of the matrix d.
d = union(d',d','rows')';
n = size(d,2);

Pemrograman Linier dengan MATLAB

197

j = [];
for k =1:n
c = d(:,k);
for l=k+1:n
if norm(c - d(:,l),'inf') <= 100*eps
j = [j l];
end
end
end
if ~isempty(j)
j = sort(j);
d(:,j) = [ ];
end

Baris pertama dari kode function delcols diambil dari


file help MATLAB. Dua vektor yang ada berkenaan dengan
duplikasi jika korespondensi entrinya berbeda dengan lebih
dari seratus kali machine epsilon. Daam MATLAB bilangan
ini dinotasikan dengan eps dan merupakan aproksimasi
yang sama untuk :
format long
eps
ans =
2.220446049250313e-016
format short

Untuk menampilkan digit yang pendek atau sedikit


maka formatnya dapat digantikan dengan format (short)
ke long. Untuk mempelajari lebih detail lagi tentang
format yang ada di MATLAB maka dapat dicari di help
format dengan cara mengetikkannya di Command
Window.
Function selanjutnya adalah :
function [row, mi] = MRT(a, b)
% The Minimum Ratio Test (MRT) performed on vectors a and b.
% Output parameters:
% row index of the pivot row
% mi value of the smallest ratio.

198

Judul Buku

m = length(a);
c = 1:m;
a = a(:);
b = b(:);
l = c(b > 0);
[mi, row] = min(a(l)./b(l));
row = l(row);
function col = MRTD(a, b)
% The Maximum Ratio Test performed on vectors a and b.
% This function is called from within the function dsimplex.
% Output parameter:
% col - index of the pivot column.
m = length(a);
c = 1:m;
a = a(:);
b = b(:);
l = c(b < 0);
[mi, col] = max(a(l)./b(l));
col = l(col);
function [m, j] = Br(d)
% Implementation of the Bland's rule applied to the array d.
% This function is called from within the following functions:
% simplex2p, dsimplex, addconstr, simplex and cpa.
% Output parameters:
% m - first negative number in the array d
% j - index of the entry m.
ind = find(d < 0);
if ~isempty(ind)
j = ind(1);
m = d(j);
else
m = [];
j = [];
end

10.4 Solusi Feasible Dasar


Bentuk

dasar

dari

permasalahan

program

dirumuskan seperti berikut ini. Jika diketahui matriks

linier

Pemrograman Linier dengan MATLAB

dan dua vektor


dan
vektor
sedemikian hingga :

199

, untuk mendapatkan

Function vert=feassol (A,b) berikut ini digunakan


untuk menghitung semua solusi feasible dasar, jika ada,
untuk sistem kendala dari bentuk standarnya.
function vert = feassol(A, b)
% Basic feasible solutions vert to the system of constraints
% Ax = b, x >= 0.
% They are stored in columns of the matrix vert.
[m, n] = size(A);
warning off
b = b(:);
vert = [];
if (n >= m)
t = nchoosek(1:n,m);
nv = nchoosek(n,m);
for i=1:nv
y = zeros(n,1);
x = A(:,t(i,:))\b;
if all(x >= 0 & (x ~= inf & x ~= -inf))
y(t(i,:)) = x;
vert = [vert y];
end
end
else
error('Number of equations is greater than the number of
variables.')
end
if ~isempty(vert)
vert = delcols(vert);
else
vert = [];
end

200

Judul Buku

DAFTAR KEPUSTAKAAN
Carlson, B.C. 1977., Special Functions of Applied
Mathematics, Academic Press, New York, 1977.
Cheney W. and D. Kincaid, 1999., Numerical Mathematics
and Computing, Fourth edition, Brooks/Cole
Publishing Company, Pacific Grove.
Davis P.J. and P. Rabinowitz, 1975., Methods of Numerical
Integration, Academic Press, New York.
Fausett, L.V., 1999., Applied Numerical Analysis Using
MATLAB, Prentice Hall, Upper Saddle River, NJ.
Hanselman D.and B. Littlefield, 1998., Mastering MATLAB
5. A Comprehensive Tutorial and Reference,
Prentice Hall, Upper Saddle River, NJ.
Lindfield G. and J. Penny, 1995., Numerical Methods Using
MATLAB, Ellis Horwood, New York,.
Mathews J.H. and K.D. Fink , 1999, Numerical Methods
Using MATLAB, Third edition, Prentice Hall, Upper
Saddle River, NJ.
MATLAB, The Language of Technical Computing. Using
MATLAB, Version 5, The MathWorks, Inc., 1997.
Hanselman D.and B. Littlefield, 2000, MATLAB Bahasa
Komputansi Teknis, Penerbit ANDI Yogyakarta
Neuman, Edward,
Mathematics
Carbondale

Tutorial MATLAB, Department of


Southern
Illinois
University
at

Numerical Methods Using Matlab, ELLIS HORWOOD, 1995

Pemrograman Linier dengan MATLAB

201

http://hmgm.geoph.itb.ac.id/data/paper/Tutorial%20Matlab/Tutorial%20I.pdf.

CURICULUM VITAE PENULIS I


Nama

: Muhammad Arhami, S.Si., M.Kom

202

Judul Buku

Tempat Tgl. Lahir

: Pidie, 29 Oktober 1974

Pekerjaan

: Dosen Politeknik Negeri Lhokseumawe

Alamat

: 1. Jl. Kenari Lr. Hasan No. 36 Uteun Bayi


Lhokseumawe
2. Jl. Selokan Mataram CT III/5c, Blk.
Jatara.Net Kocoran

Yokyakarta.
E-Mail

: abang291074@yahoo.com

Pendidikan:
1. Sekolah Dasar Negeri No.1 Teupin Raya lulus tahun
1986
2. Sekolah Menengah Pertama
Minyeuk lulus tahun 1989

Negeri

Glumpang

3. Sekolah Menengah Atas Negeri Beureunuen lulus


tahun 1992
4. FMIPA Jurusan Matematika UNSYIAH, Banda Aceh lulus
tahun 1998
5. Program
Pascasarjana
Ilmu
Yokyakarta, lulus tahun 2004

Komputer

UGM

Karya tulis/Ilmiah
1. Rancangan Pelayanan Informasi melalui Teknologi
Informasi Intranet di Politeknik Negeri Lhokseumawe.
2. Perbandingan Algoritma Metode Image Averaging
Berdasarkan Mean dan Median Filtering untuk
Meningkatkan Kualitas Visual Citra.
CURICULUM VITAE PENULIS II

Pemrograman Linier dengan MATLAB

Nama

203

: Anita Desiani, S.Si., M.Kom

Tempat/Tanggal Lahir

: Palembang, 11 Desember 1977

Pekerjaan

: Dosen Universitas Sriwijaya Palembang

Alamat
11,

: Jl. Sersan Sani Ujung, Lr. Mufakat I RT


RW 02

Email

No. 3678. Palembang

: adesiani@yahoo.com

Pendidikan Formal

Th 1984 - 1990

SD

Negeri 131

di Palembang

Th 1990 1993

SLTP Negeri 9

di Palembang.

Th 1993 1996

SLTA Negeri 06

di Palembang

Th 1996 2000

Fakultas MIPA Jurusan Matematika


Universitas Sriwijaya Inderalaya

Th 2001- 2003

Program Pascasarjana Ilmu komputer


Universitas Gadjah Mada

PEMROGRAMAN MATLAB

204

Judul Buku

OLEH:
MUHAMMAD ARHAMI
ANITA DESIANI

Anda mungkin juga menyukai