Minggu, 22 Februari 2009

Matlab Lanjutan

1.1 Pengulangan dengan loop for

Struktur :

for k = array

perintah

end

Perintah antara for dan end dijalankan untuk semua nilai k yang didefinisikan pada array. Mungkin bahasa sederhananya untuk loop for ini sebagai berikut :

Untuk semua k yang sudah didefinisikan, kerjakan perintah, baru selesai.

Contoh :

Misalkan kita menginginkan nilai fungsi sin pada 11 titik seragam x = p n /10 untuk n = 0,1, . . . , 10.

>>for n = 0:10;(tekan Enter)

x(n+1) = sin(pi*n/10);(tekan Enter)

>>end (tekan Enter)

>> x

x =

Columns 1 through 8

0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090

Columns 9 through 11

0.5878 0.3090 0.0000

Loop for dapat disusun dalam bentuk sub loop for dengan struktur sebagai berikut :

for k1 = array1

for k2 = array2

for k3 = array3

perintah

end

end

end

Contoh : Mari tulis dan simpan kode berikut pada suatu m-file.

function H = Hilbert(n)

H = zeros(n);

for k = 1:n

for l = 1:n

H(k,l) = 1/(k+l-1);

end

end

Loop for sebaiknya digunakan apabila cara langsung tidak dapat digunakan.

Contoh : Andai kita ingin membangun suatu matriks berukuran 10x10, , di mana . Menggunakan loop for kita dapat menggunakan kode berikut :

>>H = zeros(10)

>>for k = 1:10

for l = 1:10

A(k,l) = sin(k)*sin(l);

end

>>end

Namun tanpa menggunakan loop for kita dapat menggunakan kode lebih sederhana berikut :

k = 1:10;

A = sin(k)’*cos(k);

Tanda aksen (’) menyatakan transpose suatu vector/matriks. Perintah baris pertama membuat array k yang terdiri dari bilangan bulat 1, 2, . . . . , 10. Perintah sin(k)’ membentuk vector kolom sedangkan cos(k) membentuk vector baris.

1.2 Pengulangan dengan loop while

Struktur :

while ekspresi

pernyataan

end

Loop ini digunakan bilamana kita tidak mengetahui banyaknya repitisi (pengulangan) yang dibutuhkan. Pemahaman loop while sebagai berikut,

Selagi ekspresi masih dipenuhi, lakukan terus pekerjaan yang ada pada pernyataa, baru setelah itu berhenti.

Contoh : Andaikan kita ingin membagi dengan 2 bilangan p. Kemudian hasilnya kita bagi lagi dengan 2 dan seterusnya sampai hasil pembagian kurang dari atau sama dengan 0.01. Berapa hasil bagi terbesar yang lebih besar dari 0.01 !

>>q = pi;

>>while q > 0.01

q = q/2;

end

>>q

q =

0.0061

1.3 Konstruksi if-else-end

Struktur paling sederhana dari konstruksi ini adalah :

if expresi

perintah

end

Konstruksi ini digunakan jika hanya terdapat satu alternative. Jika terdapat dua alternative kita menggunakan struktur berikut :

if ekspresi

perintah (dijalankan bila ekspresi benar)

else

perintah (dijalankan bila ekspresi salah)

end

Konstruksi ini sudah kita lakukan sebelumnya pada fungsi is_int dan mylcm pada bagian sebelumnya Tutorial ini. Namun jika terdapat banyak alternative kita gunakan struktur berikut :

if ekspresi 1

perintah (dijalankan bila ekspresi 1 benar)

elseif ekspresi 2

perintah (dijalankan bila ekspresi 2 benar)

elseif

.

.

.

else

perintah(dikerjakan bila semua ekspresi sebelumnya salah)

end

Jika ekspresi 1 benar langsung lakukan perintah, bila tidak lakukan perintah berikutnya, bila tidak lakukan perintah berikutnya lagi, dan seterusnya.

Contoh : Polinomial Chebyshev adalah salah satu polynomial yang sangat penting pada analisis numeric. Mereka didefinsikan secara rekursif sebagai berikut :

= 1, , untuk .

Kita ingin menyusun secara eksplisit polynomial dalam bentuk,

Untuk itu kita akan membuat kode dengan input n dan output koefisien polynomial Chebyshev dalam bentuk T =.

function T=cheb(n)

%menghitung koefisien polinomial Chebyshev T_n(x)

%yang tersusun dengan urutan menurun

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

>> T=cheb(4)

T =

8 0 -8 0 1

Ini berarti .

Pada kode ini diperkenalkan notasi “==”. Ini adalah adalah relasi logika yang berarti “sama dengan”. Tidak sama dengan notasi “=”. Operator dan relasi logika akan dibahas pada bagian berikutnya pada lesson ini juga.

3. Relasi dan operator logika

Relasi di dalam MATLAB dibangun dengan operator-operator berikut :

Operator

Deskripsi

<

Kurang dari

<=

Kurang dari atau sama dengan

>

Lebih dari

>=

Lebih dari atau sama dengan

==

Sama dengan

~=

Tidak sama dengan

Operator “==” membandingkan dua variabel dan menghasilkan 1 bila mereka sama dan 0 bila tidak sama.

>>a = [1 1 3 4 1]

a =

1 1 3 4 1

>> ind1 = (a==1)

ind1 =

1 1 0 0 1

Ini berarti elemen pertama sama dengan 1, elemen kedua sama dengan 1, elemen ketiga tidak sama dengan 1, elemen keempat tidak sama dengan 1 dan elemen kelima sama dengan 1. Untuk mengetahui elemen ke berapa saja pada array a yang sama dengan 1, gunakan fungsi find.

>> ind2 = find(a==1)

>> ind2

1 2 5

Sedangkan operator logika pada MATLAB adalah sebagai berikut :

Operator logika

Deskripsi

|

Atau (disjungsi)

&

Dan (konjungsi)

~

Tidak (ingkaran)

Andaikan kita ingin memilih elemen-elemen x yang memenuhi x > 1 atau x <-0.2 di mana

>> x = randn(1,7)

r =

-0.4326 -1.6656 0.1253 0.2877 -1.1465 1.1909 1.1892

>> ind3 = (x >=1) | (x < -0.2)

ind3 =

1 1 0 0 1 1 1

>> y = x(ind3)

y =

-0.4326 -1.6656 -1.1465 1.1909 1.1892

3. Pembulatan ke bilangan bulat, fungsi ceil, floor, fix dan round

Terdapat 4 fungsi MATLAB untuk membulatkan suatu bilangan real ke bilangan bulat. Keempat fungsi tersebut adalah sebagai berikut :

Fungsi

Deskripsi

floor(x)

Pembulatan ke bilangan bulat terbesar <= x

ceil(x)

Pembulatan ke bilangan bulat terkecil >= x

fix(x)

Pembulatan ke bagian bulatnya

round(x)

Pembulatan ke bilangan bulat terdekat

Untuk jelasnya, diperhatikan beberapa contoh berikut :

>> T=randn(5) %membangkitkan matrix random 5x5.

T =

-1.0982 -0.9778 -0.5077 -0.6129 1.1330

1.1226 -1.0215 0.8853 -0.2091 0.1500

0.5817 0.3177 -0.2481 0.5621 0.7031

-0.2714 1.5161 -0.7262 -1.0639 -0.0524

0.4142 0.7494 -0.4450 0.3516 2.0185

>> A=floor(T)

A =

-2 -1 -1 -1 1

1 -2 0 -1 0

0 0 -1 0 0

-1 1 -1 -2 -1

0 0 -1 0 2

>> B=ceil(T)

B =

-1 0 0 0 2

2 -1 1 0 1

1 1 0 1 1

0 2 0 -1 0

1 1 0 1 3

>> C=fix(T)

C =

-1 0 0 0 1

1 -1 0 0 0

0 0 0 0 0

0 1 0 -1 0

0 0 0 0 2

>> D=round(T)

D =

-1 -1 -1 -1 1

1 -1 1 0 0

1 0 0 1 1

0 2 -1 -1 0

0 1 0 0 2

Untuk menggambar grafik fungsi := bilangan bulat terkecil yang kurang dari atau sama dengan pada interval [-5 5] cukup dengan perintah berikut :

>> x=-4:0.01:4;

>> y=floor(x);

>> plot(x,y)

Apa yang anda dapatkan. Selanjutnya perhatikan pemakaian fungsi floor dan ceil untuk menentukan bilangan bulat m dan bilangan real 0.25 <= r <>sehingga x = (4^m)*r.

function [m,r] = res_exp(x);

%menentukan bilangan bulat positip m dan bilangan real 0.25<=r<1

%sehingga x = (4^m)*r

if x==0

m=0;

r=0;

return

end

u = log10(x)/log10(4);

if u <>

m = floor(u);

else

m = ceil(u);

end

r = x/4^m;

Perintah return pada program ini meminta MATLAB untuk mengahiri eksekusi, sedangkan fungsi log10 menyatakan logaritma dengan bilangan pokok 10.

[m,r] = res_exp(pi)

m =

1

r =

0.7854

Coba check !

>> format long

>> (4^m)*r

ans =

3.14159265358979

>> pi

ans =

3.14159265358979

Tidak ada komentar:

Posting Komentar