MATLAB nedir? Ne işe yarar? MATLAB ile çalışmak (Değişkenler ve diziler). MATLAB ile yazılım geliştirmek (Prosedürler ve Fonksiyonlar). Temel Matematiksel Operatörler,Karşılaştırma Operatörleri, Mantıksal Operatörler, Şartlı Deyimler ve Döngüler, Verileri Kaydetmek ve Tekrar Kullanmak, Grafikler, Bazı Temel Fonksiyonlar ve Komutlar.
MATLAB İle
Programlamaya Giriş
MATLAB nedir? Ne işe yarar?
MATLAB, teknik hesaplamalar ve matematiksel problemlerin çözümü ve
analizi için tasarlanmış bir yazılım geliştirme aracıdır. “MATrix LABoratoty” kelimesinin
kısaltması olan MATLAB, adında da anlaşılacağı üzere matrisler (matrix) yani
diğer bir deyişle diziler (array) ile çalışır. Özellikle mühendislik alanındaki
sistemlerin analizinde kullanılan MATLAB, görüntü işleme (image processing),
yapay sinir ağları (artificial neural networks), sayısal işaret işleme (signal
processing), optimizasyon (optimization), veri elde etme (data acquisation),
veritabanı (database), süzgeç tasarımı (fitler design), bulanık mantık (fuzzy
logic), sistem kimliklendirme (system identification), dalgacıklar (wavelets)
gibi araçları ile sizler için mükemmel bir ortam sunar.
MATLAB’in
nasıl bir yazılım olduğunu anlamak için onu çok gelişmiş özellikleri olan,
programlanabilen bir bilimsel hesap makinesine benzetebiliriz. MATLAB’de
yazılan programlar, MATLAB’in kendine özgü dili kullanılarak yazılır ve MATLAB
içinden çalıştırılır. Ayrıca yazdığınız programları DLL ve EXE olarak oluşturabildiğiniz
gibi C/C++ kodlarına da çevirebilirsiniz.
Problemlerinizi MATLAB’de komut satırında çalışan
programlar yazarak çözebildiğiniz gibi MATLAB GUI geliştirme aracını kullanarak,
formlar ve butonlar gibi nesnelerden oluşan görsel yazılımlar geliştirebilirsiniz.
MATLAB’in şu an için Windows ve Linux ortamlarında çalışan
versiyonları mevcuttur. Bugün için geliştirilen en son sürüm Realease 13
- Version 6.5 dir. (Ağustos 2003)
MATLAB ile ;
- Veri elde etme
- Veri analizi ve inceleme
- Görsellik ve görüntü işleme
- Algoritma prototipi oluşturma ve geliştirme
- Modelleme ve simülasyon
- Programlama ve uygulama geliştirme yapabiliriz.
Bugün 500.000 den fazla akademisyen, araştırmacı,
bilim adamı ve öğrenci tarafından kullanılan MATLAB, içinde gömülü pek çok
ara yüzü ile bilgisayar dünyasının en gelişmiş teknik ve bilimsel problem çözme
ve uygulama geliştirme aracıdır.
Daha fazla bilgi için http://www.mathworks.com adresine bakabilirsiniz.
MATLAB ile çalışmak
MATLAB ortamında tüm veriler matrisler şeklinde
tanımlanmıştır. a=3.4 yazıp <enter> tuşuna bastığımızda, bellekte
1x1 tipinde gerçek sayı veri tipinde bir değişken tanımlamış oluruz.
Dizi oluşturmak için kullanışlı bir operatör
olan :’yı kullanabilirsiniz. Örneğin, MATLAB konsolunda, b=1:10 yazıp <enter> tuşuna
bastığımızda 1x10 tipinde, elemanları 1’den başlayıp, birer artarak 10’a
kadar olan bir dizi oluşturmuş ve bunu b değişkenine atamış olursunuz.
Artırma miktarını da kendiniz ayarlamanız mümkün. Örneğin c=0:0.1:10 yazıp <enter> tuşuna
bastığımızda 0’dan başlayıp, 0.1 değerlerle artan ve 100’e kadar devam eden
1x101 tipinde bir vektör (tek bir satırdan veya sütundan oluşan matris) tanımlamış oluruz.
Dizileri adreslemek yani dizinin içindeki bir
veriye erişmek için indisler kullanırız. Örneğin c(3) yazıp <enter> tuşuna
bastığımızda c dizisinin 3. elemanına ulaşırız.
İki boyutlu dizi tanımlama için : operatörünün
yanında, satır operatörü olan ;’i kullanabiliriz. ; operatörü,
sütunun bittiğini ve yeni bir satıra geçileceğini bildirir. Örneğin, d=[1:3;4:6;7:9] yazıp <enter> tuşuna
bastığımızda 3x3 tipinde bir matris oluşturmuş oluruz.
>> d=[1:3;4:6;7:9]
d =
1 2 3
4 5 6
7 8 9
>>
İki boyutlu dizileri adreslemek için değişken_ismi(satır,sütun) şeklinde
indisleri belirtiriz. Örneğin yukarıda tanımladığımız d dizisi için d(2,3) komutu
6 değerini verecektir. MATLAB’de dizilerin satır ve sütun indisleri 1’den
başlar. Diğer bazı programlama dillerinde matris indisleri 0’dan başlar.
MATLAB’de uygulama geliştirirken buna dikkat etmek gerekir.
Dizilerin tek bir elemanına değil de belirli
bir kısmına erişmek için : operatöründen faydalanılır. Örneğin e=rand(5) yazıp <enter> tuşuna
bastığımızda, 5x5 tipinde, değerleri 0 ve 1 arasında değişen, rasgele değerlere
sahip bir dizi tanımlamış oluruz.
>> e=rand(5)
e =
0.2028 0.0153 0.4186 0.8381 0.5028
0.1987 0.7468 0.8462 0.0196 0.7095
0.6038 0.4451 0.5252 0.6813 0.4289
0.2722 0.9318 0.2026 0.3795 0.3046
0.1988 0.4660 0.6721 0.8318 0.1897
>>
Bu 5x5’lik dizinin ortada kalan 3x3’lük kesimine
ulaşmak için e(2:4,2:4) yazıp <enter> tuşuna basarsak şu şekilde
bir çıktı elde ederiz.
>> e(2:4,2:4)
ans =
0.7468 0.8462 0.0196
0.4451 0.5252 0.6813
0.9318 0.2026 0.3795
>>
Veya e(1,1:4) komutu, e dizisinin 1. satırının
ilk dört elemanını verecektir. Ya da e(3:5,2) komutu, e dizisinin
2. sütunun son üç elemanını verecektir.
Dizinin belirli bir satırının veya sütununun
tümüne erişmek için : operatöründen faydalanılır. Örneğin e(1,:) komutu,
e dizisinin 1.satırını verecektir. Veya e(:,3) komutu, e dizisinin
3. sütununu verecektir.
Dizi adresleme, belirtilen indis(ler)deki değerlere
ulaşmak veya onları değiştirmek için kullanılır.
MxN tipinde bir matrisi vektör haline çevirmek
için degisken_ismi(:) komutu kullanılabilir. Yeni oluşan matris M*Nx1
tipindedir.
Lineer cebir’de satırların sütun haline çevrilme
işlemine “matrisin transpoze”si denir. MATLAB’de bir dizinin transpozesini
bulmak için ‘ operatöründen faydalanılır. Örneğin d=[1:3;4:6;7:9] şeklinde
tanımlanan d dizinsinin transpozesi d’ komutu ile elde edilir.
>> d=[1:3;4:6;7:9]
d =
1 2 3
4 5 6
7 8 9
>> d'
ans =
1 4 7
2 5 8
3 6 9
>> d(:)
ans =
1
4
7
2
5
8
3
6
9
>> d(:)'
ans =
1 4 7 2 5 8 3 6 9
>>
Üç boyutlu dizileri indislemek için degisken_ismi(x,y,z) komutu
kullanılabilir.
MATLAB ile yazılım geliştirmek
MATLAB’de geliştirdiğimiz yazılımlar yordam (procedure)
veya fonksiyon (function) şeklindedir. Konsolda edit yazıp <enter> tuşuna
bastığımızda MATLAB editörü açılacaktır.
Prosedürler
Düz yazı şeklinde yazılan komutlardır. Arka arkaya çalıştırmak
istenilen komutlar yazılır. File->Save (Ctrl+S) komutu ile yazdığımız
programı diske kaydetebiliriz. MATLAB’de yordamlar ve fonksiyonlar M-dosyaları (M-files)
olarak adlandırılır ve .m uzantısını alır.
Örneğin aşağıdaki komutlar editörde yazılıp hesapla.m ismi
ile diske kaydedilirse, MATLAB içinden bu dosyayı çalıştırmak için hesapla yazıp <enter> tuşuna
basmak yeterli olacaktır.
hesapla.m
ort=sum(sum(a));
hiz=x/t;
sonuc=ort*hiz;
Yalnız burada dikkat edilmesi gereken nokta,
MATLAB içinden bu dosya çalıştırılmak istendiğinde, dosyanın çalışma dizininde
(work directory) olması gerekir. Çalışma dizinini görüntülemek için cd komutu
kullanılır.
>> cd
C:\matlabR12\work
>>
Çalışma dizinini değiştirmek için de cd komutundan
faydalanılır. Örneğin;
>> cd c:\calismadizinim
Ayrıca dikkat edilmesi gereken bir diğer nokta
da, M-dosyası çalışırken bazı değişkenlere başvuruyorsa bunların daha önceden
tanımlanmış ve değerleri atanmış olması gerekir. Yukarıdaki örnekte ort=sum(sum(a)) satırında
a isminde bir matrisisin toplamı hesaplanıp ort değişkenine atanmaktadır.
Ancak program çalıştırılmak istendiğinde eğer a dizisi yoksa, M-dosyası hata
verecektir. Yukarıdaki M-dosyası çalışabilmek için, x ve t değişkenlerine
de ihtiyaç duymaktadır.
M-dosyası çalıştırıldıktan sonra, M-dosyası içinde
tanımlanan değişkenler MATLAB çalışma ortamında (workspace) kullanılmaya
başlanır.
O an için tanımlanmış değişkenleri görmek için whos komutu
kullanılabilir. Her hangi bir değişkeni silmek için clear degisken_ismi şeklinde clear komutu
kullanılır. MATLAB ortamındaki tüm değişkenleri silmek için clear komutu
tek başına kullanılabilir.
>> hesapla
>> whos
Name Size Bytes Class
a 5x5 200 double
array
ans 0x0 0 char
array
b 1x1 8 double
array
c 1x101 808 double
array
d 3x3 72 double
array
e 5x5 200 double
array
hiz 1x1 8 double
array
ort 1x1 8 double
array
sonuc 1x1 8 double
array
t 1x1 8 double
array
x 1x1 8 double
array
Grand total is 166 elements using 1328
bytes
>>
Fonksiyonlar
Diğer programlama dillerinde olduğu gibi MATLAB’de
de fonksiyon tanımlamak mümkündür. Fonksiyonlar içine değer alabilen ve bir
sonuç döndüren program parçalarıdır.
Örneğin MATLAB editöründe,
function donendeger=toplakare(x,y)
%Bu fonksiyon x ve y nin toplaminin
karesini hesaplar
%Kullanim : toplakare(3,5) seklindedir.
toplam=x+y;
donendeger=toplam^2;
şeklinde bir fonksiyon yazıp, toplakare.m dosyası şeklinde
kaydetelim. Fonksiyondaki ilk satır, fonksiyonun isminin toplakare olduğunu, donendeger değişkeni
ile sonucun kullanıcıya aktarılacağı, x ve y olarak iki değişkeni dışardan
aldığını belirtir. İkinci ve üçüncü satırlar yorum satırlarıdır. Derleyici
tarafından icra edilmezler. Fonksiyonlarda ilk satırdan sonra kullanılan
yorum satırları, yazılan m-dosyasının yardım metnini oluşturur. Konsolda help
toplakare yazıp <enter> tuşuna basarsak, yukarda % işareti ile
başlayan iki satır görüntülenecektir. En son satırda donendeger değişkenine
hesaplanan ifade atanır ve bu şekilde kullanıcıya sonuç yollanmış olur.
MATLAB’de a=toplakare(3,5) yazarak, a
değişkenine fonksiyondan dönen 64 değerini atamış oluruz.
Temel Matematiksel Operatörler
MATLAB’da diziler arası matematiksel operatörler
aşağıdaki gibidir. Ancak dikkat edilmesi gereken bazı noktalar vardır. Örneğin
iki matris toplanacağı zaman, matrislerin aynı boyutlarda olması gerektiğidir.
3x3 tipindeki bir matris ile 2x2 tipindeki bir matris toplanamaz. Ancak 1x1
tipindeki skaler değerlerde bu problem yoktur. Örneğin 5x5 tipindeki bir
matrisin tüm elemanlarına 2 eklemek için a+2 şeklinde bir komut kullanılabilir.
|
Toplama
|
a+b
|
|
Çıkarma
|
a-b
|
|
Çarpma
|
a*b
|
|
Bölme
|
a/b
|
|
Üs alma
|
a^b
|
Karşılaştırma Operatörleri
|
<
|
Küçük
|
|
<=
|
Küçük eşit
|
|
>
|
Büyük
|
|
>=
|
Büyük eşit
|
|
==
|
Eşit
|
|
~=
|
Eşit değil
|
Mantıksal Operatörler
|
And
|
&
|
Ve
|
|
Or
|
|
|
Veya
|
|
Not
|
~
|
Değil
|
Şartlı Deyimler ve Döngüler
Program içinde bir değişkenin içeriğine bağlı olarak
program akışı değiştirilmek isteniyorsa şartlı deyimler kullanılabilir. En çok
kullanılan şartlı deyim if-else-end komutudur. Örneğin;
if a>5
disp('a besten büyüktür');
x=1;
else
disp('a besten kücüktür');
x=0;
end
şeklinde bir M-dosyası olsun. Eğer a değişkenin
değeri 5 den büyükse, konsola 'a besten büyüktür' ifadesi yazdırılacak ve
x değişkenine 1 değeri atanacaktır. Eğer a, 5’ten küçük veya eşitse konsola 'a besten kücüktür' ifadesi
yazdırılacak ve x değişkenine 0 değeri atanacaktır.
En çok kullanılan bir döngü çeşidi olan for döngüsü aşağıdaki
gibi tanımlanır.
top=0;
for i=1:100
top=top+i;
end
1’den 100’e kadar olan sayıların toplamını bulan
bu döngüde i döngü indeksidir. 1:100 ifadesi ile 1’den başlayıp 100’e kadar,
döngünün birer artması sağlanmıştır.
Bir diğer döngü tanımlaması while komutu
ile yapılabilir. Yukarıdaki örneği while komutu ile şu şekilde yapabiliriz.
top=0;
i=0;
while i<100
top=top+i;
i=i+1;
end
Verileri Kaydetmek ve Tekrar Kullanmak
MATLAB’de oluşturduğunuz matrisleri kaydetmek
için save komutu kullanılır. save calisma yazıp <enter> tuşuna
basarsanız, o an için çalışma ortamında tanımlı tüm matrisler MATLAB’in kendine özel
bir formatında, diske calisma.mat olarak kaydedilir. Daha sonra bu
dosyayı tekrar çağırmak için load calisma yazmak yeterli olacaktir.
Sadece bir matrisi kaydetmek için save dosya_ismi degisken_ismi şeklinde
bir komut kullanmak uygun olacaktır.
Eğer kaydedilen verilere harici programlardan
erişilecekse ASCII formatında ve diziler arasına TAB atılarak kaydetme yapılabilir.
Bunun için save calisma.txt xToplam –ascii –tabs komutu kullanılabilir. xToplam ismindeki
matris, diske calisma.txt dosyası olarak kaydedilmiştir. Ancak MATLAB,
bu dosyayı kendi formatında değil, düz yazı (TEXT) biçiminde kaydeder. Matrisin
elemanları arasına TAB karakteri basarak Excel gibi diğer programlardan erişimi
kolaylaştırır.
Grafikler
MATLAB’de veriler ile çalışırken bu verileri
görüntülemeniz gerekebilir. Analizde çok önemli olan grafiklerin oluşturulması için plot komutu
ve surf komutu kullanılabilir.
Plot komutu
ile 1xN tipindeki vektör biçimindeki bir veya daha fazla veri için grafik
oluşturulabilir.
Örneğin;
>> t=-pi:0.1:pi;
>> y=sin(t);
>> plot(y)
komutlarını yazarak -3.14 den +3.14’e kadar 0.1
aralıklarla artan bir vektör tanımlayalım. Sin fonksiyonu ile bu vektörün
tüm değerlerinin sinüslerini hesaplayarak plot komutu ile ekrana çizdirelim.
(pi ön tanımlı bir değişken olup değerini atamanıza gerek yoktur)
İki
vektörü aynı pencere içinde üst üste görüntülemek istersek 1xN vektörleri
Nx1 tipine çevirmek ve bunları yan yana sütün şeklinde yerleştirmek gerekir. Örneğin
yukardaki örnekte t ve y’yi aynı anda görmek için plot([t' y']) komutu
kullanılmalıdır.
Plot komutu ile ilgili daha fazla bilgi elde
etmek için MATLAB konsolda help plot yazabilirsiniz.
MATLAB’de
MxN tipindeki matrislerin 3 boyutlu topografik grafiklerini incelemek için surf veya mesh komutları kullanılır.
>> a=randn(20);
>> surf(a);
Yukarıdaki komutlar ile 20x20 tipinde, elemanları 0-1
arasında rasgele değer alan bir verinin 3boyutlu grafiği çizdirilmiştir.
Bazı Temel Fonksiyonlar ve Komutlar
MATLAB’de kullanılan bazı temel fonksiyonlar
ve açıklamaları verilmiştir.
|
Clear
|
Workspace’deki değişkenleri siler
|
|
Whos
|
Workspace’deki değişkenleri listeler
|
|
Clc
|
Ekranı temizler
|
|
Disp
|
Ekrana mesaj yazdırır
|
|
Sum
|
Matris elemanları toplamı
|
|
Mean
|
Matris elemanları ortalaması
|
|
Max
|
Matris elemanlarının en büyük değerli olanı
|
|
Min
|
Matris elemanlarının en küçük değerli olanı
|
|
Size
|
Matrisin boyutları
|
|
Sqrt
|
Karekök alma
|
|
Cos
|
Kosinüs Fonksiyonu
|
|
Sin
|
Sinüs Fonksiyonu
|
|
Tan
|
Tanjant Fonksiyonu
|
|
Exp
|
Eksponansiyel (e)
|
|
Log
|
Doğal algoritma (ln)
|
|
Log10
|
10 tabanında logaritma
|
|
Abs
|
Mutlak değer
|
|
Round
|
Yuvarlama
|
|
Floor
|
Tam değer
|
|
Load
|
Workspace’e diskten veri yükleme
|
|
Save
|
Workspace’deki veriyi diske kaydetme
|
|
Strcat
|
String’leri birleştirme
|
|
Break
|
Döngüden çıkma
|
|
Rand
|
0-1 arasında rasgele sayı üretme
|
|
Edit
|
MATLAB Editörü
|
|
Plot
|
2boyutlu grafik çizme
|
Sonuç
Yukarda anlatılan bilgiler ışığında, MATLAB ile
neler yapabileceğiniz konusunda bir miktar fikriniz oldu. Temel matris işlemlerini
ve MATLAB dilinin sözdizimini de öğrenmiş oldunuz. MATLAB’in içindeki pek çok
yazılım aracı ile (toolbox) özel uygulamalarınız için hazır yazılmış onlarca
fonksiyon bulabilirsiniz. Ayrıca pek çok mühendislik problemlerinin çözümünde
MATLAB’in avantajlarını kullanabilirsiniz.
Rifat Kurban, Tuba Çağlıkantar
08.08.2003, Kayseri.
Kaynaklar
[1] MATLAB ile Mühendislik Sistemlerinin
Analizi ve Çözümü, İbrahim Yüksel, Vipaş, Bursa 2000.
[2] http://www.mathworks.com