KOMPUTER
INDONESIA
Diktat
Matlab & Simulink
with Application
: Jana Utama, ST
: S1 Teknik Elektro
: 06TE01 / 2006
Minggu
ke
Pokok Bahasan
Pengarahan perkuliahan o
Memulai
dan pengenalan MATLAB
perintah sederhana
o
Penggambaran
grafik
o
Penyusunan
program
o
Fungsi dalam
2
&
3
Pemrograman MATLAB
Pemrograman MATLAB
Sub
Bahasan
MATLAB
o
o
o
&
5
6
Analisis dan
filter analog
o
o
o
o
o
desain o
o
Kontrol
program
M-file
Fungsi
inline
dan perintah feval
Operator logika
Operasi Array
Akar-akar
persamaan
Fungsi zero
Analisis filter
dan Implementasi
Desain
LPF
analog
Desain
Butterworth LPF
Analisis dan
filter digital
&
&
Analisis dan
filter digital
12
13
Neural
(Perceptron)
desain o
o
o
Network o
o
o
o
14
&
15
10
11
desain o
Neural
Network o
(Backpropagation)
o
16
Simulasi
jaringan
MODUL 1
PENGENALAN MATLAB: SEBAGAI ALAT ANALISIS PERMASALAHAN
ENGINEERING
I. TUJUAN
MATLAB merupakan suatu sistem interaktif yang memiliki elemen data dalam suatu array
sehingga tidak lagi kita dipusingkan dengan masalah dimensi. Hal ini memungkinkan kita untuk
memecahkan banyak masalah teknis yang terkait dengan komputasi, kususnya yang berhubungan
dengan matrix dan formulasi vektor, yang mana masalah tersebut merupakan persoalan apabila
kita harus menyelesaikannya dengan menggunakan bahasa level rendah seperti Pascall, C dan
Basic.
Nama MATLAB merupakan singkatan dari matrix laboratory. MATLAB pada awalnya ditulis
untuk memudahkan akses perangkat lunak matrik yang telah dibentuk oleh LINPACK dan
EISPACK. Saat ini perangkat MATLAB telah menggabung dengan LAPACK dan BLAS library,
yang merupakan satu kesatuan dari sebuah seni tersendiri dalam perangkat lunak untuk komputasi
matrix.
Dalam lingkungan perguruan tinggi teknik, Matlab merupakan perangkat standar untuk
memperkenalkan dan mengembangkan penyajian materi matematika, rekayasa dan kelimuan. Di
industri, MATLAB merupakan perangkat pilihan untuk penelitian dengan produktifitas yang tingi,
pengembangan dan analisanya.
Fitur-fitur MATLAB sudah banyak dikembangkan, dan lebih kita kenal dengan nama toolbox.
Sangat penting bagi seorang pengguna Matlab, toolbox mana yang mandukung untuk learn dan
apply technologi yang sedang dipelajarinya. Toolbox toolbox ini merupakan kumpulan dari
fungsi-fungsi MATLAB (M-files) yang telah dikembangkan ke suatu lingkungan kerja MATLAB
untuk memecahkan masalah dalam kelas particular. Area-area yang sudah bisa dipecahkan dengan
toolbox saat ini meliputi pengolahan sinyal, system kontrol, neural networks, fuzzy logic,
wavelets, dan lain-lain.
2.
3.
4.
5.
Selanjutnya anda akan mendapatkan tampilan seperti pada Gambar berikut ini.
x
2
y
3
z
5
=
y = 3
z = x + y
Tidak terlalu menjadi masalah bagi anda? Saya percaya anda tidak mengalami kesulitan, sebab
anda adalah orang yang sangat cerdas.
Nah bagaimana dengan yang satu berikutnya ini? Disini kita mulai dengan mendefinisikan dua
buah vector, yaitu vector x dan vector y:
x = [1 2 3]
x =
1 2 3
y = [4 5 6]
y =
4 5 6
Selajutnya ketik:
>> y(1)
ans =
4
dan ulangi untuk y(2) and y(3).
Matlab menggunakan integer positif untuk index array. Elemen pertama adalah y(1), elemen
kedua adalah y(2), dan seterusnya. Nol atau bilangan negatif tidak diperbolehkan untuk indek
array. Sekarang kita jumlahkan keduanya:
x+y
ans = 5 7 9
ans =
4
5
6
Cara lain pada pengkombinasian dua vector adalah diakukan melalui perkalian elementdemielement:
>> x.*y
ans = 4 10 18
Jawabannya adalah 1*4=4 2*5=10 3*6=18.
Catat periode sebelum perkalian simbol. Sekarang kita dapat mendefinisikan suatu matrix:
A = [1 2 3
4 5 6
7 8 9];
Catat bahwa matrik tidak diulang kalau kita menggunakan semi colon. Kita sekarang kalikan A
dengan transpose dari x:
A*x'
ans = 14
32
50
Sekarang kita harus mentranspose x untuk memenuhi perkalian suatu matrik dan suatu vector
kolom. Matrik-matrik ini dapat juga dikalikan satu sama lain diantara mereka:
B = [1
5
7
A*B
ans =
32
71
110
2 3 4
6 7 8
6 5 4];
32 32 32
74 77 80
116 122 128
Jawabannya adalah 1*1=1 2*5=10 3*7=21, sehingga baris 1 kolom 1= 1+10+21=32, 1*2=2
2*6=12 3*6=18, sehingga baris 1 kolom 2= 2+12+18=32 dst. Sedangkan untuk baris 2 mariks A
dikalikan dengan setiap elemen pada kolom mariks B lalu dijumlahkan (sama seperti yang ada
diatas) dst.
Sekarang coba anda lakukan penjumlahan antara A dan B:
A+B
??? Error using ==> + Matrix dimensions must agree.
Baiklah, kita tidak dapat menambah suatu matrik 3 kali 3 dengan matrix 3 kali 4 , dan Matlab akan
mendeteksi dimensi yang mismatch dan selanjutnya memeberikan pesan error. Sekarang kita cari
cara lain untuk mendefinisikan matrik dan vektor. Sebagai contoh suatu matrik nol dengan
dimensi 3 baris dan 6 kolom dapat dinyatakan sebagai:
>> zeros(3,6)
ans =
000000
000000
000000
tentu saja jika anda tambahkan suatu ";" setelah zeros (3,6), jawabannya tidak akan ditampilkan di
layar monitor anda. Angka pertama, 3 menunjukkan jumah baris, sedangkan angka kedua, 6,
adalah jumlah kolom. Kita dapat pula melakukan hal yang sama untuk menampilkan angka satu
seperti
berikut:
>> ones(3,6)
ans =
111111
111111
111111
Pendefinisian Vektor-vektor Besar
Suatu vektor 1 kali 100 yang menyusun sample pada sinyal cosinus dapat dibangkitkan dengan
>> x = cos(0.1*pi*(0:99));
Untuk membangkitkan suatu "ramp" dari 1 sampai 50 coba:
>> x = [1:1:50];
bilangan kedua mengindikasikan step kenaikan dari dari 1 sampai 50. Untuk membangkitkan
suatu fungsi "ramp" dari 1 sampai 50 coba berikut ini:
>> x = [1:1:50];
Ketika anda tidak memasukkan angka kedua pada perintah diatas, maka secara otomatis (default)
step kenaikan ditetapkan bernilai 1:
>> x = [1:50];
Anda bisa juga secara khusus mendefinisikan suatu rentang nilai pada x sebagai berikut::
>> x(51:100) = [50:-1:1]
Ini merupakan metode yang sangat bermanfaat untuk mensepsifikasi nilai waktu untuk
penggambaran. Sebagai contoh, ditetapkan interval sampling dalam contoh diatas adalah 1 detik.
Selanjutnya anda dapat mendefisnisikan seperti berikut:
>> time = [0:0.001:0.099];
4.4 Penggambaran Grafik
Salah satu kelebihan dari Matlab adalah kemudahan dalam mengolah grafik. Sehingga anda tidak
perlu kesulitan untuk melihat suatu respon system, misalnya pada kasus melihat bentuk sinyal
dalam domain waktu anda cukup mengikuti langkah berikut. Sekarang ketikkan:
>> time = [0:0.001:0.099];
>>
>>
>>
>>
x = cos(0.1*pi*(0:99));
plot(time,x)
xlabel('time (msec)')
ylabel('x(t)')
Sedangkan cara untuk menampilkan sederetan nilai fungsi waktu diskrit adalah dengan
menggunakan perintah "stem". Dari contoh deretan perintah coba anda rubah beberapa bagian
dengan perintah berikut:
>> stem(time,x)
>> xlabel('time (msec)')
>> ylabel('x(t)')
Apakah hasilnya seperti berikut ini?
10
Selanjutnya anda akan mendapatkan sebuah tampilan Matlab Editor yang masih kosong seperti
ini.
11
Lanjutkan dengan menekan toolbar Debug, dan jangan lupa anda pilih Save anda Run. Disitu anda
harus menuliskan nama program. Anda tuliskan coba_1, secara otomatis akan menjadi file
coba_1.m dan akan anda lihat tampilan hasilnya. Seperti apa ya?
Program kedua anda
Cobalah untuk membuat program seperti berikut ini pada Matlab editor, dan jangan lupa anda
simpan dengan nama coba_2
x(1:52) = [0 0 1:1:50];
x(53:102) = [50:-1:1];
h = [1 2];
for n = 3:101,
y(n) = 0;
for m = 1:2,
y(n) = y(n) + h(m)*x(n-m);
end
end
plot(y)
Hasil apa yang anda dapatkan ?
Dalam hal ini anda harus memahami arti setiap perintah yang anda tuliskan dalam Matlab, tidak
ada salahnya anda bertanya kepada instruktur apa arti perintah-perintah tersebut.
Program ketiga anda
Satu contoh lain program untuk for adalah pembangkitan gambar seperti berikut.
%File Name:coba_3.m
n=201;
delx=10/(n-1);
for k=1:n
x(k)=(k-1)*delx;
y(k)=sin(x(k))*exp(0.4*x(k));
end
%plot(x,y)
plot(x,y,'linewidth',4)
title('Grafik
yang
pertama')
xlabel('x');ylabel('y');
Bagiamana hasilnya?
12
y_2 =
0 1 4 9 16 25 36 49 64 81 100
Anda bisa juga memanggil fungsi tersebut melalui program pada panggil_1.m file yang anda buat
seperti berikut:
t=0:1:10;
y_2=x2(t)
Hasilnya adalah sama seperti menggunakan command line window.
TUGAS
1.
2.
3.
4.
5.
MODUL 2
Pemrograman Matlab
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).
13
contoh 1 :
>>for n = 1 : 10
x(n)=sin(n*pi/10);
end
>> x
x=
Columns 1 through 8
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');
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:
14
>> angka=-4;
>> if angka > 0
disp('nilai nya adalah positif');
else
disp('nilainya adalah negatif');
end
nilainya adalah negatif
4.
Control Flow
Untuk mengontrol flow dari perintah, pembuat MATLAB mensuplai peralatan programmer yang
dapat digunakan untuk menulis computer code.
_ the for loops
_ the while loops
_ the if-else-end constructions
_ the switch-case constructions
Mengulang dengan loop for Syntax nya adalah
for k = array
commands
end
For loop dapat berjaring misalkan
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.2000
0.5000 0.3333 0.2500 0.2000 0.1667
0.3333 0.2500 0.2000 0.1667 0.1429
0.2500 0.2000 0.1667 0.1429 0.1250
0.2000 0.1667 0.1429 0.1250 0.1111
Matriks H diebut Hilbert Matrix. Perintah pertama adalah untuk membuat ruang pada memori
komputer untuk matriks yang akan mengembang.
Mengulang loop dengan while Syntax nya adalah
while expression
statements
end
Misalkan angkadibagi dua. Hasil nya kemudian dibagi dua lagi. Proses ini diteruskan sampai
harganya lebih kecil atau sama dengan 0.01. Berapa angka dari proses terakhir yang lebih dari
satu?
q = pi;
while q > 0.01
q = q/2;
end
q
q=
0.0061
15
Konstruksi if-else-end
if expression
commands
end
atau
if expression
commands (evaluated if expression is true)
else
commands (evaluated if expression is false)
end
atau
if expression1
commands (evaluated if expression 1 is true)
elseif expression 2
commands (evaluated if expression 2 is true)
elseif
.
.
.
else
commands (executed if all previous expressions evaluate to false)
end
Chebyshev polynomial Tn(x)=0,1, adalah hal yang penting dalam analisis numeric.
Didefinisikan secara recursive sebagai berikut.
Tn(x) = 2xTn 1(x) Tn 2(x), n = 2, 3, , T0(x) = 1, T1(x) = x.
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
coeff = ChebT(3)
coeff =
4 0 -3 0
Maka: T3(x) = 4x3 3x.
M-Files
16
File yang terdiri dari kode komputer disebut m-files. Terdapat beberapa m-files yaitu: script files
dan function files. Script files tidak perlu menyertakan input argument atau output argument.
Function file harus menyertakan input argumen atau output arugumen.
Untuk membuat m-file
Fungsi ini menyertakan satu input argument, sebuah array angka riil, dan menyusun array yang
berurutan untuk mendapatkan array b dari array a. Fungsi built-in MATLAB digunakan dalam hal
ini adalah sort. Fungsi ini menyusun array secara menaik. Beberapa trik yang digunakan
memperbolehkan kita untuk menyusun array angka secara menurun.
Untuk mendemonstrasikan fungsi dari function yang dibahas,
a = [pi 10 35 0.15];
[b, j] = descsort(a)
b=
35.0000 3.1416 0.1500 -10.0000
j=
3142
Jika dscsort digunakan tanpa output argument, maka tempat asal angka akan hilang.
descsort(a)
ans =
35.0000 3.1416 0.1500 -10.0000
MATLAB mempunyai perintah inline untuk mendefinisikan inline functions dalam Command
Window. Misalkan:
f = inline('sqrt(x.^2+y.^2)','x','y')
f=
Inline function:
f(x,y) = sqrt(x.^2+y.^2)
17
ans = 5
Dapat juga digunakan memecahkan persoalan dalam dua process. Misalkan :
A = [1 2;3 4]
A=
1 2
3 4
dan
B = ones(2,2)
B=
1 1
1 1
Maka
C = f(A, B)
C=
1.4142
3.1623
2.2361
4.1231
Untuk mengeksekusi fungsi yang dispesifikasikan oleh string diperlukan perintah feval seperti
dibawah ini
feval('functname', input parameters of function functname)
Misalkan code m-file myclm dan isint secara bersamaan Save m-file:
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
gcd (greatest common divisor) merupakan function built-in. Perintah feval digunakan dua kali
pada baris kedua. Dia mengecek apakah kedua input argument adalah integer.
Aturan Trapezoidal dengan bentuk koreksi sering digunakan untuk integrasi numeric dari fungsi
yang terdiferensiasi pada interval integrasi.
18
Misalkan
a = [0 0.1];
b = [pi/2 pi/2 + 0.1];
y = corrtrap('sin', 'cos', a, b)
y=
0.9910 1.0850
OPERATOR LOGIKA
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
Contoh:
randn('seed', 0) % This sets the seed of the random numbers generator to zero
T = randn(5)
T=
1.1650 1.6961 -1.4462 -0.3600 -0.0449
0.6268 0.0591 -0.7012 -0.1356 -0.7989
0.0751 1.7971 1.2460 -1.3493 -0.7652
0.3516 0.2641 -0.6390 -1.2704 0.8617
-0.6965 0.8717 0.5774 0.9846 -0.0562
19
A = floor(T)
A=
1 1 -2 -1 -1
0 0 -1 -1 -1
0 1 1 -2 -1
0 0 -1 -2 0
-1 0 0 0 -1
B = ceil(T)
B=
2 2 -1 0 0
11 0 00
1 2 2 -1 0
1 1 0 -1 1
01 1 10
C = fix(T)
C=
1 1 -1 0 0
00 0 00
0 1 1 -1 0
0 0 0 -1 0
00 0 00
D = round(T)
D=
1 2 -1 0 0
1 0 -1 0 -1
0 2 1 -1 -1
0 0 -1 -1 1
-1 1 1 1 0
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
Columns 9 through 10
1
0.2194 -0.8012
Pada tulisan x=0:20:180 dimaksudkan dengan :
20
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
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
maksudnya mengganti elemen 3,3 menjadi 0 untuk mengetahui jumlah array kita gunakan
sintaks size: contoh:
>> size(A)
ans =
3 3
21
>> B=A(3:-1:1,:)
B=
7 8 0
4 5 6
1 2 3
B=
7 8 0
0 0 0
1 2 3
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
9.6594 9.3303 9.0125 8.7055 8.4090 8.1225 7.8458 7.5786
Columns 9 through 10
1
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.
22
>> plot(time/7,amount_left)
>> xlabel('Jumlah Minggu'),ylabel('Jumlah Polonium tersisa')
hasilnya:
lost =
n=
1 2 3 4 5 6 7 8 9 10
59 29 19 14 12 10 8 7 6 6
23
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')
Running :
>>gambar1
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
24
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.
Coba akar1
25
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
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
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);
26
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) = x 5 +
2x4 + 5x2 + 7x + 3 maka ambilah koefisien koefisiennya.
Contoh:
>> g=[1 2 5 7 3]
g=
12573
>> 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 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
27
hasil =
-0.3624
Jika kita ingin menghitung sebuah diferensial disuatu titik maka kita harus mendefinisikan
fungsinya terlebih dahulu.
Integrasi Numerik
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
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
area =
-17.2104
Permasalahan yang mungkin muncul adalah :
1 1. Fungsi kontinu pada daerah integral tetapi turunannya diskontinu atau singular
2 2. Fungsi diskontinue pada daerah integrasi
3 3. Fungsi mempunyai singularitas pada daerah integrasi
4 4. Daerah integrasi tak berhingga
TUGAS
28
1.
Tuliskan MATLAB function y = wam(x, w) dari definisi di atas. Tambahkan pesan error
jika besar w dan x tidak sama.
4.
Tuliskan MATLAB function p = fact(n) yang
29
MODUL 3
SINYAL DAN SISTEM
1. Sinyal Elementer
a. Sinyal Unit Step
>> t=[-1:0.001:1];
>> ustep=heaviside(t);
>> plot(t,ustep, 'LineWidth',10)
Gambar 1.a.1
Bila ingin dikalikan dengan sinyal lain, misal untuk membentuk sinyal ramp, gunakan
perkalian dot ( .* )
b. Sinyal Delta Dirac
>> udirac=dirac(t);
>> plot(t,udirac, 'LineWidth',2)
>>ydirac=[1 zeros(1,99)];
dengan 100 sampel
>>ystep=ones(1,100);
>>y=t
>>y=(t. ^ 2)
%dirac
Gambar 1.b.1
30
c. Delta Dirac sebagai Differensial dari Unit Step dan Unit Step sebagai Integral
dari Delta Dirac
>> syms k a t
>> u=k*sym('heaviside(t-a)')
u=
k*heaviside(t-a)
>> d=diff(u)
d=
k*dirac(-t+a)
>> int(d)
ans =
k*heaviside(t-a)
2.
Transformasi Laplace
31
32
Penggunaan Laplace
Misal, dalam suatu analisis sistem dengan transformasi Laplace, didapat sinyal
keluaran memiliki memiliki bentuk dalam domain kompleks sebagai berikut.
Catatan: Pole adalah nilai yang membuat nilai fungsi menjadi tak berhingga Zero
adalah nilai yang membuat nilai fungsi menjadi nol
33
Contoh:
Tentukan Fungsi berikut ini di domain waktu.
Maka
bisa
digunakan
adalah
factor(polynom),
Factor
>> syms s
>> factor(s^3 + 12*s^2 + 44*s + 48)
ans =
(s+4)*(s+2)*(s+6)
Fungsi factor memiliki kekurangan ketika harus memfaktorkan suatu polinom bila ada
akar yang berupa bilangan kompleks. Sebagai gantinya, gunakan fungsi
roots(polynom).
Residue
>> Ns=[3 2];
>> Ds=[1 3 2];
>> [r p k]residue(Ns,Ds)
r=
4
-1
p=
-2
-1
k=
[]
34
Ilaplace
>> syms s
>> Fs=(3*s+2)/(s^2+3*s+2);
>> ft=ilaplce(Fs)
ft = 4*exp(-2*t)-exp(-t)
3.
Transformasi Fourier
Definisi
35
36
4. Transformasi Z
Definisi
Sifat Transformasi Z
37
Contoh:
Gunakan metoda fraksionalisasi untuk mencari inverse z-transform dari fungsi berikut
Solusi
38
39
I.
Vektor yang merupakan 1 kali n atau n kali 1 matriks dapat digunakan sebagai representasi dari
sampel data sinyal.
Orientasi kolom lebih dipilih dibandingkan orientasi baris pada representasi vektor. Misalkan y
adalah kumpulan tiga sinyal yang merupakan fungsi dari x:
>> x=[4 3 7 -9 1];
>>x=x
>>y=[x 2*x x*pi];
MATLAB mempunyai variasi fungsi untuk mensintesis sinyal. Dimulai dengan vektor yang
merepresentasikan waktu.
Contoh 1:
Misalkan diinginkan untuk mensintesis sinyal dengan 1000 Hz frekuensi sampel, maka,
>>t=0:0.001:1
1001 elemen ini merupakan baris vektor yang merepresentasikan waktu yang berjalan dari nol
sampai satu detik dengan kenaikan 1 milidetik.
Sampel sinyal y terdiri dari dua sinusoidal, satu pada 0.5 Hz dan satu lagi pada 120 Hz dengan
gain amplitude dua kali. Sinyal dapat direpresentasikan sebagai berikut:
>>y=sin(2*pi*50*t) + 2* sin(2*pi*120*t);
Dapat pula dibangun white noise pada sinyal, dan memplot 50 titik pertama dengan
>> yn = y + 0.5*randn(size(t));
>> plot(t(1:50),yn(1:50));
Save Filenya
Berikut ini adalah perintah yang membangkitkan sinyal delta (dirac), step, dan ramp
>>ydirac=[1 zeros(1,99)]; %dirac dengan 100 sampel
>>ystep=ones(1,100);
>>y=t
>>y=(t. ^ 2)
II.
Toolbox dari MATLAB mempunyai fungsi untuk mendisain filter, baik analog maupun digital,
dan fungsi untuk memfilter data. Filter juga dapat digunakan untuk merepresentasikan dinamik
dari suatu sistem. Dalam hal ini, disain filter merupakan berntuk invers: Diberikan input dan
output, dapat dicari filter yang menghasilkan relasi input output yang mirip.
II.1 Implementasi Filter dalam Time Domain
Toolbox MATLAB memberikan fungsi yang mengimplementasikan operasi filter domain waktu:
yaitu fungsi filter (help filter).
Fungsinya adalah: y=filter(b,a,x)
Dengan x adalah vektor data dan b dan a adalah vektor filter dan y adalah hasil dari filter.
Struktur filter digambarkan sebagai tapped-delay line yang digambarkan dalam persamaan
diferensial:
a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)
- a(2)*y(n-1) - ... - a(na+1)*y(n-na)
40
Contoh 2:
Misalkan untuk mendapatkan dan mengeplot n-titik respon impuls yang melewati filter digital
Butterworth orde 10:
n=100;
[b,a]=butter(10,0.5);
x=[1 zeros(1,n-1)];
y=filter(b,a,x);
figure(1), plot(y)
Save Filenya
II.2 Implementasi Filter dalam Frekuensi domain
Infinite Impulse Response (IIR) dapat diimplementasikan dalam frekuensi domain dengan
mengalikan Discrete Fourier Transform (DFT) dari sekuen data dengan DFT dari filter (DFT pada
MATLAB dapat dilakukan dengan menggunakan fungsi fft)
n=length(x);
y=ifft ( fft(x) .* fft(b,n) ./ fft(a,n));
figure(2), plot(real(y));
Save Filenya
II.3 RESPON FREKUENSI
Beberapa fungsi yang dapat digunakan adalah
abs fungsi magnitude
angle sudut fasa
freqs response frekuensi Laplace Transform
freqz response frekuensi Transformasi-z
grpdelay group delay
unwrap unwrap phase
Fungsi freqz: [h,w]=freqz(b,a,n) memberikan n-titik respon frekuensi, H(e jw) dari filter digital
jw
-jw
-jmw
jw B(e) b(1) + b(2)e + .... + b(m+1)e
H(e) = ---- = -----------------------------------jw
-jw
-jnw
A(e) a(1) + a(2)e + .... + a(n+1)e
Magnitude dan phase dari filter dapat diekstrak dari bilangan kompleks response frekuensi,
dengan fasa dalam derajat,
[h,w]=freqz(b,a,n)
m=abs(h)
p=angle(h)
figure(1), semilogy(w,m),
figure(2), plot(w,p*180/pi)
Group delay adalah ukuran delay rata-rata dari filter sebagai fungsi dari frekuensi. Didapatkan dari
turunan pertama respon phase dari filter. Fungsi dari Group delay adalah
[gd,w]=grpdelay(b,a,n)
gd=grpdelay(b,a,128);
[h,w]=freqz(b,a,128);
pd=-unwrap(angle(h))./w;
plot(w,gd,w,pd)
41
TUGAS
1. Turunkan koefisien filter untuk rangkaian dibawah ini dan gunakan untuk mencari gambar
respon input step pada rangkaian tersebut. Dengan menggunakan
a. implementasi time-domain dan
b. frekuensi domain.
1 K
Vin=unit step
+
_
1 nF
Vout
42
MODUL 4
ANALISIS DAN DESAIN FILTER ANALOG
Filter analog berada pada rentang frekuensi kontinu. Diklasifikasikan sebagai low
pass, high pass, band pass, dan stop band. Karakteristik idealnya adalah seperti
gambar berikut:
Contoh:
43
transfernya
disebut dengan aproksimasi all pole orde dua pada low pass filter ideal dengan cutoff
frekuensi di wc, K adalah gain, dan koefisien a dan b didapat dari tabel.
Untuk suatu gain K non-inverting, rangkaian di atas memenuhi fungsi transfer dengan
kondisi:
Sehingga
Filter all pole orde 4 dapat dituliskan
44
Contoh:
Disain Butterworth low-pass filter dengan gain K = 2 dan cutoff frequency fc = 1 kHz
(prototype opamp 11.13)
Pilih C1 = C2 = 0,01F = 10-8.
Dari Tabel a = 1,41421 = 2 dan b = 1
Masukan harga-harga ke persamaan dengan penulisan dalam program
MATLAB sebagai berikut:
TUGAS 2
Buat respon magnitude dari rangkaian di atas menggunakan harga R1 sampai R4 yang
didapat dari contoh di atas. (f = 1:10:5000)
Disain low pass filter dengan 3 pole Butterworth menggunakan buttap dengan
frekuensi cutoff fC = 2KHz atau wC=2x 2 x 103.
Contoh:
Menggunakan perintah MATLAB cheb1ap(N,Rp) (chebichev tipe 1) dengan N
adalah banyaknya pole dan Rp adalah ripple di pass band dan lp2hp (low pass to
high pass) untuk mencari fungsi transfer Chebyshev 3 pole tipe 1. fc = 5 KHz
TUGAS III
Gunakan perintah MATLAB buttap dan lp2bp(b,a,W0,Bw) (lowpass to bandpass)
untuk mencari fungsi transfer Butterworth 3 pole dengan pass band frekuensi di 4
KHz dan Bandwidth = 2 KHz. Clue: Help lp2bp.
46
MODUL 5
atau
47
Gambar 2. Block Diagram dan Signal Flow Graph dari tiga elemen utama filter
digital
5.1 Desain IIR dan FIR
Terdapat dua jenis filter digital yang disebabkan karena adanya perbedaan
penggunaan feedback dalam mendesain suatu filter digital. Yang pertama Jenis IIR
(Infinite Impulse Response) yang menggunakan struktur feedback yang sering juga
disebut dengan recursive structure, sedangkan yang kedua Jenis FIR (Finite Impulse
Response) yang tidak menggunakan feedback yang sering disebut dengan nonrecursive structure.
5.2 FIR dan Signal Flow Graph
Dalam desain IIR, sering sekali digunakan pendekatan
transformasi bilinear .
Desain ini dimulai dengan fungsi transfer analog filter dan menyajikannya dalam
pemetaan domain s ke domain z. Dengan menggunakan persamaan differensial dapat
ditunjukkan pemetaan dari bidang s ke bidang
Pemetaan ini hasil dari bentuk umum filter IIR dengan sejmulah pole dan zero
sembarang. Respon sistem dan persamaan differensial dari filter ini akan mengikuti
perumusan sebagai berikut, dengan menggunakan operator shift time dari z maka
filter dari H akan dapat direpresentasikan dengan fungsi
48
Frekuensi Cutoff
= 1000Hz
Frekuensi Sample = 8000Hz
Ripple passband = 0,5dB
Stopband attenuasi = 60dB
Band Transisi = 100Hz
49
Mathlab juga menyajikan tampilan orde filter dan koefisien filter. Dalam contoh ini,
filter Chebyshev dapat ber-orde sembilan . elliptic filter memiliki lima orde dan filter
butterworth tiga puluh dua orde.
Beberapa kesimpulan yang dapat dihasilkan dari desain filter
low pass sederhana,
pertama pada umumnya dapat dibuat himpunan batas desain. Desain filter cheby2tic
akan menghasilkan filter tersederhana tergantung dari tingkat kekompleksitas bentuk
(terms of complexity). Filter Butterworth
yang paling umum dan kompleks berada dalam orde ke tigapuluh dua. Dalam bentuk
ripple passband, filter butterworth memberikan respon optimum. Dalam passband,
hampir tidak terdapat
ripple hanya sebagai monotonic. elliptic dan chebyshev
keduanya mempunyai lebih banyak
ripple dalam passband. Inilah yang menjadi
pilihan dari filter-filter yang digunakan. Dalam hal respon besaran dan kompleksitas,
filter elliptic akan menjadi pilihan yang terutama, akan tetapi ripple elliptic
mempunyai respon fasa yang lebih non linear dibandingkan filter Chebyshev dan
Butterworth. Oleh karenanya ketajaman cutoff dengan kompleksitas rendah harus
jatuh pada filter elliptic. Jika respon fasa yang dibutuhkan linear, maka filter
Chebyshev atau Butterworth akan menjadi pilihan.
Filter IIR didesain dengan menggunakan rutin yang dibuat oleh MH Akroyd's dalam
publikasinya tentang Butterworths digital filter . Filter Butterworth digunakan
secara maksimal dalam periode kedatarannya dalam passband, kondisinya pada
monoton cut-off.
Filter Butterworth dalam kondisi ternormalisasi dapat
diimplementasikan sampai dengan derajat ke enam. Chebyschev tipe I memiliki
ripple pada passband , monotonic cut-off dari frekuensi cut-off pada stopband.
Pada implementasi derajat ke enam dengan ripple sebesar 1 dB (maksimum deviasi
dari normal sebesar kurang lebih satu dB bukan satu dB dari besaran amplituda
peak to peak ) Chebychev tipe II memiliki flat maksimal dari passband dan
ripple
dalam stopband. Maksimum ripple 40 dB dari stopband dan memiliki transisi 3%
dari frekuensi cut-off.
50
Band pass filter ditentukan dengan menggunakan dua fungsi. Untuk filter bandpass
frekuensi ditentukan dengan wp dan ws yaitu frekuensi passband dan frekuensi
stopband yang keduanya merupakan dua elemen vektor yang dapat menyebabkan dua
frekuensi passband dan dua frekuensi stopband, Mathlab di bawah ini mendesain filter
bandpass digital cheby2tik
% Bandpass Elliptic Digital Filter
ws = [0 .3*pi 0.75*pi]
%Stopband edge frequency
ws = [0 .4* pi 0.6*pi]
%Passband edge frequency
Rs = 0.5;
%Passband ripple in dB
As = 20;
%Stopband attenuation in dB
[N, wn] = cheby2ord (wp/pi,ws/pi,Rs,As} ;
[b, a] = cheby2(N, Rs, As ;wn) ;
[db,mag,pha,grd,w] = freqz m(b,a) ;
plot(w*8000/2/pi,db) ;
axis ( [5000 3500 -22 1] )
xlabel(frequency (Hz)); ylabel(decibels); title(magnitude in db Respons of cheby2tic Filter) ;
filter lowpass, bandpass, high pass atau bandstop . Desain dari sptools filter akan
ditampilkan dalam respon besaran dan tampilan orde filter.
Berikut ini adalah contoh besaran respon dari bandpass filter yang didesain dalam
kode program Matlab.
Filter 4
Appendix
Function [b, a] = chb1 {Wp, Ws, Rs, As) ;
% Analog Lowpass Filter Design: Chebyshev-1
%
% [b, a] = chb1 (Wp, Ws, Rs, As) ;
% b = Numerator coefficients of Ha (s)
% a = Denominator coefficients of Ha (s)
% Wp = Passband edge frequency in rad/sec
% Ws = Stopband edge frequency in rad/sec
% Rs = Passband ripple in dB
% As = stopband attenuation in dB
%
if wp < = 0
error (Passband edge must be larger than 0 )
end
if Ws < = Wp
error ( Stopband edge must be larger than Passband edge )
end
if (Rs < = 0 ) (As < 0)
error ( PB ripple and/or SB attenuation must be larger than 0 )
end
ep = sqrt (10 (Rs/10)-1) ;
A = 10 (As/20) ;
OmegaC = Wp;
OmegaR = Ws/Wp;
g = sqrt (A*A 1) /ep;
N = ceil (log10 (g+sqrt (g*g1) ) /log10 (OmegaR+sqrt (omegaR*AomegaR-1) ) ) ;
Fprintf (\n*** Chebyshev-1 Filter Order = %2.Of \n,N) ;
[b, a] = ap chb1(N, Rs, OmegaC) ;
function [b, a] = ap chb1(N, Rs, OmegaC) ;
% Chebyshev-1 Analog Lowpass Filter Prototype
%
% [b, a] = ap chb1(N, Rs, OmegaC) ;
% b = nemerator polynomial coefficients
% a = denominator polynomial coefficients
% N = Order of the cheby2tical filter
% Rs = passband Ripple in dB
% OmegaC = Cutoff frequency in rad/sec
%
[z , p , k] = cheblap (N, Rs) ;
a = real (poly (p) ) ;
aNn = a (N+1) ;
p = p*omegac;
a = real (poly (p) ) ;
aNu = a (N+1) ;
k = k*aNu/aNn;
b0 = k;
B = real (poly (z) ) ;
b = k*B;
52
6. Argumen Sptools
Untuk membuat filter butterworth di bawah ini adalah fungsi-fungsi yang disediakan
oleh sptools Matlab untuk memanipulasi desain digital filter Untuk filter butterworth
dimana
H(z)=B(z)/A(z)
[B,A] = butter[N,Wn]
Menghitung koefisien dari low pass filter. Wn adalah
frekuensi cutoff dalam frekuensi ternormalisasi.
[B,A] = butter(n,Wn,high) Menghitung koefisien dari highpass butterworth filter.
Wn adalah frekuensi cutoff dalam frekuensi ternormaliasi
[B,A] = butter(N,Wn)
Menghitung koefisein dari bandpass filter. Wn adalah
vector yang berisi dari dua frekuensi cutoff ternormaliasi dari passband dalam urutan
naik
[B,A] = butter(N,Wn,stop)
Menghitung koefisien dari bandstop butterworth
filter, Wn adalah vector yang mengandung dua frekuensi cutoff ternormalisasi dalam
stopband dalam urutan naik.
Untuk desain dari chebyshev tipe 1 kita menggunakan variasi dari cheby1 dengan
fungsi komputasi dari koefisien filter order keN dengan filter H(z)=B(z)/A(z)
[B,A] = cheby1[N,Rp,Wn] Menghitung koefisien dari low pass filter Chebyshev
tipe 1. Rp mewakili ripple passband dan Wn adalah frekuensi cutoff dalam
frekuensi ternormalisasi.
[B,A] = cheby1(N,Rp,Wn,high) Menghitung koefisien dari highpass chebyshev tipe
1 filter. Rp mewakili ripple passband dan Wn adalah frekuensi cutoff dalam frekuensi
ternormaliasi
[B,A] = cheby1(N,Rp,Wn) Menghitung koefisien dari bandpass ripple, dengan Rp
mewakili passband ripple dan Wn adalah vector yang berisi dari dua frekuensi cutoff
ternormaliasi dari passband dalam urutan naik
[B,A] = cheby1(N,Rp,Wn,stop) Menghitung koefisien dari bandstop chebyshev
tipe filter, dimana Rp mewakili dari passband ripple. Wn adalah vektor yang
mengandung dua frekuensi cutoff ternormalisasi dalam stopband dalam urutan naik.
Untuk desain dari chebyshev tipe II kita menggunakan variasi dari cheby2 dengan
fungsi komputasi dari koefisien filter order keN dengan filter H(z)=B(z)/A(z)
[B,A] = cheby2[N,Rs,Wn] Menghitung koefisien dari low pass filter Chebyshev
tipe 2. Rs mewakili stopband ripple dan Wn adalah frekuensi cutoff dalam
frekuensi ternormalisasi.
[B,A] = cheby2(N,Rs,Wn,high) Menghitung koefisien dari highpass chebyshev tipe
2 filter. Rs mewakili ripple stopband dan Wn adalah frekuensi cutoff dalam frekuensi
ternormaliasi
[B,A] = cheby2(N,Rs,Wn) Menghitung koefisien dari bandpass dengan Ws adalah
stopband ripple dan Wn adalah vector yang berisi dari dua frekuensi cutoff
ternormaliasi dari passband dalam urutan naik
[B,A] = cheby2(N,Rs,Wn,stop) Menghitung koefisien dari bandstop chebyshev
tipe filter, dimana Rs mewakili dari stopband ripple. Wn adalah vektor yang
mengandung dua frekuensi cutoff ternormalisasi dalam stopband dalam urutan naik.
53
Untuk desain dari chebyshev tipe II kita menggunakan variasi dari cheby2 dengan
fungsi komputasi dari koefisien filter order keN dengan filter H(z)=B(z)/A(z)
[B,A] = ellip[N,Rp, Rs,Wn] Menghitung koefisien dari low pass filter Chebyshev
tipe 2. Rp mewakili ripple passband, Rs mewakili stopband ripple dan Wn adalah
frekuensi cutoff dalam frekuensi ternormalisasi.
[B,A] = ellip(N,Rp,Rs,Wn,high) Menghitung koefisien dari highpass chebyshev tipe
2 filter. Rp mewakili ripple passband, Rs mewakili ripple stopband dan Wn adalah
frekuensi cutoff dalam frekuensi ternormaliasi
[B,A]
= ellip(N,Rp,Rs,Wn) Menghitung koefisien dari bandpass dengan Rp
mewakili ripple passband dengan Ws adalah stopband ripple dan Wn adalah vector
yang berisi dari dua frekuensi cutoff ternormaliasi dari passband dalam urutan naik
[B,A] = ellip(N,Rp,Rs,Wn,stop) Menghitung koefisien dari bandstop chebyshev
tipe filter, dimana Rp mewakili ripple passband, Rs mewakili dari spassband ripple.
Wn adalah vektor yang mengandung dua frekuensi cutoff ternormalisasi dalam
stopband dalam urutan naik.
54
MODUL 6
55
Transformasi Bilinear
Dengan analog cutoff nya 3dB pada frekuensi wac, dan frekuensi atenuasi waa,
didapatkan
dan
56
Dengan menggunakan syntax freqz pada MATLAB maka kita bisa mendapatkan
magnitude dari G(z) tapi kita harus mendefinisikannya dalam power negatif.
Pembagian tiap bentuk dengan 391z2 didapatkan:
MATLAB code dibawah ini akan memberikan plot magnitude G(z) terhadap
frekuensi:
%Buat pada mfiles baru
bz=[0.0675 0.1349 0.0675]; az=[1 .1.1429 0.4127];
[Gz, wT]=freqz(bz,az,20,200);
semilogx(wT,abs(Gz)), axis([0.1 1000 0 1]), hold on;
title('Digital Low-Pass Filter'),
xlabel('Frequency in Hz'), ylabel('Magnitude'), grid
%Gambar yang anda dapatkan adalah Gambar Digital low pass
filter pada contoh 1
Contoh 2:
Fungsi transfer dibawah ini mendefinisikan beberapa tipe filter digital. Gunakan freqz
MATLAB untuk memplot magnitude versus radian frekuensi.
57
Solusi:
MATLAB code untuk menghitung dan mengeplot fungsi transfer di atas adalah:
% Buat di m files baru
% N=512 % Default
b1=[2.8982 8.6946 8.6946 2.8982]*10^(.3); a1=[1 .2.3741
1.9294 .0.5321];...
[G1z,w1T]=freqz(b1,a1);
%
b2=[0.5276
.1.5828
1.5828
.0.5276];
a2=[1
.1.7600
1.1829 .0.2781];...
[G2z,w2T]=freqz(b2,a2);
%
b3=[6.8482 0 -13.6964 0 6.8482]*10^(.4); a3=[1 3.2033
4.5244 3.1390 0.9603];...
[G3z,w3T]=freqz(b3,a3);
%
b4=[0.9270 .1.2079 0.9270]; a4=[1 .1.2079 0.8541];...
[G4z,w4T]=freqz(b4,a4);
clf; % clear current figure
%
subplot(221), semilogx(w1T,abs(G1z)), axis([0.1 1 0 1]),
title('Filter for G1(z)')
xlabel(''),ylabel('Magnitude'),grid;
%
subplot(222), semilogx(w2T,abs(G2z)), axis([0.1 10 0 1]),
title('Filter for G2(z)')
xlabel(''),ylabel('Magnitude'),grid;
%
subplot(223), semilogx(w3T,abs(G3z)), axis([1 10 0 1]),
title('Filter for G3(z)')
xlabel(''),ylabel('Magnitude'),grid;
%
58
Contoh 3:
Rectifier Setengah Gelombang dapat direpresentasikan dalam bentuk trigonometrik:
Dalam contoh ini kita akan memfilter hanya 2 bentuk awal (atau menghilangkan
bentuk cosinus). Untuk menyederhanakan bentuk ini, misalkan A = 3 dan kita
potong dengan menghilangkan dari bentuk ketiga ke atas, sehingga fungsinya
menjadi:
Masalahnya menjadi bagaimana mengurangi filter low pass digital dan menggunakan
perintah filter untuk menghilangkan bentuk cosine di atas.
Solusi:
Kita akan menggunakan 6 pole digital low pass filter Butterworth karena kita harus
mempunyai transisi yang tajam antara 1 dan 2 rad / detik. Dan juga, komponen
frekuensi tertinggi adalah 2 rad/s, kita harus menspesifikasikan frekuensi sampling ws
= 4 rad/s untuk menghindari aliasing. Sehingga frekuensi sampling haruslah fs =
ws/2 = 2/ dan periode sampling menjadi Ts = 1/fs = /2. T = 0.5 adalah harga yang
cukup kecil; Cutoff frekuensi kita pilih wC = 1.5 rad/s untuk mengatenuasi bentuk
cosine.
MATLAB code di bawah ini adalah meliputi langkah-langkah:
1. Menghitung numerator dan denominator dari fungsi transfer dengan frekuensi
cutoff ternormalisasi
2. Perhitungan koefisein untuk frekuensi yang diinginkan
3. Menggunakan fungsi bilinear yang memetakan fungsi transfer analog ke
fungsi transfer digita dan memplot respon frekuensi dari filter digital.
4. Menghitung filter digital transfer function untuk menghitung efek warping.
5. Menggunakan fungsi filter untuk menghilangkan bentuk cosine
%Buat pada m files baru
%Langkah 1
[z,p,k]=buttap(6);
[b,a]=zp2tf(z,p,k);
% Langkah 2
wc=1.5;
[b1,a1]=lp2lp(b,a,wc);
%
% Langkah 3
T=0.5; % Define sampling period
[Nz,Dz]=bilinear(b1,a1,1/T);
w=0:2*pi/300:pi;
59
Gz=freqz(Nz,Dz,w);
clf
%
semilogx(w,abs(Gz)); grid; hold on
xlabel('Radian Frequency w in rads/sec'),
ylabel('Magnitude of G(z)'),
title('Digital Filter Response in Normalized Frequency')
%
fprintf('Press any key to continue \n');
pause;
%
% Langkah 4
p=6; T=0.5;
wc=1.5;
wd=wc*T/pi;
[Nzp,Dzp]=butter(p,wd);
fprintf('Summary: \n\n');
fprintf('WITHOUT PREWARPING: \n\n');
fprintf('The num N(z) coeff in desc order of z are:
\n\n');
fprintf('%8.4f \t',[Nz]);
fprintf('\n\n');
fprintf('The den D(z) coeff in desc order of z are:
\n\n');
fprintf('%8.4f \t',[Dz]);
fprintf('\n\n');
fprintf('WITH PREWARPING: \n\n');
%
fprintf('The num N(z) coeff in desc order of z are:
\n\n');
fprintf('%8.4f \t',[Nzp]);
fprintf('\n\n');
fprintf('The den D(z) coeff in desc order of z are:
\n\n');
fprintf('%8.4f \t',[Dzp]);
fprintf('\n\n');
60
yt=filter(Nzp,Dzp,gt);
%
t=0:0.1:12;
gta=3+1.5*sin(t)-cos(2*t);
subplot(211), plot(t,gta), axis([0,12, 0, 6]); hold on
xlabel('Continuous Time t');
ylabel('Function g(t)');
%
subplot(212), plot(n*T,yt), axis([0,12, 0, 6]); hold on
xlabel('Continuous Time t');
ylabel('Filtered Output y(t)');
%
subplot(211), stem(n*T,gt), axis([0,12, 0, 6]); hold on
xlabel('Discrete Time nT');
ylabel('Discrete Function g(n*T)');
%
subplot(212), stem(n*T,yt), axis([0,12, 0, 6]); hold on
xlabel('Discrete Time nT');
ylabel('Filtered Output y(n*T)');
%Ouput Analog dan Dijital dapat dilihat di hasil Gambar
61
MODUL 7
JARINGAN SYARAF TIRUAN (PERCEPTRON)
Pembentukan Jaringan
1
b1
w11
x
1
b2
w21
y
w22
w13
w23
Misalkan bobot jaringan ke target y1 adalah [-1 0 2], bobot ke target y2 adalah [0 1 0]
dan bobot bias adalah [1 2]. Statement yang digunakan untuk membangun jaringan
adalah
net.IW{1,1}=[-1 0 2;0 1 0]
net.b{1}=[1;2]
Untuk membentuk perceptron untuk mengenali fungsi logika AND dengan 2
variabel x1 dan x2, digunakan statement net=newp(PR,S,TF,LF) dengan
PR=matriks ordo R x 2 menyatakan nilai maksimum dan minimum tiap unit masukan
S=jumlah neuron dari target
TF=fungsi aktivasi biner
LF=fungsi pelatihan. (default: learnp)
Sehingga:
%lanjutkan
net=newp([0 1 ; 0 1], 1)
dengan [0 1] menyatakan variabel x1 dan kolom yang kedua merupakan variabel x2
Pembentukan perceptron dengan masukan dan targetnya untuk mengenali pola fungsi
logika AND dengan bobot awal w = [-1 1] dan bias=[1] dilakukan prosedur di atas
dan berikut:
%Mulai baru
net=newp([0 1;0 1],1);
net.IW{1,1}=[-1 1]
net.b{1}=[1]
p = [ [1 ; 1] [1;0] [0;1] [0;0]];
t = [1 0 0 0];
63
Misalkan perhitungan bobot setelah perintah sim pada contoh di atas dijalankan
berturut-turut pada pola [1;1], [1;0],[0;1],[0;0].
%mulai baru
p = [ [1 ; 1] [1;0] [0;1] [0;0]];
t = [1 0 0 0];
net=newp([0 1;0 1],1);
bobot=[-1,1];
net.IW{1,1}=bobot;
bias=1;
net.b{1}=bias;
p1=p(:,1); p2=p(:,2); p3=p(:,3); p4=p(:,4);
t1=t(1); t2=t(2); t3=t(3); t4=t(4);
%perubahan bobot untuk pola p1
disp(pola p1 :)
a1=sim(net,p1)
e1=t1-a1
dW=learnp(bobot,p1,[],[],[],[],e1,[],[],[],[],[])
bobot=bobot+dW
Perintah learnp akan menyimpan besarnya perubahan bobot pada variabel dW. Bobot
baru diperoleh dengan menambahkan dW ke vektor bobot. Karena keluaran jaringan
= target, maka tidak dilakukan perubahan bobot sehingga bobot baru = bobot lama.
Perubahan bobot untuk pola p2, p3 dan p4 dilakukan dengan program serupa
%lanjutkan
disp(pola p2 :)
a2=sim(net,p2)
e2=t2-a2
dW=learnp(bobot,p2,[],[],[],[],e2,[],[],[],[],[])
bobot=bobot+dW
disp(pola p3 :)
a3=sim(net,p3)
e3=t3-a3
dW=learnp(bobot,p3,[],[],[],[],e3,[],[],[],[],[])
bobot=bobot+dW
disp(pola p4 :)
a4=sim(net,p4)
e4=t4-a4
dW=learnp(bobot,p4,[],[],[],[],e4,[],[],[],[],[])
bobot=bobot+dW
Pada pola 2 dan 3, e = t a = -1 Sehingga dW = -p. Perubahan ini ditambahkan ke
vektor bobot. Pada pola 4, e= 0 sehingga tidak dilakukan perubahan bobot.
64
Pelatihan Perceptron
Perceptron akan melakukan perubahan bobot terus menerus untuk setiap pola yang
diberikan hingga diperoleh bobot yang akan digunakan untuk mengenali pola secara
benar. Untuk mengecek apakah bobot sudah dapat mengenali pola maka dapat
digunakan perintah:
>> a = sim (net,p)
>> e = t a
Hasil keluaranya adalah [ 1 1 1 1] sedangkan targetnya adalah [1 0 0 0]. Terdapat
kesalahan e = [0 -1 -1 -1], ini memerlukan pelatihan berikutnya (epoch ke dua). Untuk
menyingkat keseluruhan proses berikutnya (iterasi) MATLAB menyediakan perintah
train yang formatnya adalah
[net,tr,Y,E,Pf,Af] = train(NET,P,T,Pi,Ai,VV,TV) (deskripsi dapat dilihat menggunakan
help train)
Contoh: misalkan diinginkan bobot pengenalan pola untuk contoh yang tadi.
p = [ [1 ; 1] [1;0] [0;1] [0;0]];
t = [1 0 0 0];
net=newp([0 1;0 1],1);
net.IW{1,1}=[-1,1];
net.b{1}=[1];
net=train(net,p,t);
%untuk mengetahui keadaan bobot optimal:
disp(net.IW{1,1})
disp(net.b{1})
Jadi w1 = 1, w2 = 2 dan b = -2
Untuk mengehetahui perubahan bobot dan bias untuk setiap epoch, iterasi harus
dihentikan sementara per epoch (dan ditampilkan hasilnya). Untuk itu digunakan
perintah:
function perceptron %training untuk fungsi AND
clc
net=newp([0 1; 01],1);
net.IW{1,1}=[-1,1];
net.b{1}=[1];
p = [ [1 ; 1] [1;0] [0;1] [0;0]];
t = [1 0 0 0];
e=9999
while e > 0
net.trainParam.epochs = 1
%pause training untuk tiap epoch
net=train(net,p,t);
bobot=net.IW{1,1}
bias=net.b{1}
65
a = sim(net,p)
e = sum (t a)
end
TUGAS
Buatlah program untuk mengenali fungsi logika XOR. Apakah perceptron mampu
mengenalinya?
Pustaka
J.J. Siang, M.Sc., Jaringan Syaraf Tiruan dan Pemrogramannya Menggunakan
MATLAB, Penerbit Andi, Yogyakarta, 2005.
66
MODUL 8
NEURAL NETWORK (BACK PROPAGATION)
67
Inisialisasi Bobot
Setiap kali membentuk jaringan backpropagation dapat diberikan inisialisasi bobot
tertentu dengan memberikan nilai pada net.IW, net.LW, dan net.b
net.IW{j,i} digunakan sebagai variabel untuk menyimpan bobot dari unit masukan
layar ke i ke unit tersembunyi (atau unit keluaran)layar j. Karena dalam
Backpropagation unit masukan hanya terhubung dengan layar tersembunyi paling
bawah, maka bobotnya disimpan dalam net.IW{1,1}.
Sebaliknya net.LW{k,j} dipakai untuk menyimpan bobot dari unit di layar
tersembunyi ke-j ke unit di layar tersembunyi ke-k. Sebagai contoh, net.LW{2,1}
adalah menyimpan bobot dari layar tersembunyi paling bawah (layar tersembunyi ke
1) ke layar tersembunyi di atasnya (layar tersembunyi ke 2)
Contoh pembuatan jaringan backpropagation 2-4-3-1 (semua masukan adalah
bilangan antara -1 dan 2) dengan semua fungsi aktivasi sigmoid bipolar. Beri bobot
dan bias seperti pada Tabel 2 4
Tabel 2
Dari Unit Masukan
Layar
X1
X2
Bias
Tersembunyi 1
Z1
-1.3 0.7
0.3
Z2
0.5
0
-0.1
Z3
1.3
-0.4 -0.9
Z4
-0.1 1.2
0.5
Tabel 3
Dari Layar Tersembunyi 1
Layar
z1
z2
z3
z4
Bias
Tersembunyi 2
V1
0.4
0.3
-1
-0.3
0.5
V2
0.6
0
-0.6
-1.2
-1.3
V3
0.4
-0.3 0.2
0.9
-0.3
Tabel 3
Dari layar Tersembunyi 1
Keluaran
z1
z2
Y1
0.4
0.9
Arsitektur pembentukan jaringan adalah
z3
-0.1
Bias
-1
net.b{3}=[-1];
Hasil bobot tersebut dapat dicek masing-masing dengan memanggil
>>net.IW{1,1}
>>net.b{1}
>>net.LW{2,1}
>>net.b{2}
>>net.LW{3,2}
>>net.b{3}
Simulasi Jaringan
Perintah sim dapat digunakan untuk menghitung output dari jaringan. Misalkan pada
contoh di atas kita masukan input x1=0.5 dan x2=1.3 Pola masukan dengan
menggunakan contoh di atas diperoleh:
>>p=[0.5;1.3];
>>y=sim(net,p);
untuk mengetauhi besarnya error parameter masukan harus ditambah dengan target
yang ingin dicapai. Misalkan target nya t = 1, maka diperoleh keluaran dan error:
>>t=[1];
>>[y,Pf,Af,e,perf]=sim(net,p,[],[],t)
Pelatihan Backpropagation
Untuk menjalankan pelatihan maka perintah train dapat digunakan. Pelatihan ini
untuk meminimumkna kuadrat kesalahan rata-rata (MSE). Metode yang paling
sederhana adalah gradient descent. Bobot dan bias diubah pada arah dimana unjuk
kerja fungsi menurun paling cepat yaitu dalam arah negatif gradiennya.
Wk+1 = Wk k*gk
Contoh misalkan diketahui pasangan vektor seperti pada Tabel 1 Buat jaringan
backprpagation dan latihlah dengan metode penurunan tercepat. Gunakan fungsi
aktivasi sigmoid bipolar pada layar tersembunyi dan fungsi identitas pada layar
keluarannya.
p = [-1 -1 2 2 ; 0 5 0 5]
t = [-1 -1 1 1]
net=newff(minmax(p),
[3,1],
{tansig,purelin},traingd);
*cat: lihat help minmax
Dengan menggunakan perintah sim besarnya error mula-mula dapat ditentukan
>>[y,Pf,Af,e,perf]=sim(net,p,[],[],t)
Berikutnya untuk melatihnya digunakan perintah train
69
>>net=train(net,p,t)
Training dihentikan pada epoch ke 100 (default) meskipun unjuk kerja yang
diinginkan (mse=0) belum tercapai. Pca epoch ke 100 ini mse adalah 0,0065. Lihat
juga grafiknya.
Bobot, bias dan hasil pelatihannya dapat dilihat dengan perintah:
>>net.IW{1,1}
>>net.b{1}
>>net.LW{2,1}
>>net.b{2}
>>[y,Pf,Af,e,perf]=sim(net,p,[],[],t)
lihat hasilnya apakah mendekati target?
Dari contoh di atas hamper tidak mungkin kita mendapatkan harga mse=0 (apalagi
jika data pelatihannya banyak). Untuk itu orang cukup puas jika mse-nya cukup kecil
(misalkan 0.0001). Jika kita perbesar laju pemahaman menjadi 0.1 dan merubah mse
menjadi 0.0001, dilakukan perintah
p = [-1 -1 2 2 ; 0 5 0 5]
t = [-1 -1 1 1]
net=newff(minmax(p),
{tansig,purelin},traingd);
net.trainParam.lr=0.1;
net.trainParam.goal=0.0001;
net=train(net,p,t)
[3,1],
]
dan t= [ %copy paste data tabel 6
]
net=newff(minmax(p),
{logsig,logsig},traingdx);
net.trainParam.goal=1e-5;
net.trainParam.epochs=500;
net.trainParam.show=500;
net=train(net,p,t)%didapatkan bobot terbaik
[2,1],
1
2
3
4
5
6
71
Modul 9
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';
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]);
72
%===================================
% Information for all buttons
labelColor=[0.8 0.8 0.8];
yInitPos=0.90;
xPos=0.85;
btnWid=0.10;
btnHt=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
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', ...
'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];
73
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.
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, ...
'Callback',callbackStr);
% Uncover the figure
hndlList=[startHndl
popupHndl
stopHndl
infoHndl
closeHndl];
set(figNumber, ...
'Visible','on', ...
'UserData',hndlList);
watchoff(oldFigNumber);
figure(figNumber);
case 'start',
74
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
% 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),
X=[X; real(a)];
Y=[Y; imag(a)];
75
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);
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
% ========================
swpt1=floor(npts*rand)+1;
76
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',
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)])]));
77
Contoh OutPut
Trafeling Salesman dengan 25 Kota dihasilkan :
78
DAFTAR PUSTAKA
1.
2.
3.
4.
5.
Messner, William and Dawn Tilbury. Control Tutorials for MatLab and
Simulink. A Web Based Approach. Addisson Wesley, Inc. 1999.
Ogata, Katsuhiko. Modern Control Engineering. 3 rd ed. Prentice Hall
International. 1997
http://www.mathworks.com
Ogata, Katsuhiko. Solving Control Engineering Problems with MatLab.
Englewood Cliffs, New Jersey : Prentice Hall Inc. 1994
_______. MatLab High Performance Numeric Computation and Visualization
Software. The Mathworks, Inc. 1992
79