MATLAB PROGRAMLAMAYA GİRİŞ MATLAB, MATrix LABoratory sözcüklerinden gelir ve temelde sayısal ve analitik olarak matematiksel fonksiyonların ifadelerinin kullanıldığı başta mühendislik alanında olmak üzere sayısal analiz yöntemlerini kullanan bilimlerde son yıllarda oldukça sık kullanılan bir hazır yazılım paketidir. Özellikle yüksek performans gerektiren algoritma hazırlama ve geliştirme, sayısal analiz, benzetim, mühendislik problemlerinin sayısal ve grafik çözüm tekniklerinde son derece etkindir. 1.1. M-Dosyaları M-dosyaları MATLAB ortamında kullanılan komutlardır ve veri analizini sağlayan fonksiyonlardır. Bu fonksiyonlar her amaca yeterli olsa da sonuçlara daha hızlı ulaşabilmek için kullanıcıya özel fonksiyonlar yani yeni M-dosyaları oluşturulabilir. Çeşitli yollarla bu M- dosyalarını hazırlanabilir. Ya bir komutlar dizisi sayesinde sonuca ulaşılır ya da function kelimesiyle başlayan bir fonksiyonel dosya oluşturulur. Önemli olan istenilen sonucu kısa zamanda verebilmesidir. M-dosyası oluşturmak için ilk yol file menüsünden new alt menüsü içeriklerinden M-file ı seçmektir, bu seçimle istenilen alan oluşturulmuş olur. Başka bir yol ise Command Window da edit yazarak oluşturmaktır. Ardından kullanıcı amacına uygun bir program ya da fonksiyon yazabilir. 1.2. Temel Matematiksel İşlemler Bu program yardımıyla birçok matematiksel işlem kolayca yapılabilir. >> 5^8 40 >> sqrt(2) 1.41421356237310 % ln(14)+sin(p/4) asagidaki sekilde hesaplanir: >> log(14)+sin(pi/4) 3.34616411080181 Matematiksel işlemlerden önce aşağıdaki komutlar kullanılırsa oluşacak sonucun gösterim formatı değiştirilebilir. format long: istenilen sonucun duyarlılığı gösterir. format rat: sonucu kesirli halde gösterir. format compact: işlem sonucu arasına ekstra boşluk bırakılmaz. Temel trigonometrik operatörler: cos, sin, tan, sec, csc, cot tersleri: acos, asin, atan, asec, acsc, acot Üstel fonksiyon: exp Doğal logaritma: log MATLAB de hazır fonksiyonların kullanım şekilleri bilinmek istenirse help komutu kullanılır. 1
1.3. Değişkenler Tüm yazılabilir karakterler (Türkçe karakterler dışında) değişken olarak atanabilir ve = olarak verilir. >> x=23 x = 23 Değişken isimleri büyük ve küçük harf ayrımına hassastır. X ve x değişkenleri ayrı olarak tanımlanabilir. >> x^2 3*x+2 30 >> log(x) 1.94591014905531 >> sin(x) 0.65698659871879 Yeni bir ifade için bir önceki değişken kullanılabilir. Her işlem sonucu bellekte saklanır. >>x=7 x= 7 >> y=8*x y = 56 >> x=x+5 x = 12 who, komutu kullanılan değişken isimlerini verir. >> who Your variables are: ans x y whos, komutu değişkenlerin boyut bilgisini verir. >> whos Name Size Bytes Class ans 1x1 8 double array x 1x1 8 double array y 1x1 8 double array Grand total is 3 elements using 24 bytes Bellekteki değişkenleri silmek için clear komutu kullanılır. 2
1.4. Karmaşık Sayılar Genel formatı a+ib, a-ib, a+bj, a+jb olan ifadelerdir. >>2-3i 2.0000 3.0000i >> 2 3*i 2.0000 3.0000i Karmaşık sayıların tanımında complex fonksiyonu da kullanılabilir. Bu fonksiyon karmaşık sayının gerçel ve sanal kısımlarını verir. >> x=3;y=4; >> complex(x,y) 3.0000 + 4.0000i Karmaşık Sayı işlemleri abs: Mutlak değer alır (Genlik bilgisi). angle: Faz açısı. conj: Karmaşık eşlenik. imag: Karmaşık sanal kısım. real: Karmaşık gerçel kısım. 1.5. Temel İstatistiksel İşlemler Özellikle gürültü gibi stokastik veriler üzerinde yapılacak analizler ve değerlendirilmeler için istatistiksel yöntemleri MATLAB de kullanmak mümkündür. Bilinen en temel komutlar; max: Veri kümesindeki en büyük değeri bulur. min: Veri kümesindeki en küçük değeri bulur. length: Küme içinde kaç eleman olduğunu verir. sum: Kümenin içindeki elemanların toplamını verir. prod: Verilerin çarpımını hesaplar. median: Verilerin ortanca değerini hesaplar. std: Standart sapma. mean: Ortalama değer ya da aritmetik ortalama. geomean: Geometrik ortalama. harmmean: Harmonik ortalama. sort: Küme elemanlarını azalan sırada hazırlar. 1.6. Yuvarlatma İşlemleri fix: Sıfıra doğru yuvarlatır. floor(x):. x ten küçük veya eşit en yakın tam sayıya doğru yuvarlatır. ceil(x): x ten büyük veya eşit en yakın tam sayıya doğru yuvarlatır. round: En yakın tamsayıya yuvarlatır 3
1.7. Matrisler ve Vektörler Matris oluşturmak için köşeli parantez kullanılır ve ; ile satırlar ayrılır. >> A=[2 11-3 8; 1 0 8-3; 7 1 2 5] A = 2 11-3 8 1 0 8-3 7 1 2 5 Sonuç verecek olan bir komut satırı sonuna ; konulursa komut penceresinde o komutun oluşturduğu değişkenin değeri yazılı olarak görünmez. >> B=[2 0 3; 1 1 3]; Vektörler matrislerin tek kolon halidir ve gösterimleri; >> v = [ 2; 3; -4] v = 2 3-4 Bir satır vektörü bir satırı olan bir matristir. >> w=[3-2 5 11] w = 3-2 5 11 Örneğin iki sayı arasında sıralı satir vektörü oluşturmak için 'a:b'; >> 2:5 2 3 4 5 'j:i:k' bir satir vektörünü tanımlar ve j başlangıç, i artım ve k son elemanı gösterir. >> 3:2:9 3 5 7 9 Matrisin transpozu >> A=[5-2 9; 11 7 8] A = 5-2 9 11 7 8 >> A' 5 11-2 7 9 8 4
Nokta Çarpım MATLAB dilinde nokta işlemler çarpma *. Bölme./ veya.\ Üst alma.^ olarak kullanılır. Yani nokta işaretli işlemler matrislerde elemanter işlem yapılacağını gösterir. n bir skaler olmak üzere a n, a matrisindeki her bir elemanın n. kuvvetinin alınacağını ifade eder. Vektörlerin nokta çarpımında, karşılıklı her eleman çarpılır ve birikmiş toplam elde edilir. Nokta çarpım simetriktir aynı sonuç alınır. >> v=[7; 23; 15; 2], w=[5; -2; 1; -8] v = 7 23 15 2 w = 5-2 1-8 >> dot(v,w) -12 Bir vektörün boyu v ( vv. ) =. >> vlength=sqrt(dot(v,v)) vlength = 28.4077 Ya da 'norm' komutu ile de elde edilir. >> norm(v) 28.4077 İki vektör arasındaki açı θ, vw. v w cos( θ ) edilir. >> theta=acos(dot(v,w)/(norm(v)*norm(w))) theta = 1.6144 >> theta*180/pi 92.4971 %radyan cıkan sonucun derece olarak karsılıgı vw. = buradanθ = arccos v w olarak elde Bir matrisin tüm karesel alt matrislerinden, determinantı sıfırdan farklı olan en yüksek boyutlusunun boyutuna A matrisinin rankı denir. 5
>> A=[1 2 1 4; 2 3 1 3; 3 2 1 2; 4 3 1 1] A = 1 2 1 4 2 3 1 3 3 2 1 2 4 3 1 1 >> rank(a) 3 Ters İşlemler 1 Bir A matrisinin tersi A ; A^(-1) ya da inv(a) ile gösterilir. inv ters işlem yapma operatörüdür. Buradaki dikkat edilmesi gereken nokta A matrisin tekil olmamasıdır. >> A=[2 1 1; 1 2 2; 2 1 2] A = 2 1 1 1 2 2 2 1 2 >> Ainv=inv(A) Ainv = 2/3-1/3 0 2/3 2/3-1 -1 0 1 Sonucun sağlanması için tersi ile kendisinin çarpımı birim matrisi vermelidir. 1.8. Hazır Matris Fonksiyonları rand veya randn fonksiyonları bazı durumlarda yalnızca bir özelliği veya bir şeyi denemek ve durumunu gözlemek için rasgele sayılardan oluşmuş bir matris oluşturmak için kullanılır. rand düzenli olarak dağılmış randn ise normal olarak dağılmış rasgele sayı üretir. Örneğin; a=-5 ile b=5 arasında yani -5 ile +5 arasında rasgele sayılı 2x4 (iki satır 4 sütunlu) bir matris üretmek istenirse >>a=-5+10*rand(2,4) a = 4.3547-0.8973-4.4211 3.1317 4.1690 3.9365-1.4713-4.9014 ones fonksiyonu elemanları 1 olan bir matris zeros fonksiyonu elemanları 0 olan matris oluşturur. 6
>> s=ones(3) s = 1 1 1 1 1 1 1 1 1 >> d=zeros(4) d = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 eye fonksiyonu ile birim matris oluşturulur. >> f=eye(3,3) f = 1 0 0 0 1 0 0 0 1 1.9. Özvektörler ve Özdeğerler Bir kare matrisin özdeğerlerini bulmak için eig komutu kullanılır. >> A=[ 3 1 1; 1 3 1; 1 1 3] A = 3 1 1 1 3 1 1 1 3 >> eig(a) 2.0000 2.0000 5.0000 >> [Q,D]=eig(A) %A caprazlanabilir ise Q = -0.8164-0.0137 0.5774 0.3963 0.7139 0.5774 0.4201-0.7001 0.5774 D = 2.0000 0 0 0 2.0000 0 0 0 5.0000 1 Q matrisinin sütunları A matrisinin özvektörlerini oluştururq AQ= D. >> inv(q)*a*q 2.0000 0 0.0000 0.0000 2.0000 0.0000-0.0000 0.0000 5.0000 7
Bir matrisin köşegen değerlerinin gösterimi için diag(a) kullanılır. >> a=[2 4 4;2 3 1;3-2 5] a = 2 4 4 2 3 1 3-2 5 >> diag(a) 2 3 5 1.10. Grafik Çizimleri plot fonksiyonu belirli bir düzlem verisinin grafik gösterimi için kullanılır. En temel çizim komutu olan bu komut üç temel şekilde kullanılabilir: 1. plot(x,y): x ve y matrislerinin elemanlarını koordinat düzleminde (x 1,y 1 ), (x 2,y 2 ), (x 3,y 3 ) olacak şekilde noktalara yerleştirerek aralarını düz bir çizgiyle birleştirir. 2. plot(y): y matrisinin elemanlarını koordinat düzleminde (1,y 1 ), (2,y 2 ), (3,y 3 ) olacak şeklindeki noktalara yerleştirerek aralarını düz bir çizgiyle birleştirir. 3. plot(x 1,y 1,x 2,y 2 ): y 1 matrisini x 1 e göre, y 2 matrisini de x 2 ye göre çizer. stairs komutu sadece stairs(x,y) ve stairs(y) şeklinde kullanılabilir. plot tan farklı olarak grafikteki noktaları basamak fonksiyonları şeklinde birleştirerek çizer. stem komutu da stem(x,y) ve stem(y) şeklinde kullanılabilir. plot tan farklı grafikteki noktaları darbe fonksiyonları şeklinde çizer. subplot ve hold on off komutları birden fazla grafik aynı ekranda görülmek isteniyorsa kullanılır. hold on komutu art arda sıralanan grafik çizim komutlarında grafikleri aynı grafik penceresinde üst üste çizer. Bu özellik hold off ile kapatılır. subplot(<satır_sayısı>,<sütun_sayısı>,<kaçıncı_grafik_oldugu>) şeklinde ifade edilebilir. Çizilen grafiğe başlık title, x ekseni etiketi xlabel, y ekseni etiketi ylabel ve legand legend komutlarıyla eklenir. Grafik ekranında grafiğin çizgi rengi, işareti ve şekli istendiğinde değiştirilebilir. Bunun için aşağıda verilen harf, şekil ve işaretler plot( ) fonksiyonuna yazılır. Renk İşaret Çizgi y sarı * yıldız : nokta m meganta s kare.- nokta sürekli c pembe d elmas - sürekli r kırmızı v üçgen aşağı -- kesikli g yeşil ^ üçgen yukarı b mavi < üçgen sola k siyah > üçgen sağa 8
1.11. Sembolik Değişkenler ve İfadeleri MATLAB simgesel işlemlerde Symbolic Math Toolkit i kullanır. Kullanılacak fonksiyonlar help symbolic ile görülebilir. Simgesel değişken ve işlemlere giriş yapmak için symintro yazmak yeterlidir. Sayısal işlemlerde ve karakter indislerinde bildirime gerek yok iken, simgesel işlemlerde kullanılacak değişkenlerin önceden bildirilmesi gerekir. Örneğin, a gibi bir sembolik değişken aşağıdaki gibi bildirilir. >> sym a a %veya >> sym('a') a Bir fonksiyonda geçen değişkenler x,y ve z olsun >> syms x y z %Anlami x=sym('x'), y=sym('y') ve z=sym('z'). >> S=x^2-y^2 S = x^2-y^2 Bu ifadenin faktörü (çarpanları) >> factor(s) (x-y)*(x+y) Bir fonksiyonu sadeleştirmek için simplify fonksiyonu kullanılır. >> S=(x^3-4*x)/(x^2+2*x) S = (x^3-4*x)/(x^2+2*x) >> simplify(s) x-2 Fonksiyonları tanımlamak için bir başka yol da inline komutunu kullanmaktır. Örnek olarak g x, y = x 3xy+ 2fonksiyonu aşağıdaki gibi yazılabilir. ( ) 2 >> g=inline('x^2-3*x*y+2') g = Inline function: g(x,y) = x^2-3*x*y+2 9
1.12. Polinomlar Polinomlar genellikle tek değişkenli ve sabit katsayılı fonksiyonlardır. Bu fonksiyonların en genel hali aşağıda verilmiştir. n n 1 ax n + an 1x + + ax 1 + a0 = 0 (1.1) Denklem (1.1) de verilen eşitliğin kökleri gerçek veya karmaşık sayı olabilirler. Polinom Kökleri MATLAB da polinom köklerini bulmak için ilk önce katsayılar dizini Denklem (1.2) deki gibi oluşturulur daha sonra roots(kat) yazılarak sonuçlar elde edilir. [,,,, ] k = a a a a (1.2) n n 1 1 0 5 3 2 Örnek 1.1: 4x -x + 2x -x-20= 0 denkleminin köklerini MATLAB yardımı ile hesaplayınız. >> k=[4, 0, -1, 2, -1, -20] k = 4 0-1 2-1 -20 >>roots(k) ans= 1.3825 0.4639 + 1.3186i 0.4639-1.3186i -1.1552 + 0.7187i -1.1552-0.7187i Kökleri Bilinen Polinomun Katsayıların Bulunması Bir polinomun çözüm kümesi biliniyor ise MATLAB onu bir polinom halinden de istenirse yazabilir. poly([ kök 1, kök 2, kök 3 ]) yazılarak türetilen polinomun katsayıları elde edilir. Örnek 1.2: Kökleri x1 = 4, x2 = 1ve x3 = 1 olan bir polinom türetiniz. >> poly([-1,1,4]) 1-4 -1 4 Bunun anlamı 3 2 x x x 4 4= 0yani polinom elde edilmiş olur. Polinom Değerini Bulmak Eğer bir polinomun verilen herhangi bir değişken değerine karşı gelen polinom değerini bulmak istersek polyval( ) komutu kullanılır. 10
Örnek 1.3: ( ) 5 3 2 f x = 4x x + 2x x 20 fonksiyonunun x = 3 iken değerini hesaplayınız. >>k=[4, 0, -1, 2, -1, 20] k = 4 0-1 2-1 20 >>polyval(k,3) 980 Polinom Çarpımı ve Bölme Polinom çarpımı, bölme ve çıkarma işlemlerinden daha zordur. Bu işlemlerin daha kolay yapılabilmesi adına çarpma için MATLAB conv( ) komutunu ve bölme işlemi için de deconv() komutunu kullanılır. Burada deconv kullanılırken biraz dikkat etmek edilmesi gereken nokta tam bölünememe durumudur. Eğer verilen polinomlar tam bölünmüyor ve fonksiyonun kalanının gösterilmesi isteniyor ise bu durum da [a,b]=deconv(f,g) şeklinde bir komut kullanılmadır. Burada a, bölünen polinomun katsayılarını, b ise bölünmeyen kısmın katsayılarını verir. 3 2 Örnek 1.4: f ( x) = 2x 5x + 3x x ile g( x) = x 1 olarak verilirse f ( x) g( x ) ve f ( x) / g( x ) fonksiyonlarını MATLAB ile hesaplayınız. >> fk=[2-5 3-3]; >> gk=[ 1-1]; >> capma=conv(fk,gk) capma = 2-7 8-6 3 >> [bolme,r]=deconv(fk,gk) bolme = 2-3 0 r = 0 0 0-3 1.13. Sayısal Türev Türev matematiksel olarak bir f ( x ) fonksiyonunun x e göre değişim oranı olarak tanımlanır ve Denklem (1.3) deki gibi gösterilir. f ' ( x) ( +Δ ) ( ) ( ) f x x f x df x = lim = Δ x 0 Δx dx (1.3) MATLAB da türev işlemi polyder() ve diff(y) fonksiyonlarıyla yapılır. Polinomların türevi alınacak ise polyder(katsayılar) komutu ile kullanılır. Eğer bir fonksiyonu türevi alınacak ise diff() komutu kullanılır. n. dereceden türev diff(f,n) olarak verilir. Bir fonksiyonun bilinmeyen parametrelerine göre türevinin alınması için Jacobian matrisin oluşturulması gerekir. Bunun için jacobian komutu kullanılır. Adı diferansiyel denklemlerin çözümü için dsolve komutu kullanılmaktadır. 11
1.14. İntegral Simgesel integral alma fonksiyonu int genel kullanım şekli int(s) : findsym ile belirlenen simgesel değişkene göre S nin belirsiz integralini alır int(s,v) : S nin v ye göre integralini alır. int(s,a,b) : S nin varsayılan değişkene göre a dan b ye kadar belirli integralini alır. int(s,v,a,b) : S nin tanımlı a dan b ye kadar belirli integralini alır. x x dx integralinin hesaplanması 5 Örnek 1.5: ( 2 4 + 20) >>int(-2*x^5-4*x+20) -1/3*x^6-2*x^2+20*x >> pretty(int(-2*x^5-4*x+20)) 6 2-1/3 x - 2 x + 20 x MATLAB sayısal integral almak için birçok komut kullanmaktadır. Bunlardan bazıları trapz, quad ve dblquad dır. Trapz(x,y) Komutu Trapez sayısal integralde kullanılan yöntemlerde trapez yöntemine göre integral hesaplar. Yani verilen x ve y noktalarının oluşturacağı trapezlerin alanı integral değerini verir. Quad(f, xmin, xmax) Komutu Bu komut integral işlemini nümerik olarak yinelemeli Simpson yöntemini kullanarak [a b] aralığında hesaplar. İntegral I= quad(f,a,b) yazılarak hesaplanabilir. Dblquad komutu MATLAB de iki değişkenli fonksiyonların integralleri de alınabilir. Yani f (, ) xy gibi iki değişkene bağlı ise fonksiyonun integrali dblquad(f,xmin,xmax,ymax,ymin) şeklinde yazılarak hesaplatılabilir. 12