Modul Praktikum Matlab PDF
Modul Praktikum Matlab PDF
5 Create by Luke
Oleh
Saluky, S.Si
Bagian1
Pendahuluan
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)
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.
Bagian 2
Kontrol Program
x =
Columns 1 through 8
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');
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
Bagian 3
Fungsi M-File
% Possible actions:
% initialize
% start
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');
%===================================
% 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);
labelStr='Start';
cmdStr='start';
callbackStr='spinner(''start'');';
%====================================
% 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)';
%====================================
% 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);
watchoff(oldFigNumber);
figure(figNumber);
elseif strcmp(action,'start'),
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');
h=plot([0 0],zeros(2,N),'EraseMode','background');
x=rand;
y=rand;
x1=rand;
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
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, ...
Output :
Bagian 4
Operasi Array
x=
>> y=sin(x)
y=
Columns 1 through 8
Columns 9 through 10
0.2194 -0.8012
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:
>> 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
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'
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.
time =
7 14 21 28 35 42 49 56 63 70
>> amount_left=initial_amount*0.5.^(time/half_life)
amount_left =
Columns 1 through 8
Columns 9 through 10
7.3204 7.0711
lost =
1 2 3 4 5 6 7 8 9 10
n=
59 29 19 14 12 10 8 7 6 6
Bagian 5
Akar akar Persamaan
Running :
>>gambar1
⎛− 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')
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.
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
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
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.
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);
Bagian 6
Deferensial dan Pengintegralan
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
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.
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
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);
>> 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
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.
if nargin<1,
action='initialize';
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');
%===================================
% Information for all buttons
labelColor=[0.8 0.8 0.8];
yInitPos=0.90;
xPos=0.85;
btnWid=0.10;
btnHt=0.10;
%====================================
% 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'');';
'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)';
%====================================
% The STOP button
btnNumber=3;
yPos=0.90-(btnNumber-1)*(btnHt+spacing);
labelStr='Stop';
% Setting userdata to -1 (=stop) will stop the demo.
callbackStr='set(gca,''Userdata'',-1)';
%====================================
% 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, ...
'Callback',callbackStr);
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
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),
X=[X; real(a)];
Y=[Y; imag(a)];
n=n+1;
end;
end;
xy=[X Y];
distmatrix(count2,count1)=distmatrix(count1,count2);
end;
end;
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);
axis off;
drawnow;
len=LocalPathLength(p,distmatrix);
lenhist=len;
while get(axHndl,'Userdata')==play,
drawnow;
drawFlag=0;
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;
% ========================
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;
helpwin(mfilename)
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 :