Matlab Temel Bilgisayar Bilimleri (MATLAB) Kullanım Klavuzu 1 IÇINDEKILER BÖLÜM 1 : MATLAB Kullanimi ve Matris Islemleri BÖLÜM 2 : Grafik ve Egri Çizimleri BÖLÜM 3 : MATLAB ile Programlama BÖLÜM 4 : Kontrol Sistemlerinde Zaman-Frekans Analizi EK (Tablo) :MATLAB Komutlari ve Matris Fonksiyonlari Tablosu NOT: “ MATLAB Kullanim Kilavuzu ” nda ilk 3 bölüm genel kullanimla alakali bilgiler içermektedir. Son bölüm ise “ Bilgisayar Destekli Kontrol Sistemleri ” dersi içerigine göre hazirlanmistir. 2 BÖLÜM 1 : MATLAB KULLANIMI ve MATRIS ISLEMLERI “Matlab” programi ( MATrix LABoratory 'nin ilk üç harfleri alinarak isimlendirilmistir.) mühendislik uygulamalarinin, hesaplamalarinin ve simülasyonlarinin çogunun gerçeklestirildigi matris ve matematik tabanli kompleks bir programdir. Her türlü grafiksel sonuçlar istenilen tarzda alinabildigi için kullanim alani çok genistir. Ayrica MATLAB versiyonlarindan en az 6.0 ve üzeri olanlarinin kullanilmasi güncellik açisindan daha yararli olacaktir. Bu bölümde programi kullanmaya baslamak için giris komutlari, matematiksel fonksiyonlar ve matris operatörleri anlatilacaktir. Ayrica kilavuzun en son kisminda da en çok kullanilan matris komutlari ve fonksiyonlari tablo halinde verilmistir. help ‘fonksiyon ismi’ komutu yazildiginda yardim istenilen fonksiyon hakkinda detayli bilgiye ulasilabilmektedir. help help yazildiginda ise on-line olarak yardim kilavuzunun nasil kullanilacagi hakkinda bilgilere ulasilabilmektedir. -- Matris Operatörleri : Asagida verilen simgeler matris islemlerinde kullanilmaktadir: + Toplama - Çikarma * Çarpma ^ Kuvvet alma ‘ Konjüge transpozunu alma -- Mantik ve Iliski Operatörleri : < Küçük & Ve <= Küçük esit | Veya > Büyük ~ Degil ~= Esit degil3 -- Baslangiç olarak komut satirina : date yazilirsa program tarafindan geçerli olan tarih alinacaktir.Yani : ans= 30-Oct-2002 -- MATLAB bir islemin sonucunu ans= .... seklinde gösterir. ( ans = answer = cevap) -- MATLAB programindan çikmak için ise exit veya quit yazmak yeterli olacaktir. -- En son y azilan komutlarin hepsine üst ve alt yön tuslarina dokunarak kolay bir sekilde ulasilabilir. -- En son tanimlanan herhangi bir ‘x’ degeri için yapilan islemlerden sonra bu ‘x’ degeri komut satirina yazilip enter tusuna basilirsa daha önce neye karsilik olarak tanimlandigi ekrana yazilacaktir. -- n x 1 veya 1 x n boyutunda vektör tanimlamak için : x=[1 2 3 -4 -5] veya X=[1,2,3,-4,-5] yazilmalidir. Yukaridaki iki yazim biçiminden okuma kolayligi olmasi için ilk yazilan tip kullanilacaktir. -- Tanimlanan bu satir vektörünü sütun vektörüne dönüstürmek için : y=x’ yazilirsa ekranda görülen deger asagidaki gibi olacaktir: y= 1 2 3 -4 -54 -- Matris tanimlamak için asagidaki A matrisi verilmis olsun : 1.2 10 15 A = 3 5.5 2 4 6.8 7 Bu matrisi MATLAB’e tanitmak için su sekilde yazilmalidir : A = [1.2 10 15 ; 3 5.5 2 ; 4 6.8 7] Yani her satirin sonunun neresi oldugunu konulan noktali virgül isareti temsil etmektedir. -- Örnek olarak asagidaki B matrisini tanitmak için : 1 e -0.02 B = v2 3 B = [1 exp(-0.02); sqrt(2) 3] seklinde yazilmalidir. Ekranda ise su sekilde gözükecektir: B = 1.0000 0.9802 1.4142 3.0000 -- Apostrofi isareti (‘) matrisin konjüge transpozesinin alinmasina yarar. Eger matris reel bir matris ise basit olarak transpoze alim islemi olarak da tanimlanabilir.. Yeni bir A matrisi tanimlayalim : A = [1 2 3 ; 4 5 6 ; 7 8 9] Ekranda görülecek matris su sekilde olacaktir : A = 1 2 3 4 5 6 7 8 95 Bu matrisin transpozesini almak için : C = A’ yazilirsa ekranda görülecek transpoze degeri : C = 1 4 7 2 5 8 3 6 9 -- Kompleks sayilarin girilmesi için ise i 2 =-1 denkleminin kökü i veya j olarak tanimlanir. Örnek olarak 1+jv3 degerini tanitmak için : X = 1+sqrt(3)*i veya X = 1+sqrt(3)*j olarak yazilmalidir. Bu kompleks sayi üstel formatta da yazilabilmektedir : 1+jv3 = 2 exp[(? /3)*j] Bu durumda komut satirina asagidaki ifade yazilacaltir : x = 2 exp[pi/3)*j] i ve j daha önceden degisken olarak kullanilmissa tanimlama için ii ve jj kullanilacaktir.Yani : ii = sqrt(-1) jj = sqrt(-1) Dolayisiyla asagidaki yazim da mümkün olmaktadir : X = 1+sqrt(3)*ii X = 1+sqrt(3)*jj6 -- Kompleks matris tanimlamak için asagidaki X matrisi verilmis olsun: 1 j X = -j5 2 Komut satirina ise su sekilde girilecektir : X = [1 j ; -j5 2] Bu durumda ekranda görülecek deger : X = 1.0000+0 0+1.0000i 0-5.0000i 2.0000+0 Y = X’ komutu yazilirsa : Y = 1.0000+0 0+5.0000i 0-1.0000i 2.0000+0 iletisi ekranda okunacaktir. Daha önce de belirtildigi gibi yukaridaki islem konjüge transpoze olarak algilanmaktadir. Eger sadece transpoze alinacaksa (konjügesiz) komut su sekilde yazilmalidir : Y.’ veya conj(Y’) Bu durumda ekranda gözükecek degerler : ans = 1.0000+0 0-1.0000i 0+5.0000i 2.0000+0 -- Toplama ve çikarma islemlerinin yapilmasi için asagidaki M ve N matrisleri verilmis olsun : 2 3 1 0 M = 4 5 N = 2 3 6 7 0 47 Bu degerleri ekrana girmek için: M = [2 3 ; 4 5 ; 6 7] M = 2 3 4 5 6 7 N = [1 0 ; 2 3 ; 0 4] M = 1 0 2 3 0 4 Toplama islemi için: C = M+N C = 3 3 6 8 6 11 Eger x vektörü su asagidaki gibi verilirse : 5 X = 4 6 Bu vektörü su sekilde tanitmak gerekir : X = [5 ; 4 ; 6] Örnegin T = X-1 gibi islemi gerçeklestirmek için : T = X-1 T = 4 3 58 -- Matris çarpimi daha önce de belirtildigi gibi * çarpma operatörüyle yapilmaktadir. Asagidaki örnek incelenirse çarpmanin da tanimi geregi çarpilan matrislerin boyutlarinin uyusmasi gerekmektedir. Aksi takdirde çarpma islemi yapilmayacak ve hata mesaji verilecektir. x = [1 ; 2 ; 3]; y = [4 ; 5 ; 6]; A = [1 1 2 ; 3 4 0 ; 1 2 5] x’*y ans = 32 x*y’ ans = 4 5 6 8 10 12 12 15 18 b = A*x b = 9 11 20 Bunlarin disinda matris bir skaler degerle de çarpilabilir : 5*A ans = 5 5 10 15 20 0 5 10 25 -- Matris üssü ( expm(A) ) n x n matrise uygulanir.Matematiksel tanimi ise su sekildedir: expm(A) = I + A + A 2 /2! + A 3 /3! + ... Eger A kompleks bir matris ise abs(A) degeri de kompleks modül degerler üzerinden hesaplanacaktir.Yine matematiksel ifadesine bakacak olursak : abs(A) = sqrt(real(A).^2 + imag(A).^2)9 angle(A) ise faz açilarini radyan cinsinden A kompleks matrisi için hesaplamaktadir. Burada tanim degerleri –? ve + ? arasinda kabul edilmektedir. Sonuç olarak verilen bir K matrisi için asagidaki uygulama incelenebilir : A = [2+2*i 1+3*i ; 4+5*i 6-i]; abs(A) ans = 2.8284 3.1623 6.4031 6.0828 angle(A) ans = 0.7854 1.2490 0.8961 -0.1651 -- Kompleks bir sayinin modülü ve faz açisini bulmak için : z = x + iy = re iT r = abs(z) theta = angle(z) z = r*exp(i*theta) -- Bir vektörün elemanlarinin teker teker karesinin alinmasi islemi su sekilde yapilmaktadir : x = [1 2 3]; x.^2 ans= 1 4 9 Eger kompleks sayilar mevcut ise : y = [2+5*i 3+4*i 1-i] y.^2 ans = -21.0000+20.0000i -7.0000+24.0000i 0-2.0000i10 2x2 bir kare matris olursa yine ayni sekilde : A = [1 2 ; 3 4]; A.^2 ans = 1 4 9 16 -- Eleman elemana çarpma islemi için çarpma operatörünün önüne bir nokta isareti (.) konmaktadir : x = [1 2 3], y = [4 5 6] z = [x.y] z = [4 10 18] Bir örnek daha verilirse : 1 2 3 4 5 6 A = B = 1 9 8 7 6 5 C = A.*B C = 4 10 18 7 54 40 -- Bir matrisin tüm elemanlarinin tek tek karesini almak için : A=[ 1 2 3 4 ] A.^2 ans = 1 4 9 16 -- Eleman elemana bölme için ise : u = x./y11 u = 0.2500 0.4000 0.4000 0.1429 1.5000 1.6000 -- Bir matrisin tersini bulmak için inv(A) komutu kullanilir : A = [0 1 0;0 0 1;-6 -11 -6]; inv(A) ans = -1.8333 -1.0000 -0.1667 1.0000 0 0 0 1.0000 0 -- Çesitli komutlar ve durumlar tek bir sirada virgül (,) veya noktali virgül ile (;) ayrilarak yazilabilir. -- Çikis formatini istedigimiz uzunlukta elde edebiliriz. Eger matris elemanlari tamsayi ise bu durum sonuçta bir degisiklik yapmayacaktir. Bunun için asagidaki komutlari kullanmak gerekmektedir : format short format long x = [1/3 0.00002]; x x = 0.3333 0.0000 format short; x x = 0.3333 0.0000 format long; x x = 0.3333333333333333 0.0000200000000000012 -- 1’den 5’e kadar sayilari 0.5’lik araliklarla yazdirmak istersek iki nokta’yi (:) kullanmak yeterli olacaktir : t = 1 2 3 4 5 t = 1:0.5:3 t = 1.0000 1.50000 2.0000 2.50000 3.0000 Düzgün azalan biçimde yazdirirsak : t = 5:-1:2 t = 5 4 3 2 -- Bir matrisin i. satirini veya j. sütununu görüntülemek için asagida tanimlanan A matrisini komutlariyla inceleyelim : Asagidaki A matrisinin 2. satiri görüntülemek için : A(i , :) A = [0 1 0;0 0 1;-6 -11 -6] A(2 , :) ans = 0 0 1 A matrisinin 3. sütununu görüntülemek için : A(: , 3) ans = 0 1 -6 -- Bir matrisin (i,j) ninci elemanini bulmak için : k = A(3,3) k = -613 -- Bir matrisin boyutlarini ögrenmek için size(A) komutu, rankini bulmak için rank(A) kullanilir. A= 2 3 2 5 4 1 2 6 8 size(A) ans = 3 3 rank(A) ans = 3 -- Bir matrisin determinantini bulmak için det(A) komutu kullanilir. A= 2 3 2 5 4 1 2 6 8 det(A) ans = -18 -- Bir matrisin normunu bulmak için ise norm(x) yazmak gerekmektedir. Matematiksel norm ifadesini verecek olursak : norm(x) = sum(abs(x).^2)^0.5 x = [2 3 6] norm(x) ans = 714 -- Bir matrisin özdegerlerini bulmak için eig(A) komutu kullanilir : A = [0 1 ; -1 0] eig(A) ans = 0+1.0000i 0 -1.0000i -- Öz vektörleri bulmak da tek satirlik bir islem gerektirmektedir. Aslinda özvektörleri bulmak için verilen [X,D] = eig(A) komutu ayni zamanda öz degerleri de buldugu için her iki bilgiye ayni anda ulasma imkani olmaktadir : A = [0 1 0 ; 0 0 1 ; -6 -11 -6] [X,D] = eig(A) X = -0.5774 0.2182 -0.1048 0.5774 -0.4364 0.3145 -0.5774 0.8729 -0.9435 D = -1.0000 0 0 0 -2.0000 0 0 0 -3.0000 Burada X sonuç matrisinin her bir sütunu verilen A matrisinin bir öz degerini göstermektedir. D sonuç matrisinin diyagonalindeki (kösegenindeki) elemanlarin her biri de verilen A matrisinin özdegerlerini göstermektedir. Verilen es boyutlu farkli iki A ve B gibi matrisin genellestirilmis öz degerlerini ve öz vektörlerini bulmak için ise [X,D] = eig(A,B) komutu yazilmalidir. -- Karakteristik denklemi bulmak için poly(A) komutu kullanilir. A = [0 1 0 ; 0 0 1 ; -6 -11 -6] p = poly(A) p = 1.0000 6.0000 11.0000 6.000015 Burada görülen sonuç katsayilari karakteristik denklemin katsayilaridir. Yani : s 3 + 6s 2 + 11s + 6 = 0 -- Bir polinomun köklerini bulmak için roots(a) komutu yazilmalidir. Yukaridaki karakteristik denklemin köklerini bulmak istersek : r = roots(p) r = -3.0000 -2.0000 -1.0000 -- Polinomlarin çarpimi için conv(a,b) komutu kullanilir. a(s) = s 2 – 20.6 b(s) = s 2 + 19.6s + 151.2 a(s) ve b(s) polinomlarini çarpmak için : a = [1 0 -0.26]; b = [1 1.96 151.2] c = conv(a,b) c = 1.0e+003 0.0010 0.0196 0.1306 -0.4038 -3.1147 Dolayisiyla çarpim sonucu su sekilde yazilabilir : c(s) = s 4 + 19.6s 3 + 130.6s 2 – 403.8s – 3114.7 -- Bir polinomda herhangi bir tamsayi degerini hesaplatmak için polyval(c) komutu kullanilir : p(s) = 3s 2 + 2s + 1 p = [3 2 1]; polyval(p,5) ans = 86 -- 1 ve 0 sayilarinin istenilen matrisel boyutta çabuk olarak üretilebilmesi için ones(m,n) ve zeros(m,n) komutlari kullanilabilir :16 ones(2,2) ans = 1 1 1 1 zeros(3,3) ans = 0 0 0 0 0 0 0 0 0 -- Birim matris de eye(n) komutuyla istenilen boyutta olusturulabilir : eye(5) ans = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 -- Bir matrisin kösegenindeki elemanlari listelemek için diag(A) komutu kullanilir : A = [1 2 3 ; 4 5 6 ; 7 8 9] ; diag(A) ans = 1 5 9 Kösegenin elemanlari haricindeki matris bilesenleri 0 olarak göstermek istersek : diag(diag(A)) ans = 1 0 0 0 5 0 0 0 917 Kösegen matrisi olusturmayla alakali asagidaki diger örnekler de incelenebilir : diag(1:5) ans = 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 0 5 diag(0:4) ans = 0 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 4 [diag(1:5) – diag(0:4)] ans = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 -- Bir matrisi rastgele olarak olusturmak için rand(n) komutu kullanilir.0 ile 1 arasindaki sayilari alir. rand(4) ans = 0.3654 0.6739 0.3603 0.0493 0.1400 0.9994 0.5485 0.5711 0.5668 0.9616 0.2618 0.7009 0.8230 0.0589 0.5973 0.962318 ALISTIRMALAR 1- Sin(x) ’i ilk 10 terim kullanarak bulan bir Matlab programi yaziniz. X açi degerinin derece olarak kullanicidan alip sin(x)’i bulunuz ? Sin(x) = x – x 3 /3! + x 5 /5! – x 7 /7! + x 9 /9! – ... 2- Yerden V 0 hiziyla ve T açisiyla firlatilan bir bir topun t = 0,1,2,...10 saniye boyunca hareket bilgilerini veren.Sema T, Vx, Vy bilgilerini her saniyede görüntüleyebilmelidir. Not1: Gerekli formüller asagida siralanmistir.(g =10 m/s 2 , Yer çekimi ivmesi) V x = V 0 cos(T) ; V y = V 0 sin(T) – gt ; V = (V x 2 + V y 2 ) 1/2 Not2: Topun tüm harketi boyunca yerden yeterince yüksekte oldugunu varsayiniz.19 BÖLÜM 2 : GRAFIK ve EGRI ÇIZIMLERI -- x ve y ve ktörleri ayni boyutta ise bu vektörleri ekrana çizdirmek için plot(x,y) komutu kullanilir. A =[ 7 2 5]; B =[ 5 4 8 ]; plot(A,B); grid Bu durumda grafik ekrana asagida gösterildigi gibi otomatik olarak çizilecektir : Ayrica plot(X,Y,‘x’) komutu çizilen egriyi ‘x’ karakterini kullanarak çizmektedir. -- Asagida grafik çizimiyle ilgili bazi özellikler siralanmistir : x=3:0.5:10 Seçilen bir parametreye göre (burada x parametresi seçilmis) çizdirilmesi planlanan egrinin sinirlari yukaridaki gibi yazilir. 3 ve 10 degerleri çizdirilmek istenen araligi, ortadaki 0.5 degeri artis miktarini göstermektedir. grid Grafik arka yüzünün ölçekli olarak gösterilmesini saglar. title(‘...’) Çizilen grafige baslik yazmak için kullanilir. xlabel(‘...’) Çizilen grafigin x-eksenine istenilen açiklamayi yazmak için kullanilir.20 ylabel(‘...’) Çizilen grafigin y-eksenine istenilen açiklamayi yazmak için kullanilir. text(‘X,Y,‘text’) Grafik ekrani üzerine istenilen koordinatlar dahilinde herhangi bir açiklama yazmak için kullanilir. . + * o x Istenildigi takdirde çizilen egrinin düz çizgi olarak degil de farkli karakterlerle çizdirilebilir. Bunlar için ise yukarida gösterilen nokta, arti, yildiz, yuvarlak ve x karakterleri kullanilir. Bu karakterleri plot() komutu içerisinde ‘+’ seklinde yazmak yeterli olacaktir. r g b w i Çizilen egrinin rengi de yukarida gösterilen kisaltmalarla degistirilebilir. Burada ‘r’ kirmizi renk (red), ‘g’ yesil renk (green), ‘b’ mavi renk (blue), ‘w’ beyaz renk (white) ve ‘i’ ise (invisible) olarak kisaltimistir. Not : Bu özellikler ve daha farkli görüntü özellikleri grafik ekrani üzerindeki “Insert” ve “Tools” menüleri araciligiyla komut satirini kullanmadan da yapilabilmektedir. -- Asagidaki örnekte ise y = x 2 egrisini 0 ve 3 araliginda çizdirelim : x = 0:0.1:3; y = x.^2; plot(x,y,‘r’); title(‘y=x 2 egrisi’); xlabel(‘x’); grid; ylabel(‘y’)21 -- Birden fazla egriyi tek bir grafik ekrani üzerinde görmek için çizdirilmesi istenen egriler ayni plot(...) komutu içinde yazilmalidir. -- Birden fazla egriyi üst üste çizme uygulamasi olarak a sagidaki örnekte sin(x) ve cos(x) egrileri tek bir grafik ekrani üzerinde çizdirilmistir : t = 0:0.05:10; x = sin(t); y = cos(t); plot(t,x,’x’,t,y,’o’); grid; title(‘Sin ve Cos Egrileri’); xlabel(‘Saniye’); ylabel(‘x=sint ; y=cost’); text(3,0.45,’sint’); text(0.8,-0.3,‘cost’)