Anda di halaman 1dari 47

Modul Praktikum MATLAB Versi 6.

5 Create by Luke

Modul Praktikum Matlab


Versi 6.5

Oleh
Saluky, S.Si

Sekolah Tinggi Manajemen Informatika dan Komputer CIC


STMIK CIC

Modul Praktikum Matlab STMIK CIC 1


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Bagian1
Pendahuluan

Matlab adalah singkatan dari Matrix Laboratory, software yang dibuat


dengan menggunakan bahasa ini dibuat oleh The Mathworks.inc dan
telah memasuki versi 6.5 Rilis 13. kekuatan matlab terletak pada :
1. Kemudahan manipulasi struktur matriks.
2. Jumlah routine-routine powerful yang berlimpah yang terus
berkembang.
3. Kekuatan fasilitas grafik tiga dimensi yang sangat memadai.
4. Sistem scripting yang memberikan keleluasaan bagi pengguna
untuk mengembangkan dan memodifikasi software untuk
kebutuhan sendiri.
5. Kemampuan interface( misal dengan bahasa C, word dan
mathematica).
6. Dilengkapi dengan toolbox, simulink, stateflow dan sebagainya,
serta mulai melimpahnya source code di internet yang dibuat
dalam matlab( contoh toolbox misalnya : signal processing,
control system, neural networks dan sebagainya).
Semua itu merupakan perangkat yang powerful untuk menyelesaikan
permasalahan sains dan teknik terutama untuk wilayah dimana
komputasi numerik harus dibuat.

GUI di Matlab
Ketika kita membuka GUI Matlab kita bisa melihat lihat dan mencoba
coba perintah pada GUI tersebut dan untuk lebih jelasnya bisa dilihat
dalam demo tersebut. Kita bisa melihat contoh contoh program dan
bisa disave dengan ektension .m(yang merupakan ektensi dari file
matlab)

Modul Praktikum Matlab STMIK CIC 2


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Salah satu yang cukup menarik dari matlab ini adalah kemudahan dan
kejelasannya dalam memahami contoh dan demo serta help yang ada
pada matlab. Kita akan berkenalan lebih dekat dengan yang satu ini.
Kita bisa lihat dari demo ini ternyata begitu banyak persoalan yang
dapat dibangun dengan matlab dengan cara lebih mudah dan lebih
singkat, tanpa mengurangi kepahaman kita pada suatu persoalan(bisa
dibandingkan dengan bahasa C, pascal, delphi atau visual lainnya).
Dengan dilengkapinya matlab dengan toolbox, simulink dan
sebagainya maka semakin menambah kekuatan matlab untuk
menyelesaikan permasalahan yang rumit menjadi lebih mudah.

Modul Praktikum Matlab STMIK CIC 3


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Bagian 2
Kontrol Program

Matlab bisa berlaku seperti bahasa pemrograman C ataupun


pascal yang mempunyai struktur kontrol program, biasanya
pemrograman dengan matlab memerlukan lebih dari satu baris dan
memungkinkan untuk didokumentasikan dalam m-file, kontrol
program ini digunakan untuk memperbaiki tampilan atau membuat
tampilan sesuai yang kita inginkan. Dalam bagian dibahas sebagian
kontrol program yang diperlukan dalam pemrograman menggunakan
matlab :
1. loop for
Loop for meungkinkan sekelompok perintah diulang sebanyak suatu
jumlah yang tetap. Bentuk umum dari loop for adalah :
. for x= array
statement
end
untuk tiap iterasi, x diisi dengan kolom array berikutnya, yaitu dalam
iterasi ke-n dalam loop, x = array(:,n).
contoh 1 :
>>for n = 1 : 10
x(n)=sin(n*pi/10);
end
>> x

x =

Columns 1 through 8

Modul Praktikum Matlab STMIK CIC 4


Modul Praktikum MATLAB Versi 6.5 Create by Luke

0.3090 0.5878 0.8090 0.9511 1.0000


0.9511 0.8090 0.5878

Columns 9 through 10

0.3090 0.0000
contoh 2 :
> for i=1:5
disp('Ini hasil looping 5 kali');
end
Ini hasil looping 5 kali
Ini hasil looping 5 kali
Ini hasil looping 5 kali
Ini hasil looping 5 kali
Ini hasil looping 5 kali

2. loop while
loop for mengerjakan sekelompok perintah yang diulang sebanyak
suatu sejumlah, tetapi loop while mengerjakan sekelompok perintah
yang diulang secara tidak terbatas
Bentuk umum loop while adalah
while ekpresi
statement
end
semua elemen yang dieksekusi diantara while dan end dan harus
bernilai benar
contoh :
>> x=0;
>> while x<5
disp('Diulang 5 kali');

Modul Praktikum Matlab STMIK CIC 5


Modul Praktikum MATLAB Versi 6.5 Create by Luke

x=x+1;
end
Diulang 5 kali
Diulang 5 kali
Diulang 5 kali
Diulang 5 kali
Diulang 5 kali

3. Kontruksi if-else-end
Seringkali sederetan perintah harus dikerjakan dengan didasarkan
pada hasil tes rasional. Dalam bahasa pemrograman, logika ini
dikerjakan dengan variasi kontruksi if-else-end. Bentuk paling
sederhana kontruksi if-else-end adalah :
If ekpresi
Pertintah
End
Contoh
>> angka=-4;
>> if angka > 0
disp('nilai nya adalah positif');
else
disp('nilainya adalah negatif');
end
nilainya adalah negatif

Modul Praktikum Matlab STMIK CIC 6


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Bagian 3
Fungsi M-File

M-file selain dipakai sebagai penamaan file juga bisa dipakai


untuk menamakan fungsi, sehingga fungsi fungsi yang kita buat di
jendela editor bisa di simpan dengan ektensi .m sama dengan file yang
kita panggi dijendela editor. Saat kita menggunakan fungsi Matlab
seperti inv, abs, cos, sin dan sqrt, matlab menerima variabel
berdasarkan variabel yang kita berikan.
Fungsi M-file mirip dengan script file dimana keduanya
merupakan file teks dengan ektensi .m . sebagaimana script M-file,
fungsi m-file tidak dimasukkan dalam jendela command window tetapi
file tersendiri yang dibuat dengan editor teks.
Aturan dan sifat sifat
Suatu fungsi M-file harus mengikuti beberapa aturan. Fungsi M-file
juga mempunyai sejumlah penting. Aturan aturan tersebut meliputi ;
• Nama fungsi dan nama file harus identik. Contoh : fungsi flipud
disimpan dalam file yang bernama flipud.m
• Pertama kali matlab mengeksekusi suatu fungsi M file matlab
membuka file fungsi tersebut dan mengkompilasi perintah
perintah didalamnya menjadi suatu representasi internal dalam
memori yang mempercepat eksekusi untuk semua pemanggilan
berikutnya.
• Setiap fungsi mempunyai 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.
Contoh fungsi: Listing program animasi spiner.m
function spinner(action);

Modul Praktikum Matlab STMIK CIC 7


Modul Praktikum MATLAB Versi 6.5 Create by Luke

%SPINNER Colorful lines spinning through space.


% demonstrates some MATLAB animation capabilities.

% Ned Gulley, 6-21-93


% Copyright 1984-2002 The MathWorks, Inc.
% $Revision: 5.9 $ $Date: 2002/04/08 20:04:53 $

% Possible actions:
% initialize
% start

% Information regarding the play status will be held in


% the axis user data according to the following table:
play= 1;
stop=-1;

if nargin<1,
action='initialize';
end;

if strcmp(action,'initialize'),
oldFigNumber=watchon;

figNumber=figure( ...
'Name','Color Spinner', ...
'NumberTitle','off', ...
'Visible','off');
axes( ...
'Units','normalized', ...
'Position',[0.05 0.05 0.75 0.90], ...
'Visible','off');

Modul Praktikum Matlab STMIK CIC 8


Modul Praktikum MATLAB Versi 6.5 Create by Luke

text(0,0,'Press the "Start" button to see the Spinner


demo', ...
'HorizontalAlignment','center');
axis([-1 1 -1 1]);

%===================================
% Information for all buttons
labelColor=[0.8 0.8 0.8];
yInitPos=0.90;
xPos=0.85;
btnLen=0.10;
btnWid=0.10;
% Spacing between the button and the next command's
label
spacing=0.05;

%====================================
% The CONSOLE frame
frmBorder=0.02;
yPos=0.05-frmBorder;
frmPos=[xPos-frmBorder yPos btnLen+2*frmBorder
0.9+2*frmBorder];
h=uicontrol( ...
'Style','frame', ...
'Units','normalized', ...
'Position',frmPos, ...
'BackgroundColor',[0.50 0.50 0.50]);

%====================================
% The START button
btnNumber=1;
yPos=0.90-(btnNumber-1)*(btnWid+spacing);

Modul Praktikum Matlab STMIK CIC 9


Modul Praktikum MATLAB Versi 6.5 Create by Luke

labelStr='Start';
cmdStr='start';
callbackStr='spinner(''start'');';

% Generic popup button information


btnPos=[xPos yPos-spacing btnLen btnWid];
startHndl=uicontrol( ...
'Style','pushbutton', ...
'Units','normalized', ...
'Position',btnPos, ...
'String',labelStr, ...
'Interruptible','on', ...
'Callback',callbackStr);

%====================================
% The STOP button
btnNumber=2;
yPos=0.90-(btnNumber-1)*(btnWid+spacing);
labelStr='Stop';
% Setting userdata to -1 (=stop) will stop the demo.
callbackStr='set(gca,''Userdata'',-1)';

% Generic popup button information


btnPos=[xPos yPos-spacing btnLen btnWid];
stopHndl=uicontrol( ...
'Style','pushbutton', ...
'Units','normalized', ...
'Position',btnPos, ...
'Enable','off', ...
'String',labelStr, ...
'Callback',callbackStr);

Modul Praktikum Matlab STMIK CIC 10


Modul Praktikum MATLAB Versi 6.5 Create by Luke

%====================================
% The INFO button
labelStr='Info';
callbackStr='spinner(''info'')';
infoHndl=uicontrol( ...
'Style','push', ...
'Units','normalized', ...
'Position',[xPos 0.20 btnLen 0.10], ...
'String',labelStr, ...
'Callback',callbackStr);

%====================================
% The CLOSE button
labelStr='Close';
callbackStr='close(gcf)';
closeHndl=uicontrol( ...
'Style','push', ...
'Units','normalized', ...
'Position',[xPos 0.05 btnLen 0.10], ...
'String',labelStr, ...
'Callback',callbackStr);

% Uncover the figure


hndlList=[startHndl stopHndl infoHndl closeHndl];
set(figNumber, ...
'Visible','on', ...
'UserData',hndlList);

watchoff(oldFigNumber);
figure(figNumber);

elseif strcmp(action,'start'),

Modul Praktikum Matlab STMIK CIC 11


Modul Praktikum MATLAB Versi 6.5 Create by Luke

axHndl=gca;
figNumber=gcf;
hndlList=get(figNumber,'Userdata');
startHndl=hndlList(1);
stopHndl=hndlList(2);
infoHndl=hndlList(3);
closeHndl=hndlList(4);
set([startHndl infoHndl closeHndl],'Enable','off');
set(stopHndl,'Enable','on');

% ====== Start of Demo


cla
colormap([])
N=50; % number of lines
M=50; % number of colors
map=hsv(M);
set(figNumber,'BackingStore','off');
set(axHndl, ...
'XLim',[-0.01 1.01],'YLim',[-0.01 1.01], ...
'XTick',[],'YTick',[], ...
'Box','on', ...
'Drawmode','fast', ...
'ColorOrder',map, ...
'Visible','on', ...
'NextPlot','add', ...
'UserData',play);

h=plot([0 0],zeros(2,N),'EraseMode','background');

x=rand;
y=rand;
x1=rand;

Modul Praktikum Matlab STMIK CIC 12


Modul Praktikum MATLAB Versi 6.5 Create by Luke

y1=rand;
dx=.01;
dy=.01;
dx1=.01;
dy1=.01;
mind=.001;
maxd=.05;
i=0;

while get(axHndl,'Userdata')==play,
i=i+1;
x=x+dx;
y=y+dy;
x1=x1+dx1;
y1=y1+dy1;
if (x>1),
x=1;
dx=-(rand*(maxd-mind)+mind);
end
if (x<0),
x=0;
dx=(rand*(maxd-mind)+mind);
end
if (y>1),
y=1;
dy=-(rand*(maxd-mind)+mind);
end
if (y<0),
y=0;
dy=(rand*(maxd-mind)+mind);
end

Modul Praktikum Matlab STMIK CIC 13


Modul Praktikum MATLAB Versi 6.5 Create by Luke

if (x1>1),
x1=1;
dx1=-(rand*(maxd-mind)+mind);
end
if (x1<0),
x1=0;
dx1=(rand*(maxd-mind)+mind);
end
if (y1>1),
y1=1;
dy1=-(rand*(maxd-mind)+mind);
end
if (y1<0),
y1=0;
dy1=(rand*(maxd-mind)+mind);
end
set(h(rem(i,N)+1), ...
'Xdata',[x x1], ...
'Ydata',[y y1]);
%'Color',map(rem(i,M)+1,:));
drawnow;
end
% ====== End of Demo
set([startHndl infoHndl closeHndl],'Enable','on');
set(stopHndl,'Enable','off');
elseif strcmp(action,'info');
helpwin(mfilename);
end; % if strcmp(action, ...

Modul Praktikum Matlab STMIK CIC 14


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Output :

Gambar : Animasi Spinner

Modul Praktikum Matlab STMIK CIC 15


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Bagian 4
Operasi Array

Semua komputasi yang dikerjakan sejauh ini hanya melibatkan


bilangan tunggal yang disebut skalar. Opeasi skalar memang
merupakan dasar matematika. Namun jika dalam sesaat kita ingin
melakuakan operasi yang sama pada beberapa bilangan, perulangan
operasi skalar akan menghabiskan waktu dan tentu saja tidak praktis.
Untuk mengatasi masalah ini matlab menyediakan operasi pada array
data.
Array Sederhana
Perhatikan masalah saat kita diharuskan untuk menggambar grafik
dengan fungsi y = sin(x) ; 0 ≤ x ≤ π , tidak mungkin kita
menghitung semua titik yang kita perlukan secara satu persatu.
Sintaks sederhana untuk menunjukan semua titik tersebut adalah
>> x=0:20:180

x=

0 20 40 60 80 100 120 140 160 180

>> y=sin(x)

y=

Columns 1 through 8

0 0.9129 0.7451 -0.3048 -0.9939 -0.5064 0.5806 0.9802

Modul Praktikum Matlab STMIK CIC 16


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Columns 9 through 10

0.2194 -0.8012

Pada tulisan x=0:10:180 dimaksudkan dengan :


- x merupakan variabel yang menampung array
- 0 merupakan batas bawah dari array
- 10 merupakan selang atau interval
- 180 merupakan batas atas dari array
Pada tulisan y=sin(x) dimaksudkan dengan :
- y merupakan variabel array yang menampung perhitungan dengan
sin x dimana x dari 0 sampai 180 dengan interval 10
Jika kita hanya membutuhkan nilai dari interval tertentu maka kita
bisa menuliskannya dengan sintaks:
>> x(4) % elemen array ke 4

ans =

60
Maksudnya adalah nilai dari x yang ke empat dari array x adalah 60
>> y(5) % nilai array ke 5

ans =

-0.9939
maksudnya adalah nilai array y yang ke 5 adalah -0.9939
kita juga bisa menuliskan nilai array tertentu dengan menunjukan
indeksnya contoh:

Modul Praktikum Matlab STMIK CIC 17


Modul Praktikum MATLAB Versi 6.5 Create by Luke

>> x(2:4)

ans =

20 40 60
maksudnya adalah semua nilai dengan indeks 2 sampai dengan 4 pada
array x , 2:4 berarti menghitung dari 2 sampai 5
Array n dimensi
Array yang kita bahas diatas merupakan array 1 dimensi, gabuangan
dari array merupakan sebuah matriks, sekarang kita akan menuliskan
bagaimana menuliskan array dalam n dimensi.
Contoh:
> A=[1 2 3;4 5 6;7 8 9]

A=

1 2 3
4 5 6
7 8 9
merupakan matriks dengan 3 kolom dengan 3 baris
dalam array kita juga bisa memanipulasi elemen elemen yang ada
dalam array tersebut contohnya:
>> A(3,3)=0

A=

1 2 3
4 5 6
7 8 0

Modul Praktikum Matlab STMIK CIC 18


Modul Praktikum MATLAB Versi 6.5 Create by Luke

maksudnya mengganti elemen 3,3 menjadi 0


untuk mengetahui jumlah array kita gunakan sintaks size:
contoh:
>> size(A)

ans =

3 3
maksudnya matriks A merupakan matriks 3 x 3
Menciptakan matriks B dengan urutan baris A yang dibalik
>> B=A(3:-1:1,:)

B=

7 8 0
4 5 6
1 2 3
mengganti semua elemen baris ke 2 dari matriks B dengan 0 maka
sintaksnya:
>> B(2,:)=0

B=

7 8 0
0 0 0
1 2 3
Untuk membuat transpose dari matriks B kita gunakan sintaks:
>> E=B'

Modul Praktikum Matlab STMIK CIC 19


Modul Praktikum MATLAB Versi 6.5 Create by Luke

E=

7 0 1
8 0 2
0 0 3
sehingga bentuk dari perkalian manual yang ada dimatriks ada yang
langusng digunakan pada sintaks matlab.

Contoh Penggunaan Aplikasi Array


Problem: Elemen radioaktif polonium mempunyai waktu paruh 140
hari, yang berarti bahwa, karena radoaktif meluruh, jumlah polonium
yang tertinggal setelah 140 hari adalah setengah dari jumlah semula.
Jika dimiliki 10 gram polonium hari ini, berapa banyak yang tersisa
pada akhir setiap minggu selama 10 minggu ?
Penyelesaian : Menggunakan persamaan :
Jumlah_tinggal = jumlah_semula*0.5waktu/waktu_paruh
Untuk masalah ini, solusi dari MATLAB adalah :
>> initial_amount=10;
>> half_life=140;
>> time=7:7:70 %akhir dari 10 minggu pertama

time =

7 14 21 28 35 42 49 56 63 70

>> amount_left=initial_amount*0.5.^(time/half_life)

amount_left =

Modul Praktikum Matlab STMIK CIC 20


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Columns 1 through 8

9.6594 9.3303 9.0125 8.7055 8.4090 8.1225 7.8458


7.5786

Columns 9 through 10

7.3204 7.0711

Dengan matematika array sangat mudah untuk mengevaluasi suatu


ekspresi dengan banyak nilai untuk satu variabel. Perhatikan bahwa
pemangkatan titik .^ digunakan karena kita ingin menghitung 0.5
yang akan dipangkatkan dengan setiap elemen pada array eksponen.
Data ini dengan mudah digambarkan dengan matlab.
>> plot(time/7,amount_left)
>> xlabel('Jumlah Minggu'),ylabel('Jumlah Polonium tersisa')
hasilnya:

Modul Praktikum Matlab STMIK CIC 21


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Contoh Perhitungan Konsentrasi dengan Matematika Array


Problem : Sebagai bagian dari suatu proses pembuatan suku cadang
di suatu proses pembuatan suku cadang di suatu pabrik otomatis,
suku cadang tersebut dicelupkan ke air untuk pendinginan, kemudian
dicelup dibak air asam untuk membersihkan. Setelah beberapa lama,
konsentrasi larutan asam menurun karena air saat pencelupan
bertambah dan larutan yang terbuang saat suku cadang tadi diambil
dari bak. Untuk memelihara kualitas, keasaman larutan asam tidak
boleh kurang dari suatu batas minimum. Dimulai dengan konsentrasi
asam 90%. Jika konsentrasi minimum adalah 50%, air yang
bertambah ke bak asam adalah 1% dari volume bak, dan 1 % dari
larutan terbuang saat suku cadang dikeluarkan, berapa banyak suku
cadang dapat dicelupkan ke bak air asam sebelum keasaman larutan
dalam bak berada di bawah batas minimum?
Penyelesaian :
%Script M file example.m
initial_con=90;
min_con=50;
lost=1:10 % 1% sampai 10% dengan kenaikan 1%
n=floor(log(initial_con/min_con)./log(1+lost/100))
stem(lost,n)
xlabel('Persentase yang hilang setiap kali pencelupan')
ylabel('Jumlah Pencelupan')
title('Contoh Pencelupan Bak Air-Asam')
hasil :
>> example

lost =

Modul Praktikum Matlab STMIK CIC 22


Modul Praktikum MATLAB Versi 6.5 Create by Luke

1 2 3 4 5 6 7 8 9 10

n=

59 29 19 14 12 10 8 7 6 6

Modul Praktikum Matlab STMIK CIC 23


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Bagian 5
Akar akar Persamaan

Permasalahan pemecahan persamaan nonlinear sering muncul


dari ebrbagai macam persoalan praktis. Bentuk umum
permasalahannya secara sederhana adalah menemukan sebuah nilai
variabel x sedemikian sehingga f(x) = 0, dimana f adalah sembarang
fungsi nonlinear x, sedangkan x merupakan solusi atau akar
persamaan ini. Sebelum kita lebih jauh tentang akar akar persamaan,
sebelumnya kita ulas sedikit tentang bagaimana menggambarkan
fungsi
Contoh:
Gambarkan fungsi dibawah ini :
1. y=(x – 1)3(x + 2)2 ( x – 3) ;0≤x≤4
jawab :
% Gambar1.m
x=0:0.1:4;
y=((x + 1).^3).*((x + 2).^2) .*( x - 3);
plot(x,y)
xlabel('Sumbu x')
ylabel('Sumbu y')

Modul Praktikum Matlab STMIK CIC 24


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Running :
>>gambar1

Gambar dari fungsi y=(x – 1)3(x + 2)2 ( x – 3) ;0≤x≤4

⎛− x⎞
2. y=exp ⎜ ⎟ sin(10 x) ; 0 ≤ x ≤ 20
⎝ 10 ⎠
Jawab:
% Gambar2.m
x=0:0.1:20;
y=exp(-x/10).*sin(10*x);
plot(x,y)
xlabel('Sumbu x')
ylabel('Sumbu y')

Modul Praktikum Matlab STMIK CIC 25


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Running :
>>gambar2.m

⎛−x⎞
Hasil dari plot fungsi y=exp ⎜ ⎟ sin(10 x) ; 0 ≤ x ≤ 20
⎝ 10 ⎠
Untuk persamaan non linear seperti diatas yang melibatkan fungsi
transenden, tugas mencari akar akar merupakan pekerjaan yang
cukup sulit apalagi ketika jumlah akar akarnya tidak diketahui atau
mungkin tak terbatas banyak akarnya. (Lihat contoh no 2) .
Sebetulnya secara sederhana kita bisa mencari titik di x yang
berpotongan dengan sumbu y = 0 secara grafik( solusi grafik
merupakan solusi juga) tapi itu masih terlalu kasar dan tidak terlalu
akurat apalagi untuk fungsi fungsi yang tidak diketahui solusinya
terletak di x berapa.

Modul Praktikum Matlab STMIK CIC 26


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Metoda Newton
Metoda ini merupakan solusi persamaan f(x) = 0 berdasarkan pada
sifat geometri sederhana tangen. Metode ini membutuhkan beberapa
aprokimasi awal untuk turunan f(x)nya berada pada daerah yang
diinginkan.

f ( x0 )
f ' ( x0 ) =
( x1 − x0 )
f ( x0 )
x1 = x0 −
f ' ( x0 )
dapat ditulis :

f ( xr )
xr +1 = xr − dimana r = 0, 1, 2, …
f ' ( xr )
f(x)

0 x0 x2
x1

Modul Praktikum Matlab STMIK CIC 27


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Coba akar1
Function[res,it]=fnewton(func,dfunc,x,tol)
% x adalah nilai awal, tol adalah akurasi yang diinginkan
it=0;
xo=x;
d=feval(func,xo)/feval(dfunc,xo);
while abs(d)>tol
x1=xo – d;
it=it+1;
xo=x1;
d=feval(func,xo)/feval(dfunc,xo);
end;
res=xo

kita coba mencari sebuah akar persamaan(x – 1)3(x + 2)2 ( x – 3) = 0


untuk menggunkan metoda newton kita harus mendefinisikan fungsi
dan turunannya sehingga :
function F=f302(x);
F=x.^3 – 10.0*x.^2 + 29.0*x-20.0;
Function F=f303(x);
F=2*x.^2-20*x+29;

Maka kita panggil f newton tadi sebagai berikut :


>>[x,it]=fnewton(‘f302’,’f303’,7,.00005)
x=5.0000
it=6

Modul Praktikum Matlab STMIK CIC 28


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Permasalahan yang sering muncul dalam mencari akar adalah :


1. Mencari aprokimasi awal yang baik
2. Fungsi berkondisi ‘sakit’
3. Memutuskan pada kriteria konvergensi yang paling cocok
4. Diskontinuitas pada persamaan yang dipecahkan

Fungsi fZero
Beberapa metoda di pencarian akar ini punya kelebihan dan
kekurangannya. Metode Brent mengkombinasikan interpolasi kuadratik
inversi dengan bisection untuk mendapatkan metode yang powerfull
yang terbukti cukup sukses yang mempunyai jangkauan yang luas
pada permasalahan yang cukup sulit.
Variasi metode ini secara langsung tersedia pada matlab yaitu fzero.

Misalnya untuk ( e x − cos x ) 3 = 0 dengan toleransi 0.00005

Jawab
function F=f307(x);
F=(exp(x)-cos(x)).^3;

%file utama
x=-4:.0:0.5;
plot(x,f307(x));grid on;
xlabel('Sumbu X');ylabel('Sumbu Y');
root=fzero('f307',1.65, 0.00005);
fprintf('Akar persamaan ini adalah %6.4f \n',root);

Modul Praktikum Matlab STMIK CIC 29


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Modul Praktikum Matlab STMIK CIC 30


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Bagian 6
Deferensial dan Pengintegralan

Diferensial dan Integral merupakan operasi fundamental dalam


kalkulus dan hampir setiap bidang matematika, sains dan teknik.
Menentukan turunan fungsi secara analitik mungkin menyulitkan
meskipun relatif langsung.
Pembalikan dari proses ini akan menentukan integral fungsi, tapi
lebih sering sulit jika secara analitik atau bahkan tidak mungkin.
Dalam Matlab, diferensial untuk fungsi polinom adalah relatif
mudah. Misalnya f(x) = x5 + 2x4 + 5x2 + 7x + 3 maka ambilah
koefisien koefisiennya.
Contoh:
>> g=[1 2 5 7 3]

g=

1 2 5 7 3

>> h=polyder(g)

h=

4 6 10 7
Bentuk-bentuk deferensial lain juga bisa diperoleh apalag jika
menggunakan symbolyc math toolbox. Tapi tidak setiap matlab
dilengkapi dengan toolbox ini. Namun itu tidak masalah, kita akan

Modul Praktikum Matlab STMIK CIC 31


Modul Praktikum MATLAB Versi 6.5 Create by Luke

coba membuat sendiri penyelesaiannya dengan memanfaatkan deret


Taylor.

Diferensial Numerik
function q=diffgen(func,n,x,h);
if ((n=1)|(n==2)|(n==3)|(n==4))
c=zeros(4,7);
c(1,:)=[ 0 1 -8 0 8 -1 0];
c(2,:)=[0 -1 16 -30 16 -1 0];
c(3,:)=[1.5 -12 19.5 0 -19.5 12 -1.5];
c(4,:)=[-2 24 -78 112 -78 24 -2];
y=feval(func,x+ [-3:3]*h);
q=c(n,:)*y' ; q = q/(12*h^n);
else
disp('n harus 1, 2, 3 atau 4 ');break
end
Penggunaan fungsi diatas:
Jika kita mempunya y = cos(x) dan kita akan menghitung turunan
kedua dengan x = 1.2 dengan h atau ketelitian 0.01 maka dituliskan:
>> hasil=diffgen('cos',2,1.2,.01)

hasil =

-0.3624
Jika kita ingin menghitung sebuah diferensial disuatu titik maka kita
harus mendefinisikan fungsinya terlebih dahulu.

Modul Praktikum Matlab STMIK CIC 32


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Integrasi Numerik
Integral biasanya didefinisikan sebagai proses penjumlahan
tetapi juga diinterpretasikan sebagai daerah dibawah kurva y = f(x)
dari a ke b
b
L = ∫a
f ( x ) dx

daerah diatas x dihitung positif sementara dibawah x dihitung negatif.


Banyak metode numerik untuk integrasi didasarkan pada impretasi
untuk mendapatkan aprokimasi integralnya. Misalnya fungsi trapz
berdasarkan impretasi bangunan trapesium.
Kita akan mencoba menghitung integral dengan berbagai metoda
numrik untuk menghitung integral fungsi
1 1
y= + −6
( x − 3) + 0.01 ( x − 9) 2 + 0.04
2

Jawab:
Pertama kita buat dulu fungsi dari persamaan diatas
function y=humps(x)
y=1./(x-3).^2+.01)+1./((x-9).^2+.04)-6;
1. Mengitung menggunakan trapz
>> x=-1:.17:2;
>> y=humps(x);
>> area=trapz(x,y)

area =

-16.6475
2. Menghitung menggunakan quad
>> x=-1:.17:2;
>> y=humps(x);

Modul Praktikum Matlab STMIK CIC 33


Modul Praktikum MATLAB Versi 6.5 Create by Luke

>> area=quad('humps',-1,2)
area =

-17.2104
Permasalahan yang mungkin muncul adalah :
1. Fungsi kontinu pada daerah integral tetapi turunannya
diskontinu atau singular
2. Fungsi diskontinue pada daerah integrasi
3. Fungsi mempunyai singularitas pada daerah integrasi
4. Daerah integrasi tak berhingga

Modul Praktikum Matlab STMIK CIC 34


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Bagian 7
Contoh Program Aplikasi Modelling
dengan Matlab

Traveling Salesman
Permasalahan: Kita ingin mengetahui jalan yang terpendek yang
harus dilalui oleh seorang salesman, teori dasarnya adalah pada teori
graph dalam mata kuliah matematika diskrit.
Jawaban
Listing travel.m
function travel(action);
% Demo program TRAVEL Traveling salesman
% demo ini merupakan animasi yang disebut
% "Traveling Salesman" .
% Masalahnya adalah mencari jalan terpendek
% yang harus dilalui.

% Algoritma demo ini sangatlah sederhana


% Dan sangat cepat penyelesaiannya
% Menggunakan menu pop up kota untuk membedakan masing
masing animasi
% Klick "Start"
% dan "Stop" buttons untuk menyelesaikan animasi
% Kota yang dipilih akan dikunjungi secara random.
play= 1;
stop=-1;

if nargin<1,
action='initialize';

Modul Praktikum Matlab STMIK CIC 35


Modul Praktikum MATLAB Versi 6.5 Create by Luke

end;

switch action
case 'initialize',
oldFigNumber=watchon;

figNumber=figure( ...
'Name','Travel: The Traveling Salesman Problem', ...
'NumberTitle','off', ...
'Visible','off', ...
'DoubleBuffer','on', ...
'Color', [0 0 0], ...
'BackingStore','off');
axes( ...
'Units','normalized', ...
'Position',[0.05 0.05 0.75 0.90], ...
'Visible','off', ...
'NextPlot','add');

text(0,0,'Press the "Start" button to see the Traveling


Salesman demo', ...
'HorizontalAlignment','center');
axis([-1 1 -1 1]);

%===================================
% Information for all buttons
labelColor=[0.8 0.8 0.8];
yInitPos=0.90;
xPos=0.85;
btnWid=0.10;
btnHt=0.10;

Modul Praktikum Matlab STMIK CIC 36


Modul Praktikum MATLAB Versi 6.5 Create by Luke

% Spacing between the button and the next command's


label
spacing=0.05;

%====================================
% The CONSOLE frame
frmBorder=0.02;
yPos=0.05-frmBorder;
frmPos=[xPos-frmBorder yPos btnWid+2*frmBorder
0.9+2*frmBorder];
h=uicontrol( ...
'Style','frame', ...
'Units','normalized', ...
'Position',frmPos, ...
'BackgroundColor',[0.50 0.50 0.50]);

%====================================
% The START button
btnNumber=1;
yPos=0.90-(btnNumber-1)*(btnHt+spacing);
labelStr='Start';
cmdStr='start';
callbackStr='travel(''start'');';

% Generic button information


btnPos=[xPos yPos-spacing btnWid btnHt];
startHndl=uicontrol( ...
'Style','pushbutton', ...
'Units','normalized', ...
'Position',btnPos, ...
'String',labelStr, ...
'Interruptible','on', ...

Modul Praktikum Matlab STMIK CIC 37


Modul Praktikum MATLAB Versi 6.5 Create by Luke

'Callback',callbackStr);

%====================================
% The CITIES popup button
btnNumber=2;
yPos=0.90-(btnNumber-1)*(btnHt+spacing);
textStr='Cities';
popupStr=reshape(' 15 20 25 30 35 40 45 50
',4,8)';

% Generic button information


btnPos1=[xPos yPos-spacing+btnHt/2 btnWid btnHt/2];
btnPos2=[xPos yPos-spacing btnWid btnHt/2];
popupHndl=uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',btnPos1, ...
'String',textStr);
btnPos=[xPos yPos-spacing btnWid btnHt/2];
popupHndl=uicontrol( ...
'Style','popup', ...
'Value',4, ...t
'Units','normalized', ...
'Position',btnPos2, ...
'String',popupStr);

%====================================
% The STOP button
btnNumber=3;
yPos=0.90-(btnNumber-1)*(btnHt+spacing);
labelStr='Stop';
% Setting userdata to -1 (=stop) will stop the demo.

Modul Praktikum Matlab STMIK CIC 38


Modul Praktikum MATLAB Versi 6.5 Create by Luke

callbackStr='set(gca,''Userdata'',-1)';

% Generic button information


btnPos=[xPos yPos-spacing btnWid btnHt];
stopHndl=uicontrol( ...
'Style','pushbutton', ...
'Units','normalized', ...
'Position',btnPos, ...
'Enable','off', ...
'String',labelStr, ...
'Callback',callbackStr);

%====================================
% The INFO button
labelStr='Info';
callbackStr='travel(''info'')';
infoHndl=uicontrol( ...
'Style','push', ...
'Units','normalized', ...
'Position',[xPos 0.20 btnWid 0.10], ...
'String',labelStr, ...
'Callback',callbackStr);

%====================================
% The CLOSE button
labelStr='Close';
callbackStr='close(gcf)';
closeHndl=uicontrol( ...
'Style','push', ...
'Units','normalized', ...
'Position',[xPos 0.05 btnWid 0.10], ...
'String',labelStr, ...

Modul Praktikum Matlab STMIK CIC 39


Modul Praktikum MATLAB Versi 6.5 Create by Luke

'Callback',callbackStr);

% Uncover the figure


hndlList=[startHndl popupHndl stopHndl infoHndl
closeHndl];
set(figNumber, ...
'Visible','on', ...
'UserData',hndlList);
watchoff(oldFigNumber);
figure(figNumber);

case 'start',
WNumber=watchon;
axHndl=gca;
figNumber=gcf;
hndlList=get(figNumber,'Userdata');
startHndl=hndlList(1);
popupHndl=hndlList(2);
stopHndl=hndlList(3);
infoHndl=hndlList(4);
closeHndl=hndlList(5);
set([startHndl closeHndl infoHndl],'Enable','off');
set(stopHndl,'Enable','on');
set(axHndl,'Userdata',play);
set(popupHndl, 'Enable', 'off');
% ====== Start of Demo
% Travel problem
% This is the main program for the Traveling Salesman
Problem.
% This function makes use of the following other
functions:
% inside

Modul Praktikum Matlab STMIK CIC 40


Modul Praktikum MATLAB Versi 6.5 Create by Luke

% Lay down a picture of the United States for graphic


appeal.
load('usborder.mat','x','y','xx','yy');
% The file usborder.mat contains a map of the US in the
variables
% x and y, and a geometrically simplified version of the
same map
% in the variables xx and yy.
cla;
plot(x,y,'Color','cyan');
axis off;
axis([-0.1 1.5 -0.2 1.2]);
set(axHndl,'Drawmode','Fast');
hold on;
drawnow;

nptsStr=get(popupHndl,'String');
nptsVal=get(popupHndl,'Value');

npts=str2double(nptsStr(nptsVal,:));
set(popupHndl, 'Enable', 'off');
% ...else generate the random cities to visit
X=[];
Y=[];
% Form the US border in imaginary coords for the INSIDE
routine
w=xx+i*yy;
n=0;
while n<npts,
a=rand*1.4+i*rand;
if inside(a,w),

Modul Praktikum Matlab STMIK CIC 41


Modul Praktikum MATLAB Versi 6.5 Create by Luke

X=[X; real(a)];
Y=[Y; imag(a)];
n=n+1;
end;
end;
xy=[X Y];

% Calculate the distance matrix for all of the cities


distmatrix = zeros(npts);
for count1=1:npts,
for count2=1:count1,
x1 = xy(count1,1);
y1 = xy(count1,2);
x2 = xy(count2,1);
y2 = xy(count2,2);
distmatrix(count1,count2)=sqrt((x1-x2)^2+(y1-
y2)^2);

distmatrix(count2,count1)=distmatrix(count1,count2);
end;
end;

% Generate an initial random path between those cities


p=randperm(npts);

newxy=xy(p,:);
newxy=[newxy; newxy(1,:)];
xdata=newxy(:,1);
ydata=newxy(:,2);
watchoff(WNumber);
plot(xdata,ydata,'r.','Markersize',24);
plothandle=plot(xdata,ydata,'yellow','LineWidth',2);

Modul Praktikum Matlab STMIK CIC 42


Modul Praktikum MATLAB Versi 6.5 Create by Luke

axis off;
drawnow;

len=LocalPathLength(p,distmatrix);
lenhist=len;

while get(axHndl,'Userdata')==play,
drawnow;
drawFlag=0;

% Try a point for point swap


% ========================
swpt1=floor(npts*rand)+1;
swpt2=floor(npts*rand)+1;

swptlo=min(swpt1,swpt2);
swpthi=max(swpt1,swpt2);

order=1:npts;
order(swptlo:swpthi)=order(swpthi:-1:swptlo);
pnew = p(order);

lennew=LocalPathLength(pnew,distmatrix);
if lennew<len,
p=pnew;
len=lennew;
drawFlag=1;
end;
% ========================

% Try a single point insertion


% ========================

Modul Praktikum Matlab STMIK CIC 43


Modul Praktikum MATLAB Versi 6.5 Create by Luke

swpt1=floor(npts*rand)+1;
swpt2=floor((npts-1)*rand)+1;

order=1:npts;
order(swpt1)=[];
order=[order(1:swpt2) swpt1 order((swpt2+1):(npts-
1))];
pnew = p(order);

lennew=LocalPathLength(pnew,distmatrix);
if lennew<len,
p=pnew;
len=lennew;
drawFlag=1;
end

if drawFlag,
newxy=xy(p,:);
newxy=[newxy; newxy(1,:)];
xdata=newxy(:,1);
ydata=newxy(:,2);
set(plothandle,'XData',xdata,'YData',ydata);
drawnow;
end;
% ========================
end;

% ====== End of Demo


set([startHndl closeHndl infoHndl],'Enable','on');
set(stopHndl,'Enable','off');
set(popupHndl, 'Enable', 'on');
case 'info',

Modul Praktikum Matlab STMIK CIC 44


Modul Praktikum MATLAB Versi 6.5 Create by Luke

helpwin(mfilename)

end; % if strcmp(action, ...

function total=LocalPathLength(p,distmatrix);
npts = size(p,2);
total=sum(distmatrix([(p-1)*npts + p([end 1:(end-1)])]));
Contoh OutPut
Trafeling Salesman dengan 25 Kota dihasilkan :

Modul Praktikum Matlab STMIK CIC 45


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Trafeling Salesman dengan 50 Kota dihasilkan :

Modul Praktikum Matlab STMIK CIC 46


Modul Praktikum MATLAB Versi 6.5 Create by Luke

Modul Praktikum Matlab STMIK CIC 47

Anda mungkin juga menyukai