MATLAB ile Temel Programlama
1.1. Giriş “MATrix LABoratory” ifadesinden oluşturulan MATLAB kısaltması, 1985’li yıllarda Cleve Moler tarafından geliştirilmiştir. Matris tabanlı matematiksel işlemlerinin hızlı ve kolay olarak gerçekleştirilmesinin amaçlandığı MATLAB programında grafiksel çizimler, simülasyon ortamları, etkileşimli arayüz tasarımları (Graphical User Interface – GUI), ağ tabanlı yazılımlar (MATLAB WebServer, ASP.NET…) gibi birçok etkili araçlar bulunmaktadır. İlk sürümleri FORTRAN diliyle yazılan genel amaçlı MATLAB paket programlama dilinin, daha sonraki sürümleri C / C++ diliyle yazılmıştır. MathWorks Inc. tarafından geliştirilen yüksek performanslı sayısal hesaplamalar ve grafiksel çizimlerin gerçekleştirilebildiği MATLAB’ın özel uygulama alanlarına ait çözümleri de bulunmaktadır. İçinde barındırdığı çok sayıda araç kutusu (toolbox) ile özellikle mühendislik problemlerinin çözümünde popüler duruma gelmiştir. Tablo 1.1 MATLAB’taki bazı araç kutuları İşaret işleme Görüntü işleme Haberleşme Kontrol Filtre tasarımı Yapay sinir ağları Bulanık mantık Genetik algoritmalar
Optimizasyon Dalgacık Sistem tanımlama İstatistik Finans Sembolik matematik Kısmi dif. denklemler Eğri uydurma
1.2. MATLAB Editörü MATLAB programı çalıştırıldığında, Şekil 1.1’deki ana ekran gelmektedir. Birçok programda yer alan ana menüler ve araç çubukları bu ana ekranda (editörde) de yer almaktadır. Uygulamalar bu komut satırında kodların yazılmasıyla gerçekleştirilebileceği gibi, MATLAB dosyası (m-file) halinde yazılarak da gerçekleştirilebilir. Benzer şekilde grafiksel arayüz (GUI) kullanarak da etkileşimli arayüz programları tasarlanabilir. Ayrıca Simulink ortamında da modeller oluşturularak çalıştırılabilir. GUI tasarımına geçmek için komut satırına “guide”, Simulink ortamı için ise “simulink” yazılmaktadır.
Şekil 1.1 MATLAB ana ekranı
MATLAB komut satırında ve program kodlarında kullanılabilecek genel komutlardan bazıları aşağıda özetlenmektedir.
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER
MATLAB ile Temel Programlama
1.2.1. help Belirtilen komut ile ilgili hazırlanmış olan bilgiyi verir. Kullanım şekli:
help komut Komut satırı >> help clc CLC Clear command window. CLC clears the command window and homes the cursor. See also home. Reference page in Help browser doc clc
1.2.2. clc Komut satırı penceresini siler. Kullanım şekli: clc
1.2.3. home İmleci, sayfa başına getirir; böylece de ekrandaki bilgileri yukarı kaydırarak silme işlemini gerçekleştirir. Kullanım şekli: home
1.2.4. clear Değişkenleri ve fonksiyonları geçici bellekten siler. Kullanım şekli:
clear clear clear clear clear
değişkenler global functions all
→ Çalışma alanındaki (workspace) tüm değişkenleri siler. → Aralarına birer boşluk bırakılarak belirtilen değişkenleri siler. → Tüm genel (global)değişkenleri siler. → Tüm derlenmiş “m” ve “mex” fonksiyonlarını siler. → Tüm değişken, global, fonksiyon ve “mex” bağlantılarını siler.
1.2.5. who Şu anki (aktif) çalışma alanındaki değişkenleri listeler. Kullanım şekli:
who who global who dosya who isim
→ Şu anki çalışma alanında kullanılan değişkenleri listeler. → Global değişkenleri de listeler. → Belirtilen dosyadaki değişkenleri listeler. → Belirtilen isimde (özellikte) olan değişkenleri listeler.
1.2.6. whos “who” ile kullanımı ve görevi aynı olup sonuçları ayrıntılı (uzun biçimde) verir.
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER
MATLAB ile Temel Programlama Komut satırı >> >> >> >> >>
clear all a=33; a1=99; b=3; who
Your variables are: a
a1
b
>> whos Name
Size
a a1 b
1x1 1x1 1x1
Bytes 8 8 8
Class
Attributes
double double double
>> who a* Your variables are: a
a1
1.2.7. save Çalışma alanı değişkenlerini, belleğe kalıcı olarak kaydeder. Kullanım şekli: save save save
dosya dosya isim dosya isim biçim
→ Tüm çalışma alanı değişkenlerini belirtilen ikili “dosya.mat”a kaydeder. → Sadece ismi verilen değişkenleri belirtilen dosyaya kaydeder. → Belirtilen biçimde dosyaya kaydeder.
1.2.8. load Çalışma alanı değişkenlerini bellekten çağırır (yükler). Kullanım şekli: load load
dosya dosya isim
→ Belirtilen dosyadaki tüm çalışma alanı değişkenlerini çağırır. → Belirtilen dosyadan sadece ismi verilen değişkenleri çağırır. Komut satırı
>> clear all >> a=10; >> b=20; >> save 'ornek1.mat' >> clear all >> a ??? Undefined function or variable 'a'. >> load 'ornek1.mat' >> a a = 10 >> whos Name a b
Size 1x1 1x1
Bytes 8 8
Class
Attributes
double double
1.2.9. type MATLAB dosyasının (m-file) içeriğini komut satırında gösterir (listeler).
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER
MATLAB ile Temel Programlama
Kullanım şekli: type dosya 1.2.10. edit MATLAB dosyası (m-file) düzenlemek için editörde açar. Kullanım şekli: edit dosya 1.2.11. ! İşletim sistemine ait ilgili komutu, MATLAB ortamında çalıştırır. Kullanım şekli: !komut 1.3. Komut Satırında İşlemler MATLAB komut satırında işlemler; operatörler, komutlar veya yazılmış dosyalar kullanılarak gerçekleştirilebilir. Komut satırı >> 3+5 ans = 8 >> 2*ans ans = 16 >> a=sqrt(ans) a = 4
Komut satırında yazılan/çalıştırılan bir önceki/sonraki ifadeleri çağırmak için klavyedeki () kullanılır. MATLAB programlarında yazılan ifade tek satıra sığmazsa üç nokta yazarak (…) alt satırdan devam edilir. Komut satırı >> 3+4-... 5 ans = 2
Eğer ilgili işlemin sonucunun görüntülenmesi istenmiyorsa noktalı virgül (;) ile sonlandırılır. Komut satırı >> b=5+6; >>
MATLAB’daki tüm açıklama satırları yüzde (%) sembolüyle başlar.
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER
MATLAB ile Temel Programlama
Komut satırı >> % örnek açıklama >>
1.4. Değişkenler ve Sabitler MATLAB’ta kullanılan değişken ve sabitler gibi diğer tanımlayıcılar da “isimlendirme kuralları”na uygun olarak oluşturulurlar. Buradaki değişken isimlerinin ilk 31 karakteri anlamlıdır. Komut satırında veya tek dosyada olan değişkenler, önceden bildirimlerine gerek kalmaksızın doğrudan kullanılabilirler. Eğer işlem sonuçları herhangi bir değişkene atanmazsa otomatik olarak “ ans” (answer) değişkenine atanır. Komut satırı >> r=10; >> pi_sayisi=3.14; >> alan=pi_sayisi*r*r alan = 314 >> x=5; >> y=x^3-5*x+10 y = 110 >> w=2000e-3 w = 2
1.5. Karmaşık Sayılar MATLAB programlarında; karmaşık (kompleks) sayılar, “i” ve “j” karakterlerinden faydalanılarak doğrudan kullanılabilirler. Komut satırı >> z1=3-4i; >> z2=5+2j; >> z1+z2 ans = 8.0000 - 2.0000i >> z1-z2 ans = -2.0000 - 6.0000i >> z1*z2 ans = 23.0000 -14.0000i >> z1/z2 ans = 0.2414 - 0.8966i >> z1^3
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER
MATLAB ile Temel Programlama
ans = -1.1700e+002 -4.4000e+001i
Ayrıca karmaşık sayılarda kullanılabilecek bazı komutlar, Tablo 1.2’de özetlenmektedir. Tablo 1.2 Karmaşık sayılarda kullanılabilecek bazı komutlar Komut real imag abs angle conj compass
Kullanım şekli real( sayı ) imag( sayı ) abs( sayı ) angle( sayı ) conj( sayı ) compass( sayı )
Açıklama Belirtilen karmaşık sayının gerçel kısmını verir. Belirtilen karmaşık sayının sanal kısmını verir. Belirtilen karmaşık sayının mutlak değerini (uzunluğunu/ karmaşık modülünü) verir. Belirtilen karmaşık sayının radyan cinsinden açısını verir. Belirtilen karmaşık sayının karmaşık (kompleks) eşleneğini verir.
Komut satırı >> z=2+i; >> real(z) ans = 2 >> imag(z) ans = 1 >> abs(z) ans = 2.2361 >> angle(z) ans = 0.4636 >> conj(z) ans = 2.0000 - 1.0000i >> z' ans = 2.0000 - 1.0000i Komut satırı >> z=1+2i; >> compass(z)
90
2.5
120
60 2 1.5
150
30 1 0.5
180
0
210
330
240
300 270
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER
MATLAB ile Temel Programlama
1.6. Vektörler MATLAB programlarında, vektörler kolaylıkla tanımlanıp işlemlerde kullanılabilirler. Vektör elemanları, köşeli parantez ( [ ] ) içinde aralarına birer boşluk bırakılarak verilirler. Vektörün (dizinin) ilgili elemanına ulaşmak için de vektör adından sonra parantez içinde indis numarası verilir. Vektörlerinin ilk indisinin numarası 1’dir. Komut satırı >> % A=(1,3,5,2,4) vektörünün tanımlanması >> A=[1 3 5 2 4] A = 1
3
5
2
4
>> % B=(1+i,2-2i,3-5i) vektörünün tanımlanması >> B=[1+i 2-2i 3-5i] B = 1.0000 + 1.0000i
2.0000 - 2.0000i
3.0000 - 5.0000i Komut satırı
>> a=[3 2 1]; >> b=[2 4 6]; >> a+b ans = 5
6
7
-2
-5
>> a-b ans = 1
>> a*b ??? Error using ==> mtimes Inner matrix dimensions must agree. >> a.*b ans = 6
8
6
>> a./b ans = 1.5000
0.5000
0.1667
2.0000
6.0000
>> a.\b ans = 0.6667 >> a.^b ans = 9
16
1
>> a(1)+b(2) ans = 7
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER
MATLAB ile Temel Programlama
Komut satırı >> % A=(1,2,3,4,5,6) şeklinde elemanları düzgün artan vektör oluşturma >> A=[1:6] A = 1
2
3
4
5
6 Komut satırı
>> % B=(10,8,6,4,2) şeklinde elemanları düzgün azalan vektör oluşturma >> B=[10:-2:2] B = 10
Herhangi
bir
8
6
aralığı,
4
belirli
son ilk vektor ilk : : son nokta
2
sayıda
noktaya
bölerek
de
vektörler
oluşturulabilir:
Komut satırı >> v=1:3/5:4 v = 1.0000
1.6000
2.2000
2.8000
3.4000
4.0000 Komut satırı
>> A=[3 2 1 7 8 9] %A=(3,2,1,7,8,9) vektörü/dizisi tanımlanıyor A = 3
2
1
7
8
9
>> A(2:4)=0 %A vektörünün 2-4 indisli elemanları 0 yapılıyor A = 3
0
0
0
8
9
>> A(2:5)=[10 20 30 40] %A vektörünün 2-5 indisli elemanları değiştiriliyor A = 3
10
20
30
40
9
>> A(4:end)=1 %A vektörünün 4. indisli elemanından sonuna kadar olanlar 1 yapılıyor A = 3
10
20
1
1
1
>> A(4:6)=[] %A vektörünün 4-6 indisli elemanları kesiliyor A = 3
10
20
>> B=A(1:2) %A vektörünün 1-2 indisli elemanlarından B vektörü oluşturuluyor B = 3
10
>> B' ans = 3 10
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER
MATLAB ile Temel Programlama
1.6.1. linspace Doğrusal aralıklı (ölçekli) vektörler oluşturur. Kullanım şekli: vektör = linspace( başlangıç , bitiş , değer sayısı ) Komut satırı >> V=linspace(0,10,5) V = 0
2.5000
5.0000
7.5000
10.0000
1.6.2. logspace Logaritmik aralıklı (ölçekli) vektörler oluşturur. Kullanım şekli:
vektör = logspace( başlangıç , bitiş , değer sayısı ) Komut satırı >> Z=logspace(0,1,5) Z = 1.0000
1.7783
3.1623
5.6234
10.0000
1.6.3. size Dizinin boyutunu verir. Kullanım şekli: değişken = size( dizi )
1.6.4. length Vektörün uzunluğunu verir. Kullanım şekli:
değişken = length( dizi ) Komut satırı >> A=linspace(1,5,5) A = 1
2
3
>> size(A) ans = 1
5
>> length(A) ans = 5
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER
4
5
MATLAB ile Temel Programlama
1.7. Matrisler Vektörlerde olduğu gibi matris elemanları da köşeli parantez ( [ ] ) içinde aralarına birer boşluk bırakılarak verilirler. Matrisler; yatay veya dikey vektörlerin oluşturduğu tablo biçimindeki iki boyutlu yapılar olduklarından, her bir satır bitimi noktalı virgül ( ; ) ile belirtilir. Matrisin ilgili elemanına ulaşmak için de matris adından sonra, parantez içinde ve aralarına virgül konularak satır sütun indis numarası verilir. Yine vektörlerde olduğu gibi satır/sütunun ilk indis numarası 1’dir. Komut satırı >> A=[2 3;5 4] % A matrisi tanımlanıyor A = 2 5
3 4
>> B=[1 4;7 6] % B matrisi tanımlanıyor B = 1 7
4 6
>> A+B % A ve B matrisleri toplanıyor ans = 3 12
7 10
>> A-B % A matrisinden B matrisi çıkarılıyor ans = 1 -2
-1 -2
>> 3*A % Sabit sayı ile çarpma ans = 6 15
9 12
>> A*B % A ve B matrisleri çarpılıyor ans = 23 33
26 44
>> A.*B % A ve B matrisleri eleman eleman çarpılıyor ans = 2 35
12 24
>> A/B % A matrisiyle B matrisinin tersi çapılıyor (sağ bölme) ans = 0.4091 -0.0909
0.2273 0.7273
>> A\B % A matrisinin tersiyle B matrisi çapılıyor (sol bölme) ans = 2.4286 -1.2857
0.2857 1.1429
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER
MATLAB ile Temel Programlama
>> A./B % A matrisiyle B matrisi sağdan eleman eleman bölünüyor ans = 2.0000 0.7143
0.7500 0.6667
>> A.\B % A matrisiyle B matrisi soldan eleman eleman bölünüyor ans = 0.5000 1.4000
1.3333 1.5000
>> A^3 % A matrisinin küpü ans = 128 215
129 214
>> A.^3 % A matrisinin her bir elemanının küpü ans = 8 125
27 64
>> A' % A matrisinin transpozesi ans = 2 3
5 4
>> inv(A) % A matrisinin tersi ans = -0.5714 0.7143
0.4286 -0.2857
>> det(A) % A matrisinin determinantı ans = -7 Komut satırı >> A=[1 2 3;4 5 6;7 8 9] A = 1 4 7
2 5 8
3 6 9
>> A(2,3) % A matrisinin 2. satır - 3. sütun elemanı ans = 6 >> A(3,:) % A matrisinin 3. satırı ans = 7
8
9
>> A(:,2) % A matrisinin 2. sütunu ans = 2 5
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER
MATLAB ile Temel Programlama 8 >> A(2,2:3)=[10 20] % A matrisinin 2. satır 2-3. sütun elemanlarını değiştir A = 1 4 7
2 10 8
3 20 9
>> A(1:2,1:2)=[-1 -2;-3 -4] % A matrisinin 1-2. satır 1-2. sütun elemanlarını değiştir A = -1 -3 7
-2 -4 8
3 20 9
>> B=A(1:2,2:end) % A matrisinin 1-2. satır, 2'den sonuncu sütuna kadar elemanları B = -2 -4
3 20
1.7.1. Özel matrisler MATLAB programlarında Tablo 1.3’te özetlenen özel matris komutları kullanılabilir. Tablo 1.3 Özel matris komutları Komut zeros ones eye triu tril diag
Kullanım şekli zeros(n) zeros(m,n) ones(n) ones(m,n) eye(n) eye(m,n) triu(a) tril(a) diag(a)
Açıklama Elemanları 0 olan nxn veya mxn tipinde matris oluşturur. Elemanları 1 olan nxn veya mxn tipinde matris oluşturur. nxn veya mxn tipinde birim matris oluşturur. a matrisinden üst üçgen matris (ana köşegen ve üstü) oluşturur. a matrisinden alt üçgen matris (ana köşegen ve altı) oluşturur. a matrisinden köşegensel matris/vektör (ana köşegen) oluşturur. Komut satırı
>> zeros(2) % 2x2 tipinde sıfır matris ans = 0 0
0 0
>> ones(2,3) % 2x3 tipinde 1'lerden oluşan matris ans = 1 1
1 1
1 1
>> eye(3) % 3x3 tipinde birim matris ans = 1 0 0
0 1 0
0 0 1 Komut satırı
>> a=[1 2 3;4 5 6;7 8 9] a = 1 4 7
2 5 8
3 6 9
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER
MATLAB ile Temel Programlama
>> triu(a) ans = 1 0 0
2 5 0
3 6 9
0 5 8
0 0 9
>> tril(a) ans = 1 4 7 >> diag(a) ans = 1 5 9
Örnek-1.1: Aşağıdaki denklem sisteminin hem Kramer yöntemi hem de ters matris yöntemiyle çözünüz. I1 I 2 I 3 2 2 I1 I 2 I 3 6 I1 3I 2 2 I 3 3
Bu denklem sistemi Kramer yöntemiyle çözülürse; 1 1 1 2 1 1 1 2 1 1 1 R 2 1 1 6 1 1 2 6 1 2 1 1 3 2 3 3 2 1 3 2 1 3 2 , I2 1 , I1 I1 1 1 1 1 1 1 1 1 2 2 1 1 2 1 1 2 1 V 6 1 3 2 1 3 2 1 3 3
2 6 3 -1 1 1 2 Komut satırı
>> R=[1 1 1;2 1 -1;1 3 2]; % Katsayılar (dirençler) matrisi >> V=[2 6 3]'; % Karşı taraf (gerilimler) vektörü >> D1=[V R(:,[2:3])] D1 = 2 6 3
1 1 3
1 -1 2
>> D2=[R(:,1) V R(:,3)] D2 = 1 2 1
2 6 3
1 -1 2
>> D3=[R(:,[1 2]) V] D3 = 1 2 1
1 1 3
2 6 3
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER
MATLAB ile Temel Programlama
>> I=[det(D1);det(D2);det(D3)]/det(R) I = 2 1 -1
Ters matris yöntemiyle çözümde ise 1
1 1 1 I1 2 I1 1 1 1 2 2 1 1 I 6 I 2 1 1 6 2 2 1 3 2 I 3 3 I 3 1 3 2 3
şeklinde katsayılar matrisinin tersi alınıp karşı taraf vektörü ile çarpılır. Komut satırı >> R=[1 1 1;2 1 -1;1 3 2]; % Katsayılar (dirençler) matrisi >> V=[2 6 3]'; % Karşı taraf (gerilimler) vektörü >> I=inv(R)*V I = 2.0000 1.0000 -1.0000
©2011 – Yrd.Doç. Dr. Fahri VATANSEVER