MATLAB Tanıtım Notları

advertisement
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
2. HAFTA DERS KONULARI
AġAĞIDAKI KONULAR VERILECEKTIR
1- MAtlab programının çağrılması
2- Matlab hakkında tarihi bilgi ve genel özellikleri
3- Matlab ortamının tanıtımı
a. Help ortamının tanıtımı
b. Workspace
c. History
Genel grafik özellikleri (çok kısa)
M dosyaları
Değişkenler, vector, matrisler
Aritmetik işlemler
atama deyimleri
örnekler ve dersde ödevler
d.
e.
45678-
1
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
a.
10-16 Kasım 2002 A. Ü. Müh. Fak.
Matlab
Yrd. Doç. Dr. Ömer Gündoğdu
Yrd. Doç. Dr. İrfan Kaymaz
MATLAB, bilim adamları ve mühendislere, Fortran ve C gibi gelenekselleĢmiĢ dillerde
program yazmaksızın, matrislere dayalı problemleri çözmede kullanılmak üzere bir sayısal
hesaplama kütüphanesi sunmak amacıyla, MATris LABoratuvarı (MATrix LABoratory)
programı olarak tasarlanmıĢtır. Fakat daha sonra, Optimization Toolbox ve Control System
Toolbox gibi bazı toolbox‟lar eklenerek geliĢtirilmiĢtir.
MATLAB bir yorumlayıcıdır (interpreter); yani sonuç, daha ziyade el tipi hesap
makinelerine benzer tarzda ekranda yazılı bir metin olarak alınabilir. Neticede diğer dillerde
olduğu gibi “derleme”ye (compilation) ihtiyaç yoktur; fakat programlamaya izin vermesi
cihetiyle de güçlü bir paket programdır.
1. Temel Bilgiler
MATLAB hem yeni baĢlayanlara hem de uzmanlaĢmıĢ olanlara çok pratik bir yardım da
sağlamaktadır. Özel bir komut hakkında bilgi edinmek için ekrandan “help komut adı”
komutu girilir; burada “komut adı” ilgilendiğiniz MATLAB komutunu temsil eden kelimedir.
Kullanıcı, belirli bir konuda hangi komutları kullanabileceğini bilmek isterse “lookfor
kavram adı“ komutunu girmesi yeter. Mesela, “lookfor exponential“ yazılıp enter
tuĢuna basıldığında; MATLAB her biri için kısa açıklamalarıyla birlikte üs almaya iliĢkin tüm
komutları sıralar. ġayet ilave bilgi gerekliyse “help exp” komutunun girilmesi ilgili komuta
ait ayrıntılı bir yardımla neticelenir.
2. Hesap Makinesi Olarak MATLAB
Ekrana bir ifade yazılıp giriĢ (enter) tuĢuna basıldığında MATLAB bu komutu hemen
icra eder ve sonucu komut penceresinde basar. Eğer kullanıcı özel bir komutun sonucu olan
çıktıyı görmek istemiyorsa komut bittikten sonra basitçe bir “;” iĢareti, yani noktalı virgül
(semicolon) koymak yeterlidir. Açıklamalar yazılmak istendiğinde bunların her satırının önüne
% (yüzde) iĢareti konmalıdır. MATLAB‟taki temel aritmetik işlemler aĢağıda Tablo 1‟de artan
öncelik sırasına göre özetlenmiĢtir.
Tablo 1. MATLAB‟ta aritmetik iĢlemler.
İşlem
Sembol
Misal
Toplama, a+b
+
2+3
Çıkarma, a-b
-
5-2
Çarpma, a*b
*
3*4
Bölme, a/b
Üs alma, ab
/
^
14/7
2^3

© Ömer Gündoğdu, 2002, Yayın hakkı saklıdır, yazarın yazılı izni olmadan hiçbir Ģekilde basılıp çoğaltılamaz ve
iktibas yapılamaz.
2
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
MATLAB aynı zamanda pek çok hazır (built-in) matematik ve nümerik fonksiyonlara
sahiptir. Bu fonksiyonların bazıları Tablo 1.4‟te listelenmiĢtir.
Tablo 2. MATLAB‟taki hazır matematik fonksiyonlar.
Fonksiyon
Sembol Misal
sin
sin(pi)
Sinüs, sin()
cos
cos(pi)
Cosinüs, cos()
tan
tan(pi)
Tanjant, tan()
asin
asin(0)
Arksinüs, arcsin()
acos
acos(0)
Arkkosinüs, arccos()
atan
atan(1)
Arktanjant, arctan()
x
Eksponensiyal, e
exp
exp(2)
Tabii logaritme
log
log(10)
10 tabanlı logaritma
log10
log10(10)
sqrt
sqrt(25)
Kare kök, x
Mutlak değer, |x|
abs
abs(3)
3. Değişkenler
MATLAB, kullanıcıların değiĢkenlere değer atamasına müsaade etmektedir. Böyle bir
atama yapabilmek için eĢit iĢaretinin sol tarafına bir değiĢken ismi girilmelidir. AĢağıdaki
misaller değiĢkenlere değer ve ifadelerin nasıl atanacağını, keza MATLAB‟ın verdiği cevapları
göstermektedirler.
» a = 3 , b = 2 % Virgülle ayırmak kaydıyla bir satırda birden fazla atama yapılabilir.
a=
3
b=
2
»c=a+b
c=
5
»d=a^b
d=
9
Bir değiĢkenin değerini görmek için değiĢkenin adını girmek yeterlidir.
»d
d=
9
MATLAB‟ın  sayısı ve çok küçük sayıları için “pi” and “eps” gibi hazır değiĢkenleri vardır.
» pi
ans =
3.1416
» eps
ans =
2.2204e-016
3
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
4. Vektörler
MATLAB‟ta vektörleri üretmek için kullanılabilen bir dizi yöntem vardır. Bunların bir
kaçı burada sunulacaktır. Bir vektör oluĢturmanın yollarından biri bunun elemanlarını
(bileĢenlerini) bir köĢeli parantez içinde sıralamak ve bunu bir değiĢkene eĢitlemektir.
Elemanların bir virgülle ayrılması veya aralarında boĢluk bırakılması gerektiğini kaydedelim.
Mesela, A=[1 2 3] Ģeklindeki bir satır vektör aĢağıda verilen yollardan biriyle gösterilebilir.
» A = [1 2 3]
A=
1 2 3
» A = [1,2,3]
A=
1 2 3
Bir satır vektörün transpozunu almak onun elemanlarını sütun tarzında yazmaktır. Keza
sütun vektörün transpozu da onun elemanları satır tarzında yazılarak elde edilir. MATLAB‟ta
bir vektörün transpozunu almak için kesme (apostrof) iĢareti kullanılır. Mesela A vektörünün
transpozunu almak için aĢağıdaki gibi yapılır:
» A'
ans =
1
2
3
Keza bir sütun vektör elemanların arası noktalı virgülle ayrılarak yahut her elemandan
sonra giriĢ (enter veya return) tuĢuna basılarak da elde edilebilir. Mesela:
» B = [1;2;3]
% Noktalı virgül kullanılmıĢ
B=
1
2
3
» Return tuĢu kullanılmaktadır
» B = [1
2
3]
B=
1
2
3
Elemanları sabit bir artım kadar fark eden bir vektör oluĢturmak için iki nokta üstüste
yazım tarzı (Colon notation) da kullanılabilir. Bu notasyonun kullanımıyla elemanları belli bir
aralıkta yer alan bir vektörün temsili onun tüm elemanlarını açık açık yazmaktan daha kolaydır.
4
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
Mesela, bir A=[1 2 3 4 5 6] vektörü “elemanları 1‟den 6‟ya 1‟er artımla sıralanan bir küme”
olarak aĢağıdaki tarzda ifade edilebilir:
» A = 1:1:6
A=
1 2 3
% 1‟den 6‟ya 1‟er artımla baĢla!
4
5
6
Bu komutun genel biçimi X=Xmin:X:Xmax ile verilmektedir. Bu komut , X ile gösterilen
elemanları Xmin den baĢlayan ve X artımlarıyla Xmax ile biten bir vektörle aynı Ģeydir. Negatif
artımlar, yani azalımlara da müsaade olunmuĢtur:
» B = 8:-2:0
B=
8 6 4
2
0
Artım olarak “1” kullanılacaksa, artım değerinin verilmesi gerekmez ve bu durumda birer
birer artan sayılar üretilir.
» A = 1:6
% Bu halde 1 artımı atlanmıĢtır.
A=
1 2 3 4 5 6
MATLAB‟ta diğer faydalı bir komut “length” komutudur. Bu komutun cevabı ilgilenilen bir
vektörün uzunluğu (elemanlarının sayısı) olarak döner.
» a = 2:3:45; length(a)
ans =
15
Toplama ve çarpma gibi cebir kuralları MATLAB‟taki vektör iĢlemlerine tatbik
olunmaktadırlar; mamafih vektörler aynı boyutta olmalıdırlar. Vektörler üzerinde iĢlem yapan
diğer iki mühim fonksiyon nokta (skaler) ve vektörel çarpımlardır. a ve b iki vektör olmak üzere
bu iki iĢlem için genel form sırasıyla “dot(a,b)” ve “cross(a,b)”dir. Bir vektörün Ģiddeti “norm”
fonksiyonuyla hesaplanabilir.
» a = [1 2 3]; b = [0,1,-1];
» dot(a,b)
ans =
-1
» norm(a,2)
ans =
3.7417
5
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
5. Matrisler
Matrislere elemanları iki indisle tanımlanan iki boyutlu diziler olarak bakılabilir.
MATLAB‟ta bir matrisin elemanları, bir köĢeli parantez içinde her satırı noktalı virgüllerle
ayrılarak veya satır satır yazılarak girilebilir veya saklanabilir. Bir A matrisinin i ninci satır ve j
ninci sütunundaki eleman A(i,j) Ģeklinde gösterilir. Mesela 2x3 lük ( yani, 2 satır and 3 sütunlu)
1 2 3 
A   4 5 6


 7 8 9 
Ģeklindeki bir A matrisi MATLAB‟a aĢağıdaki gibi girilebilir:
» A = [1 2 3;4 5 6;7 8 9]
A=
1 2 3
4 5 6
7 8 9
» % Her satırdan sonra giriĢ tuĢuna basarak girmek de aynı ölçüde kolaydır.
» A = [1 2 3
456
7 8 9]
A=
1 2 3
4 5 6
7 8 9
» A(2,3)
% Ġkinci satır ve üçüncü sütundaki eleman.
ans =
6
» A(:,1) % A(:,1)deki ":" birinci sütundaki tüm elemanlar anlamına gelmektedir.
ans =
1
4
7
» A(2,:)
% Ġkinci satır
ans =
4 5 6
MATLAB‟ta matris üretmeye yarayan ve bir kısmı aĢağıda Tablo 1.5‟te listelenen bir
dizi hazır fonksiyon vardır.
Tablo 3. Matris oluĢturan bazı MATLAB hazır fonksiyonları.
Fonksiyon
Sembol Misal
Birim matris
eye
eye(m,n)
Birler matrisi
ones
ones(m,n)
Sıfırlar matrisi
zeros
zeros(m,n)
Tesadüfi sayılar matrisi
rand
rand(m,n)
6
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
MATLAB‟ta matris aritmetiği kolay ve sade bir iĢtir. Temel matris iĢlemlerinden bazıları
aĢağıda Tablo 1.6‟da sıralanmıĢtır.
Tablo 4. MATLAB‟ta temel matris iĢlemleri.
İşlem
Sembol
Misal
Toplama
+
A+B
Çıkarma
A-B
Çarpma
*
A*B
Eleman eleman çarpma
.*
A.*B
Sağdan bölme
/
A/B (=A*B-1)
Eleman eleman bölme
./
A./B (=A*B-1)
Soldan bölme
\
A\B (=A-1*B)
Transpozunu alma
‘
A’
Burada açıkça ifade edilmemekle beraber yapılan iĢlemin anlamlı olması için, iĢleme tabi
tutulan bütün niceliklerin uygun (tutarlı) boyutlarda olması gerekmektedir. Aksi halde hata
meydana gelecektir.
AĢağıda matris iĢlemlerine dair bazı misaller sunulmaktadır. A ve B
1 2 
0 2 
A

ve B  

3  2
1 3
Ģeklinde 2x2 lik matrisler olsun.
» A = [1 2;3 -2]; B = [0 2;1 3];
» A+B
% Matrislerin toplanması
ans =
1 4
4 1
» A*B % Matrislerin çarpımı
ans =
2 8
-2 0
» A.*B % eleman eleman çarpımın nasıl olduğuna dikkat edilsin!
ans =
0 4
3 -6
» A*B'
ans =
4 7
-4 -3
» A^2
% Bu bir matrisin karesini almaktır; yani A^2=A*A.
ans =
7 -2
-3 10
» A.^2
% Bu eleman eleman kare almaktır.
ans =
1 4
9 4
7
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
» A/B
% A/B=A*inv(B);inv(B) B‟nin ters matrisi demektir.
ans =
-0.5000 1.0000
-5.5000 3.0000
» B/A
% B/A=B*inv(A)
ans =
0.7500 -0.2500
1.3750 -0.1250
» A./B
% Bu eleman eleman bölmedir.
Warning: Divide by zero.
ans =
Inf 1.0000
3.0000 -0.6667
» A\B
%A\B=inv(A)*B
ans =
0.2500 1.2500
-0.1250 0.3750
MATLAB‟taki “eleman eleman ” iĢlemler bir çok öğrencinin zihninde karıĢıklığa yol
açmaktadır. Matrislerde eleman eleman iĢleme niçin ihtiyaç duyulduğunu göstermek üzere bir
parçacığın konumunun zamana göre değiĢimini belirleyen aĢağıdaki fonksiyonun oluĢturulmasını
göz önüne alalım:
x( t )  t 3  2t 2  3 .
Burada t saniye ve x metre cinsindendir. Bu süreç MATLAB‟ta aĢağıdaki gibi
gerçekleĢtirilebilir:
» t=linspace(0,10,50);
% “zaman” vektörünü üret
» x=t^3+2*t^2+3;
% Noktalar atlanmıĢ!
??? Error using ==> ^
Matrix must be square.
» x=t.^3+2*t.^2+3; % Eleman eleman iĢlem için noktalar kullanılmıĢ.
Ġlkin 0 -10 saniye aralığında eĢit aralıklarla yer alan 50 adet zaman noktasını eleman
kabul eden bir zaman vektörü üretilir. Bilahare bu zaman değerleri vektörü yukarıdaki formül
vasıtasıyla konum vektörünü oluĢturmakta kullanılır. ġayet “t^3” ve “t^2” ibareleri girilirse,
MATLAB‟ın komut penceresinde “matrix must be square” (matris kare matris olmalıdır)
Ģeklinde hata mesajı görülür; çünkü, mesela “t^2 = t*t” anlamına gelmekte olup gerçekte 1x50
bir matris 1x50 matrisle çarpılmak istenmektedir ki, bu tanımsızdır. Bunun yerine “t.^2” veya
“t.*t” yazmak eleman eleman iĢleme sevkedecek ve problem doğru tanımlanmıĢ olacaktır.
MATLAB‟ta bir matrisin determinantını hesaplama, tersini bulma gibi özel matris iĢlemlerine
mahsus ve Tablo 5‟de kısmen verilen hazır fonksiyonlar da vardır
Tablo 5. MATLAB‟taki Matris Fonksiyonları
Fonksiyon
Sembol Misal
Bir matrisin determinantı
det
det(A)
Bir matrisin tersi
inv
inv(A)
Bir matrisin özdeğerleri ve özvektörleri
eig
eig(A)
[v,d]=eig(A)
8
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
6. MATLAB’ta Grafik Çizme
MATLAB iki ve üç boyutlu verileri istenen formatta göstermeye yarayan bir dizi
fonksiyon ihtiva etmektedir. MATLAB‟ın fonksiyon çizimlerine mahsus zengin koleksiyonu,
kullanıcılara bilimsel ve mühendislik uygulamalara ait çizimleri kolayca ve etkin biçimde çime
imkanı sağlamaktadır. MATLAB‟ta bu amaçla yer alan komutların kısa açıklamaları için Tablo
6‟e bakılabilir.
Tablo 6. MATLAB‟taki çizim fonksiyonları
Fonksiyon Açıklaması
Misal
plot
Ġki boyutlu doğru ve sembollerle çizim için
plot(xdata,ydata)
temel komut
polar
Kutupsal (polar) koordinatlardaki çizimler
polar(theta,rho)
plot3
Üç boyutlu (3-D) çizimler
plot3(x,y,z)
title
Grafiğin üstüne adını yazmak için
title(„my plot‟)
xlabel
x eksenine ait etiket
xlabel(„xdata‟)
ylabel
y eksenine ait etiket
ylabel(„ydata‟)
grid
Grafiği doğru ağlarıyla örer.
grid
subplot
Grafik penceresini bölmelere ayırır.
subplot(mnk)
mxn Ģekil, k aktif olandır
text
Grafikte istenen yere bir metin yerleĢtirir.
text(x,y,‟a plot‟)
x and y associated to plot scale
gtext
ginput
Grafikte istenen noktaya bir metin yerleĢtirir.
Ekran üzerinde istenilen koordinatlardaki
noktaları belirtmede kullanılır
gtext(„my plot‟)
ginput
X ve y eksenlerini dıĢarıdan müdahaleyle
axis([xmin,xmax,ymin,ymax])
ölçeklendirir
legend
Birkaç grafik birden çizildiğinde farklı
legend(„name1‟,name2‟)
grafikleri etiketler
hold
Mevcut çizimi alıkor.
hold / hold on / hold off
Bu komutlar ancak misaller vasıtasıyla en iyi tarzda anlaĢılacağından temel çizim
özelliklerini göstermek için çeĢitli haller aĢağıda sunulmaktadır. Okuyucunun çizim ve
etiketleme fonksiyonlarına aĢinalık kazanması için hem komutlar hem de bunlara karĢılık yapılan
iĢler verilmiĢtir.
» t=0:0.01:2*pi;
» x=sin(t);y=cos(t);
» plot(t,x)
% t ye göre x i çizer
» grid
% Taksimat çizgilerini yerleĢtirir
» xlabel('t')
% Yatay eksene “t” etiketini koyar
» hold
% Çizimi alıkor; yani yeni çizim mevcutun üzerine yapılır
Current plot held
» plot(t,y)
% t ye göre y yi çizer
» ylabel('x and y')
% DüĢet eksene “x ve y” yazar
» title('Sine and Cosine Curves')
% Grafiğe bir ad basar
axis
9
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
Sine and Cosine Curves
1
0.8
0.6
0.4
x and y
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0
1
2
3
4
5
6
7
t
ġekil 1. Sinüs ve kosinüs eğrilerinin grafikleri
Birbiri üzerine farklı eğriler çizmenin karıĢıklığa yol açması mümkündür. Aynı Ģekilde
yer alan farklı çizimleri ayırt edebilmenin basit bir yolu her eğri için farklı renkler veya farklı
veri noktası sembolleri kullanmaktır. Diğer bir çare kesikli çizgi gibi farklı çizgi tipleri
kullanmaktır. Keza bu imkanlar da aĢağıdaki tabloda özetlenmiĢtir (Tablo 7).
Tablo 7. Çizimde farklı renk ve çizgi alternatifleri.
Renk ve çizgi tiplerinin kullanılması çizimlerin farklı görünmesine ve birbirlerinden ayırt
edilmesine yardımcı olacaktır. ġimdi aynı çizimleri tamamen yeni bir tarzda elde edelim:
» plot(t,x,'b',t,y,'k:') % Bir komutla aynı Ģekil üzerinde mavi sürekli çizgiyle x in t ye
% göre ve yine siyah kesikli çizgiyle y nin t ye göre değiĢiminin çizdirilmesi
10
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
» grid
» xlabel('t')
» ylabel('x and y')
» title('Sine and Cosine Curves')
» legend('Sine','Cosine')
Sine and Cosine Curves
1
0.8
0.6
Sine
Cosine
0.4
x and y
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0
1
2
3
4
5
6
7
t
ġekil 2. Farklı çizgi tipleriyle sinüs ve kosinüs eğrilerinin bir arada çizimi
7. Düz Yazı dosyaları (Script files)
Bir senaryo dosyası (script file) özel bir görevi ifa için gerekli MATLAB komutlarının
saklandığı bir metin programıdır. BaĢka bir ifadeyle bir komutlar dizisi bir dosyada saklanır ve
daha sonra bunları komut penceresinden tek tek girmek yerine bu dosya çalıĢtırılarak bu
komutlar icra edilir. Bu dosyaların MATLAB‟ın çalıĢtığı birimde (directory) .m uzantısıyla
saklanmaları gerekir. MATLAB senaryo dosyalarının oluĢturulması ve yazılması için bir metin
hazırlayıcısı (text editor) sunmaktadır. Bu senaryo dosyaları Windows‟da Notepad veya Unix‟de
vi-editor gibi herhangi bir metin hazırlayıcısında da yazılabilirler. MATLAB metin hazırlayıcısı
ya komut penceresinin üst kısmında yer alan “New M-file” düğmesi tıklanarak veya kısaca
“File” menüsünden “New/M-file” ibaresini seçerek etkin hale getirilebilir.
Misal olarak ArĢimet spiralinin çizmek üzere küçük bir dosya oluĢturulmuĢ ve
“Archimedes.m” adıyla saklanmıĢtır. Bu dosya aĢağıda verilmektedir.
% Bu, Arşimet spirlini çizen bir M-dosyasıdır (m-file’dır)
% (Rho=c*theta burada c>0) [0,2*pi] aralığında
% c=1 kabul edelim
theta=linspace(0,2*pi,100);
% [0,2*pi]aralığında 100 nokta üretir
c=1;
Rho=c*theta;
polar(theta,Rho,'k')
11
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
Bu M-dosyasının adı komut penceresinde uzantısız biçimde yazılır (yani: >> Archimedes) ve
enter tuĢuna basılırsa aĢağıdaki grafik elde olunur:
90
8
120
60
6
4
150
30
2
180
0
210
330
240
300
270
ġekil 3. Polar koordinatlarda ArĢimet spirali.
8. Fonksiyonlar (Functions)
Kullanıcılar kendi fonksiyonlarını yazmak için M-dosyalarından yararlanmak da
isteyebilirler. Aslında, MATLAB fonksiyonları Mathworks tarafından yazılmıĢ bir takım senaryo
dosyalarıdır. Senaryo dosyalarıyla (script files) fonksiyonları (functions) tanımlayan M-dosyaları
arasındaki farklardan biri fonksiyon dosyalarının baĢlangıçlarında “function” ibaresini ihtiva
etmeleridir. Bu ibare, mesela giriĢ ve çıkıĢ parametrelerinin ne olacağı gibi, fonksiyonun
formatını tanımlamaktadır. Dolayısıyla biri giriĢ (input), diğeri çıkıĢ (output) olmak üzere iki
parametre listesine sahiptirler.Bir fonksiyon dosyası daha ilk satırında aĢağıdaki biçimde bir
ifade ihtiva etmelidir:
“function [çıkış parametreleri listesi]= fonksiyon-adı(giriş parametreleri
listesi)”
Buradaki fonksion-adı M-dosyasına verilen isimle aynı olmalıdır. Mesela “rad2deg” adında bir
fonksiyon oluĢturulmuĢsa M-dosyasının adı “rad2deg.m” olmalıdır. GiriĢ ve çıkıĢ
parametreleri skalerler, vektörler ve/veya çok indisli diziler olabilir. Fonksiyon dosyalarında
kullanılan değiĢkenler senaryo dosyalarda kullanılan global değiĢkenlerin aksine lokal
niteliktedirler. Mamafih bu dahili fonksiyon değiĢkenleri global olarak tanımlanabilirler.
Fonksiyonlardaki ilave bir kısıtlama da açıklama satırlarının “function” sözcüğüyle baĢlayan
birinci satırdan sonra önlerine birer % iĢareti konarak yazılmak zorunda olmasıdır. Misal olarak
aĢağıda verilen program radyan cinsinden verilen bir açıyı dereceye çeviren bir fonksiyonu teĢkil
etmektedir. Bu M-dosyası is “rad2deg.m” olarak saklanmaktadır.
function [deg]=rad2deg(rad)
% rad2deg(rad) radyan cinsinden verilen bir açıyı dereceye çevirir.
rad*180/pi
12
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
Mesela /2 radyanlık bir açı dereceye çevrilmek istenirse komut
rad2deg(pi/2) yazılarak girilir. Neticede sonuç aĢağıdaki gibi olacaktır:
» rad2deg(pi/2)
ans =
90
penceresinde
9. MATLAB ile Programlama
MATLAB, FORTRAN and C gibi diğer programlama dillerindekine benzer bazı temel
programlama yapıları sunmaktadır. Bu yapılar kullanıcıların, iliĢki ve mantık iĢlemcileriyle
birlikte döngüler ve Ģart ifadeleri oluĢturmasına izin verir ki, bunların
mühendislik
hesaplamalarında geniĢ uygulama alanı vardır. MATLAB‟ın sağladığı tekrarlı ve Ģartlı kontrol
yapılarına kısa bir bakıĢ aĢağıda verilmiĢtir:
For Döngüleri (For-loops)
Bir ifadeyi mükerreren icra etme yollarından biri MATLAB‟ın sağladığı for-döngüsü
yapısını kullanmaktır. Bunun sentaksı
for döngü_değişkeni=döngü_ifadesi
deyimler
end
olarak verilmektedir. Burada “döngü_değişkeni” bir değiĢkene verilen uygun bir addır ve
“döngü_ifadesi” genel olarak kullanılacak indis değiĢkenine iĢaret eder. (mesela sayaç
baĢlangıç değeri, artım ve ulĢıldıktan sonra “for döngüsü”nden çıkılacak olan sayaç(indis=index)
değeri, i=başlangıç değeri:artım:bitiş değeri gibi). Bu yapıya , 1 den n ye
kadar tam sayıların toplamını hesaplayan (sum1.m) adlı aĢağıdaki program misal verilebilir:
function [sum]=sum1(n)
% 1 den verilen bir n ye kadar tamsayıların toplamını
%hesaplayan (sum1.m) programı
sum=0;
for i=1:n
% 1 en n ye 1 er artımla değişen i indisi
% üzerinde for döngüsü
sum=sum+i;
end
1 den 15 e kadar tamsayıların toplamı bu takdirde komut penceresinde sum1(15) ifadesi girilerek
aĢağıdaki gibi elde edilebilir:
» sum1(15)
ans =
120
Tekrarlı deyimleri elde etmenin bir baĢka yolu “while” deyimini kullanmaktır. Bu
durumda önceden verilen bir Ģart sağlanmadığı sürece bir iterasyon süreci devam eder. while
cümlesi
while şart
deyimler
13
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
end
Ģeklinde bir yapıya sahiptir. Mesela, yukarıdaki (sum1.m) fonksiyonunu while deyimiyle yeniden
yazmak mümkündür:
function [sum]=sum2(n)
% 1 den verilen bir n ye kadar tamsayıların toplamını
% hesaplamaya mahsus(sum2.m) programı
sum=0; i=0;
while i <= n
sum=sum+i;
i=i+1;
end
Bu program komut penceresinde aynı tarzda icra edildiğinde aynı sonuç elde olunur.
» sum1(15)-sum2(15)
ans =
0
Şart Deyimleri
Bütün programlama dillerinin en hayati özelliklerinden biri deyimlerin muayyen Ģartlara
tabi tutularak icra edildikleri dallanmalardır. MATLAB aĢağıdaki genel Ģekilleri haiz “if
deyimleri”ni kullanmaktadır:
If şart
deyimler
end
veya alternatif olarak
if şart
deyimler
else
deyimler
end
veya ikinci bir alternatif de
if şart
deyimler
elseif şart
deyimler
end
AĢağıdaki misal, a, b, ve c sabitleri verilmiĢ olmak kaydıyla
ax 2  bx  c  0
Ģeklinde bir ikinci derece denklemini köklerini bulmak için Ģart deyimleriyle kurulmuĢ bir
programdır:
14
Net Akademi Kulübü Ücretsiz MATLAB Kursu- Ders Notları
10-16 Kasım 2002 A. Ü. Müh. Fak.
function [kokler]=quadrt(a,b,c);
% a, b, ve c sabitleri verildiğinde a^2+bx+c=0 denkleminin köklerini
% bulan program
d=b^2-4*a*c;
if d==0
kokler=-b/(2*a);
disp('katlı kok:')
disp(kokler)
elseif d>0
kokler=[-b-sqrt(d),-b+sqrt(d)]./(2*a);
disp('iki farklı kok:')
disp(kokler)
else
kokler=[-b-i*sqrt(abs(d)),-b+i*sqrt(abs(d))]./(2*a);
disp('iki kompleks kok:')
disp(kokler)
end
Bu program kökleri bulur ve komut penceresinde basar.
Genel olarak programlarda iç içe döngüler ve Ģart deyimleri kullanmak mümkündür.
15
Download