MATLAB PROGRAMLAMAYA GİRİŞ

Transkript

MATLAB PROGRAMLAMAYA GİRİŞ
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(<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.
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

Benzer belgeler

MATLAB`A GİRİŞ

MATLAB`A GİRİŞ 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=

Detaylı