Bab I
Pengenalan MATLAB
1.1 Paket Perangkat Lunak MATLAB
MATLAB adalah paket perangkat lunak (software) yang dibuat oleh The MathWork, Inc. Nama MATLAB berasal dari “matrix laboratory”. MATLAB karenanya bekerja pada data (matriks) berupa larik (array) bujur sangkar atau persegi yang unsurnya adalah bilangan riil ataupun kompleks. Kuantitas skalar karenanya adalah sebuah matriks yang mengandung sebuah unsur tunggal. Pengguna yang telah biasa menggunakan FORTRAN atau BASIC mengenali pernyataan A=abs(B) sebagai instruksi yang
menyatakan bahwa A adalah nilai absolut dari bilangan B. Di dalam MATLAB peubah
(variable) B dapat menyatakan sebuah matriks sehingga sdetiap unsur (element) matriks
A menjadi nilai absolut dari unsur pada B. 1.2 Matriks dan Operasinya dalam MATLAB
Matriks merupakan sebuah hal yang mendasar dalam MATLAB. Di dalam MATLAB nama yang digunakan untuk matriks harus dimula dengan huruf dan dapat diikuti oleh huruf maupun angka.
Di dalam MATLAB operasi aritmatika berupa penambahan, pengurangan, perkalian dan pembagian dapat dibentuk secara langsung dengan matriks. Pertama sekali tentunya matriks harus dibuat. Ada beberapa cara membuatnya dengan MATLAB dan cara termudah, yang cocok untuk matriks kecil, adalah sebagai berikut. Kita akan membentuk nilai dari sebuah matriks A dengan menuliskan
» A=[1 3 5;1 0 1;5 0 9]
Bila kemudian tekan Enter diperoleh
A =
1 3 5 1 0 1 5 0 9
Dengan mengetikkan, contohnya,
» B=[1 3 51;2 6 12;10 7 28]
dan menekan Enter kita telah memperoleh matriks B. Untuk memperoleh hasil penjumlahan kedua matriks itu dan hasilnya berupa matriks C kita ketikkan
» C=A+B
dan dengan cara yang sama untuk pengurangannya berupa, misalnya
» D=A-B
Penting untuk diingat bila kita ketikkan tanda “;” pada akhir pernyataan, maka tidak akan diperoleh keluaran, contohnya
» D=A-B;
Implementasi perkalian vektor dan matriks dalam MATLAB akan diperlihatkan melalui contoh berikut. Dengan anggapan bahwa vektor d dan p mempunyai jumlah unsur yang sama perkaliannya dapat berupa
» x=d*p'
Dengan tanda ‘ menyatakan transpose dari baris vektor p menjadi kolom dan tanda * untuk menyatakan operasi perkalian sehingga perkalian dapat dilakukan. Hasilnya, x, adalah skalar. Jadi, misalnya kita mempunyai matriks A dan B, seperti di atas, perkaliannya adalah
» H=A*B
1.3 Menggunakan Operator \ untuk Pembagian
Adalah mudah menyelesaikan masalah dengan dan adalah suatu skalar konstan dan adalah anu (unknown). Bila diberikan dan, maka. Namun, bila yang ditinjau adalah persamaan matriks
A
xb=
dengan A adalah matriks bujursangkar. Sekarang yang diinginkan adalah menemukan dimana dan adalah vektor. Secara komputasi hal ini cukup pelik, namun dengan menggunakan MATLAB dapat diselesaikan dengan mengeksekusi pernyataan berupa
>> x=A\b
Pernyataan ini menggunakan operator pembagi MATLAB \. 1.5 Memanipulasi Unsur dari Sebuah Matriks
Di dalam MATLAB unsur matriks dapat dimanipulasi secara individu atau dalam blok. Contohnya,
>> x(1,3)=C(4,5)+V(9,1),a(1)=b(1)+d(1) atau >> C(i,j+1)=D(i,j+1)+E(i,j+1)
merupakan pernyataan yang sah (valid) yang terkait dengan unsur matriks. Baris dan kolom dapat dimanipulasi sebagai entitas lengkap. Karenanya,
>> A(:,3),A(5,:)
merujuk pada kolom ketiga dan baris kelimadari matriks A. Bila B adalah matriks 10x10 maka
merujuk pada kolom keempat sampai kesembilandari matriks. Penting diingat bahwa di dalam MATLAB, secara default, indeks matriks terendah dimulai 1.
Contoh berikut mengilustrasikan beberapa cara bahwa subscript dapat digunakan dalam MATLAB. Pertama sekali kita coba
>> a=[2 3 4 5 6;-4 -5 -6 -7 -8; 3 5 7 9 1;4 6 8 10 12;-2 -3 -4 -5 -6] a = 2 3 4 5 6 -4 -5 -6 -7 -8 3 5 7 9 1 4 6 8 10 12 -2 -3 -4 -5 -6
Eksekusi pernyataan berikut
>> v=[1 3 5]; >> b=a(v,2) memberikan b = 3 5 -3
Jadi b terdiridari unsur baris pertama, ketiga dan kelima dalam kolom kedua a. Eksekusi
>> c=a(v,:) memberikan c = 2 3 4 5 6 3 5 7 9 1 -2 -3 -4 -5 -6
Jadi c terdiri dari baris pertama, ketiga dan kelima a. Eksekusi
>> d=zeros(3) >> d(:,1)=a(v,2) memberikan d = 3 0 0 5 0 0 -3 0 0
Di sini d adalah matriks nol 3x3 dengan kolom 1 digantikan oleh unsur pertama, ketida dan kelima dari kolom kedua a. Eksekusi
>> e=a(1:2,4:5) memberikan e = 5 6 -7 -8 1.6 Transpose Matriks
Operator sederhana yang mungkin dilakukan pada matriks adalah mentranspose yakni mempertukarkan baris dan kolom. Dalam MATLAB hal disimbolkan dengan *. Contohnya >> a=[1 2 3;4 5 6; 7 8 9] a = 1 2 3 4 5 6 7 8 9
untuk transpose dari a ke b kita tuliskan
>> b=a'
b =
1 4 7 2 5 8 3 6 9
Namun, bila a adalah bilangan kompleks maka operator MATLAB ‘ tranpose konjugat kompleks. Contohnya
>> a=[1+2*i 3+5*i; 4+2i 3+4*i]
a = 1.0000 + 2.0000i 3.0000 + 5.0000i 4.0000 + 2.0000i 3.0000 + 4.0000i >> b=a' b = 1.0000 - 2.0000i 4.0000 - 2.0000i 3.0000 - 5.0000i 3.0000 - 4.0000i
untuk mendapatkan transpose tanpa konjugasi, kita eksekusi 1.7 Matriks Khusus
Beberapa matriks kerap muncul dalam manipulasi matriks dan MATLAB mampu membangkitkannya dengan mudah. Yang paling sering adalah ones(m,n), zeros(m,n), rand(m,n) dan randn(m,n). Pernyataan MATLAB seperti itu
membangkitkan matriks mxn yang unsurnya satu, nol, random dan normal random.
Pernyataan MATLAB eye(n) membangkitkan matriks satuan nxn. Bila hanya sebuah parameter skalar tunggal yang diberikan, maka pernyataan ini membangkitkan sebuah matriks bujur sangkar yang ukurannya diberikan oleh parameter itu. Bila kita ingin membangkitkan matriks identitas B yang ukurannya sama dengan matriks A yang telah ada sebelumnya, maka pernyataan B=eye(size(A)) dapat digunakan. Dan juga C=zeros(size(A)) dan D=ones(size(A)) akan membangkitkan matriks C nol dan
matriks D satu , yang kedua mempunyai ukuran yang sama dengan A. 1.8 Membangkitkan Matriks dengan Nilai Unsur Khusus
Perhatikan beberapa contoh berikut :
X=-10:1:10 membuat x sebagai vektor yang mempunyai unsur -10,-9,-8,...,8,9,10 Y=-2:.2:2 membuat y sebagai vektor yang mempunyai unsur -2,-1.8,-1.6,...,1.8,2
Z=[1:3 4:2:8 10:0.5:11] membuat z sebagai vektor yang mempunyai unsur [ 1 2 3 4 6 8 10 10.5 11]
Matriks yang lebih kompleks juga dibangkitkan dari yang lainnya. Sebagai contoh, kita tinjau dua pernyataan berikut :
C=[2.3 4.9; 0.9 3.1]
D=[C ones(size(C));eye (saize(C)) zeros(size(C))]
Kedua pernyataan ini membangkitkan matriks baru D yang ukurannya dua kali dari C. Matriks ini mempunyai bentuk
D =
2.3000 4.9000 1.0000 1.0000 0.9000 3.1000 1.0000 1.0000 1.0000 0 0 0 0 1.0000 0 0
1.9 Beberapa Operasi Matriks Khusus
Beberapa operasi aritmatika sederhana eksekusinya untuk nilai skalar tunggal namun meliputi komputasi yang besar untuk matriks. Untuk matriks yang besar operasi seperti itu mungkin memerlukan waktu yang cukup signifikan. Contohnya adalah bila matriks yang digunakan mengandung perpangkatan. Dalam MATLAB dituliskan dengan
A^p dengan p adalah nilai positif skalar dan A adalah matriks. Ini akan menghasilkan
matriks berpangkat dan dapat diperoleh pada MATLAB untuk semua nilai p Pada kasus
dimana pangkatnya adalah 0.5 lebih baik menggunakan sqrtm(A) yang akan memberikan nilai akar kuadrat A. Operasi khusus lain yang tersedia di dalam MATLAB
adalah expm(A) yang memberikan eksponensial matriks A. Dan masih banyak lagi
operasi lain yang tersedia dalam MATLAB.
1.10 Operasi Unsur–per-Unsur (Element-by-Element Operations)
Operasi Unsur-per-Unsur berbeda dari operasi matriks standar namunsangat berguna. Hal itu diperoleh dengan menggunakan titik (.) guna memproses operator. Contohnya, x.^y, x.*y, dan y.\x. Jika, dalam pernyataan ini, x dan y adalah matriks (atau vektor) unsur dari x dipangkatkan, dikalikan atau dibagikan dengan unsur yang
terkait dari y bergantung pada operator yang digunakan. Bentuk x./y memberikan hasil
yang sama sebagaimana operasi pembagian yang dinyatakan di atas. Agar operasi ini dieksekusi matriks dan vektor yang digunakan harus mempunyai ukuran yang sama. Penting diingat bahwa titik tidak digunakan untuk operasi + dan – karena operasi penambahan dan pengurangan pada matriks biasanya adalah unsur-peroleh-unsur. Contoh operasi unsur-peroleh-unsur dapat dilihat di bawah ini :
» a=[1 2;3 4] a = 1 2 3 4 » b=[5 6;7 8] b = 5 6 7 8 » a*b ans = 19 22 43 50
Ini merupakan matriks yang normal. Namun, menggunakan operator . kita peroleh
» a.*b
ans =
5 12 21 32
yang merupakan perkalian unsur-per-unsur.
» a.^b
ans =
1 64 2187 65536
1.11 Masukan (input) dan keluaran (output) dalam MATLAB.
Guna mengeluarkan nama dan nilai peubah (variable) titik koma (semicolon) dapat diabaikan dari pernyataan. Namun, ini tidak akan memberikan baris perintah yang jelas atau tersusun rapi (well-organised) dan keluaran yang tidak teratur. Biasanya lebih baik menggunakan function disp karena akan memberikan baris perintah (script) yang jelas. Function disp memungkinkan penampilan tulisan dan nilai pada layar. Guna
menampilkan isi matriks A pada layar kita tuliskan disp(A);. Keluaran berupa tulisan
(text) harus ditempatkan dalam tanda petik (quote) tunggal, contohnya :
disp(‘Ini akan menampilkan teks di layar’);
Kombinasi sting dapat dicetak menggunakan tanda [ ] dan nilai numerik dapat ditempatkan dalam teks string jika telah dikonversi ke string menggunakan function
num2str. Contohnya, x=2.678;
disp(['Nilai iterasi adalah ',num2str(x),' saat ini']);
akan ditempatkan di layar
Nilai iterasi adalah 2.678 saat ini
Yang lebih fleksibel adalah menggunakan function fprintf memungkinkan keluaran
terformat pada layar atau file. Bentuknya adalah
fprintf(‘namafile’,’format string’,list);
dimana list adalah daftar nama peubah yang dipisahkan koma. Parameter namafile
adalah pilihan (optional); jika tidak ada keluaran adalah pada layar. Format string
memformat keluaran. Unsur yang dapat digunakan dalam format string
%P.Qe untuk notasi eksponensial %P.Qe titik tetap
%P.Qe menjadi %P.Qe atau %P.Qe mana yang lebih singkat
/n memberikan baris baru
dengan P dan q adalah bilangan bulat (integer). Karakter string bilangan bulat, termasuk
titik (.), harus diikuti simbol % yang didahului huruf. Bilangan bulat sebelum titik
menentukan lebar field (field width); bilangan bulat setelah titik menentukan jumlah letak desimal setelah tanda desimal. Contohnya, %8.4f dan %10.3f memberikan lebar field 8
dengan empat tempat desimal dan 10 dengan tiga tempat desimal. Harus diingat satu tempat dialokasikan untuk tanda desimal. Contohnya
x=1007.46;y=2.1278;k=17;
fprintf(‘\nx= %8.2f y= %8.6f k= %2.0f\n’,x,y,k);
x= 1007.46 y= 2.127800 k= 17
Sekarang kita tinjau masukan teks dan data dari keyboard. Cara interaktif guna mendapatkan masukan adalah menggunakan function input. Bentuknya adalah
peubah=input(‘teks’); atau peubah=input(‘teks’,’s’);
Bentuk yang pertama menampilkan teks dan memungkinkan masukan nilai numerik. Nilai tunggal atau matriks dapat diberikan dengan cara ini. Function input menampilkan
teks sebagai prompt dan menunggu masukan yang akan diberikan. Ini diberikan pada peubah saat tombol Enter dipencet. Bentuk kedua memungkinkan masukan berupa string. Untuk jumlah data yang besar, yang mungkin dihasilkan dari hasil running
program, dapat digunakan function load yang memungkinkan mengambil data dari
disket atau hard disk menggunakan
load namafile
Contohnya load data1.txt
1.12 Grafik MATLAB
MATLAB menyediakan fasilitas grafik yang dapat dipanggil dari baris perintah atau perintah yang langsung dituliskan pada command window. Pertama sekali akan digunakan functionplot. Function ini mempunyai beberapa bentuk. Contohnya :
Plot(x,y) memplot vektor x melawan y. Jika x dan y adalah matriks kolom pertama x dilot melawan kolom pertama y. Hal ini diulangi untuk setiap pasangan x dan
y .
Plot(x1,y1,’jenisgaris_atau_jenistitik1’,x2,y2,’jenisgaris_atau_jenisti tik’) memplot vektor x1 melawan y1 menggunakan jenisgaris_atau_jenistitik1; kemudian vektor x2 melawan vektor y2
menggunakan jenisgaris_atau_jenistitik2.
Jenisgaris_atau_jenistitik dipilih menggunakan simbol yang telah ditetapkan
berdasarkan tabel berikut :
Garis Simbol Titik Simbol
padat garis titik-titik garistitik - _ : -. titik tanda tambah bintang lingkaran tanda % . + * o x
Grafik Semilog dan loglog dengan menggantikan perintah plot dengan semilog atau
Judul, nama sumbu dan fitur yang lain dapat ditambahkan ke dalam grafik menggunakan function xlabel, ylabel, title, grid dan text. Function-function
ini mempunyai bentuk sebagai berikut :
title(‘title’) menampilkan judul pada bagian atas grafik xlabel(‘x_axis_name’) menampilkan nama untuk sumbu-x
ylabel(‘y_axis_name’) menampilkan nama untuk sumbu-y grid membuat grid pada grafik
text(x,y,’teks-pada-x,y’) menampilkan teks pada posisi (x,y) dalam jendela
(window) grafik dimana x dan y diukur dalam satuan sumbu yang sedang digunakan.
Terdapat satu atau banyak titik pada tempatnya teks bergantung pada apakah x dan y
adalah vektor.
Gtext(‘teks’) memungkinkan penempatan teks menggunakan mouse dengan
menempatkannya pada tempat di mana diperlukan dan kemudian menekan tombolnya. Sebagai tambahan, function axis memungkinkan pengguna untuk membuat
batasan sumbu untuk suatu plot tertentu. Bentuknya axis(p) dimana p menyatakan
empat-unsur baris vektor yang menandai batas atas dan bawah sumbu dalam arah x dan y. Pernyataan axis harus ditempatkan setelah pernyataan plot. Penting diingat bahwa
function title, xlael, ylabel,grid, text, gtext dan axis harus diikuti dengan
plot yang ditujunya.
Baris perintah berikut memberikan plot yang hasilnya dapat dilihat pada gambar 1.12.1. Functionhold digunakan untuk meyakinkan bahwa kedua grafik muncul.
x=-4:0.05:4; y=exp(-0.5*x).*sin(5*x); figure(1);
plot(x,y);
xlabel('x-axis'); ylabel('y-axis'); hold on;
y=exp(-0.5*x).*cos(5*x); plot(x,y);
grid; gtext('two tails...'); hold off
Function plot memungkinkan pengguna untuk memplot function yang
didefinisikan sebelumnya di antara batas yang diberikan. Perbedaan penting antara plot dan fplot adalah bahwa fplot memilih titik-titik plot secara adaptif. Jadi lebih
banyak titik dipilih bila function berubah lebih cepat. Hal ini diilustrasikan dengan menjalankan baris perintah berikut :
x=2:.04:4; y=f101(x); plot(x,y);
xlabel('x'); ylabel('y'); figure(2)
fplot('f101',[2 4],10) xlabel('x'); ylabel('y');
function f101 diberikan oleh
function v=f101(x) v=sin(x.^3);
Bila baris perintah dijalankan akan memberikan grafik pada gambar 1.12.2 dan gambar 1.12.3. Dalam contoh ini kita secara hati-hati telah memilih jumlah titik plot yang tidak cukup namun function fplot mampu menghasilkan kurva yang mulus dan akurat.
Gambar 1.12.2 Plot
y
=
sin
( )
x
3 menggunakan 75 buah titik plot berjarak sama.titik plot secara adaptif.
Terdapat sejumlah fitur khusus yang disediakan MATLAB untuk presentasi dan manipulasi grafik dan beberapa diantaranya akan dijelaskan sekarang. Function subplot
mempunyai bentuk subplot(p,q,r) dengan p,q membagi jendela grafik menjadi p kali q grid sel dan menempatkan plot pada sel ke-r pada grid, Ilustrasinya diperoleh dengan
menjalankan baris perintah berikut yang menghasilkan enam buah plot berbeda, satu pada tiap sel. Plot ini diberikan pada gambar 1.12.4 berikut ini :
x=0.1:.1:5;
subplot(2,3,1);plot(x,x);title('plot of x'); xlabel('x');ylabel('y');
subplot(2,3,2);plot(x,x.^2);title('plot of x^2'); xlabel('x');ylabel('y');
subplot(2,3,3),plot(x,x.^3);title('plot of x^3'); xlabel('x'); ylabel('y');
subplot(2,3,4),plot(x,cos(x));title('plot of cos(x)'); xlabel('x'); ylabel('y');
subplot(2,3,5),plot(x,cos(2*x));title('plot of cos(2x)'); xlabel('x'); ylabel('y');
subplot(2,3,6),plot(x,cos(3*x));title('plot of cos(3x)'); xlabel('x'); ylabel('y');
Gambar 1.12.4 Contoh penggunaan subplot.
Plot ini dapat ditahan pada layar dengan perintah hold dan plot selanjutnya dibuat
setelahnya. Function holn on digunakan untuk mengaktifkannya dan holn off
digunakan untuk menonaktifkannya. Jendela gambar dapat dibersihkan dengan menggunakan perintah clf.
Informasi dapat diperoleh dari jendela grafik menggunakan function ginput yang
mempunyai dua bentuk utama. Yang sederhana adalah
Dengan cara ini dapat diberikan sejumlah takterbatas titik pada vektor x dan y dengan
menempatkan tanda silang mouse (mousecross-hair) pada titik yang diperlukan dengan menekan tombol mouse. Untuk keluar dari perintah ginput harus ditekan Enter. Jika
diinginkan sejumlah n titik maka dituliskan
[x,y]=ginput(n)
1.13 Grafik tiga-dimensi
Biasanya lebih mudah menggambarkan grafik tiga-dimensi daripada fungsi atau sekumpulan data guna mendapatkan gambaran yang lebih mendalam dari data. MATLAB menyediakan fasilitas yang memungkinkan pengguna untuk menggambar grafik tiga-dimensi. Kali ini secara singkat dperkenalkan sebagian dari fungsi-fungsi yang telah dipilih. Fungsi-fungsi itu adalah meshgrid, mesh, surfl, countour, dan countour3. Penting diingat bahwa fungsi yang lebih kompleks dari jenis ini memerlukan
waktu yang cukup signifikan untuk menampilkannya pada layar, bergantung pada kompleksitas aljabar fungsinya, sejumlah setail yang diperlukan dan kemampuan komputer yang digunakan. Konsekuensinya pengguna terkadang harus bersabar dalam menunggu hasilnya.
Biasanya fungsi tiga-dimensi diplot untuk mengilustrasikan keadaan khusus fungsi seperti daerah di mana maksima atau minima terletak. Memplot permukaan guna mengilustrasikan fitur-fitur ini dapat menjadi sulit dan analisis yang hati-hati dari fungsi itu diperlukan sebelum grafiknya digambarkan dengan sukses. Sebagai tambahan, walau bila daerah yang menjadi perhatian berhasil ditentukan tempatnya dan plot dari fitur yang menjadi perhatian mungkin tersimpan dan karenanya kemudian diperlukan guna memilih cara pandang yang berbeda. Terkadang persoalan diskontinuitas juga muncul dan menyebabkan masalah dalam pemplotan.
Untuk fungsi function MATLAB meshgrid digunakan untuk
membangkitkan sekumpulan titik yang lengkap dalam bidang x-y untuk memplot fungsi
tiga-dimensi. Kita kemudian dapat menghitung nilai nilai ini kemudian diplot
menggunakan satu dari fungsi berikut mesh, surf, surfl, dan surfc. Sebagai contoh
guna memplot fungsi
(
x y f z= ,)
z(
20x2 x) (
/2 15y2 5y)
/2 z= − + + − + untuk x=−4:0.2:4 dan x=−4:0.2:4.Pertama sekali kita siapkan nilai domain x−ydan kemudian menghitung yang terkait dengan nilai
z
x dan menggunakan fungsi yang diberikan. Akhirnya kita plot grafik tiga-dimensi menggunakan function surfl. Ini dapat dilakukan dengan menggunakan baris perintah berikut. Ingat penggunaan function figure berikut yang digunakan agar
secara langsung keluaran muncul pada jendela grafik sehingga plot yang pertama tidak menindih yang kedua.
y clf [x,y]=meshgrid(-4.0:0.2:4.0,-4.0:0.2:4.0); z=0.5*(-20*x.^2+x)+0.5*(-15*y.^2+5.*y); figure(1); surfl(x,y,z); axis([-4 4 -4 4 -400 0])
xlabel('x-axis'); ylabel('y-axis'); zlabel('z-axis'); figure(2);contour3(x,y,z,15);
axis([-4 4 -4 4 -400 0])
xlabel('x-axis'); ylabel('y-axis'); zlabel('z-axis');
Bila baris perintah ini dijalankan akan diperoleh hasil seperti pada gambar berikut. Grafik pertama diperoleh dengan menggunakan surfl dan menunjukkan fungsi sebagai
sebuah permukaan. Sedangkan gambar berikutnya diperoleh dengan menggunakan
countour3 dan diperoleh plot kontur permukaan tiga-dimensi.
Gambar 1.13.1 Permukaan tiga-dimensi .
Gambar 1.13.2 Plot kontur tiga-dimensi.