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 Mdosyaları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 ans = 40 >> sqrt(2) ans = 1.41421356237310 % ln(14)+sin(p/4) asagidaki sekilde hesaplanir: >> log(14)+sin(pi/4) ans = 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 ans = 30 >> log(x) ans = 1.94591014905531 >> sin(x) ans = 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 ans = 2.0000 – 3.0000i >> 2–3*i ans = 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) ans = 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 7125
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 ans = 2345
'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 ans = 3579
Matrisin transpozu >> A=[5 -2 9; 11 7 8] A= 5 -2 9 11 7 8 >> A' ans = 5 11 -2 7 98
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) ans = -12
Bir vektörün boyu v =
( v.v ) .
>> vlength=sqrt(dot(v,v)) vlength = 28.4077
Ya da 'norm' komutu ile de elde edilir. >> norm(v) ans = 28.4077
⎛ v.w ⎞ İki vektör arasındaki açı θ , v.w = v w cos (θ ) buradan θ = arccos ⎜⎜ ⎟⎟ olarak elde v w ⎝ ⎠ edilir. >> theta=acos(dot(v,w)/(norm(v)*norm(w))) theta = 1.6144 >> theta*180/pi ans = 92.4971 %radyan cıkan sonucun derece olarak karsılıgı
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= 1214 2313 3212 4311 >> rank(A) ans = 3
Ters İşlemler
Bir A matrisinin tersi A−1 ; 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= 211 122 212 >> 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= 111 111 111 >> d=zeros(4) d= 0000 0000 0000 0000
‘eye’ fonksiyonu ile birim matris oluşturulur. >> f=eye(3,3) f= 100 010 001
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= 311 131 113 >> eig(A) ans = 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
Q matrisinin sütunları A matrisinin özvektörlerini oluşturur Q −1 AQ = D . >> inv(Q)*A*Q ans = 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= 244 231 3 -2 5 >> diag(a) ans = 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 (x1,y1), (x2,y2), (x3,y3) … olacak şekilde noktalara yerleştirerek aralarını düz bir çizgiyle birleştirir. 2. plot(y): y matrisinin elemanlarını koordinat düzleminde (1,y1), (2,y2), (3,y3) … olacak şeklindeki noktalara yerleştirerek aralarını düz bir çizgiyle birleştirir. 3. plot(x1,y1,x2,y2): y1 matrisini x1’e göre, y2 matrisini de x2’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(,,) ş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. y m c r g b k
Renk sarı meganta pembe kırmızı yeşil mavi siyah
İşaret * yıldız s kare d elmas v üçgen aşağı ^ üçgen yukarı < üçgen sola > üçgen sağa
8
Çizgi : nokta .- nokta sürekli - sürekli -- kesikli
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 ans = a %veya >> sym('a') ans = 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) ans = (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) ans = x-2
Fonksiyonları tanımlamak için bir başka yol da ’inline’ komutunu kullanmaktır. Örnek olarak g ( x, y ) = x 2 − 3 xy + 2 fonksiyonu aşağıdaki gibi yazılabilir. >> 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. (1.1)
an x n + an −1 x n −1 + … + a1 x + a0 = 0 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 = [ an , an −1 ,… , a1 , a0 ]
(1.2)
Örnek 1.1: 4 x5 - x3 + 2 x 2 - 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ök1, kök2, kök3]) 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]) ans = 1 -4 -1 4
Bunun anlamı x3 − 4 x 2 − x − 4 = 0 yani 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: f ( x ) = 4 x5 − x 3 + 2 x 2 − 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) ans = 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. Örnek 1.4:
f ( x ) = 2 x3 − 5 x 2 + 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 ) = lim
Δx → 0
f ( x + Δx ) − f ( x ) df ( x ) = Δ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. Örnek 1.5: ∫ ( −2 x5 − 4 x + 20 ) dx integralinin hesaplanması >>int(-2*x^5-4*x+20) ans = -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 ( x, y ) gibi iki değişkene bağlı ise fonksiyonun integrali dblquad(f,xmin,xmax,ymax,ymin) şeklinde yazılarak hesaplatılabilir.
12