Professional Documents
Culture Documents
Su ana kadar Matlab ile gerçeklestirdigimiz uygulamalarda ,belirli bir islemi gerçeklestirmek
üzere gerekli olan Matlab komut ya da fonksiyonlarini Matlab komut satirindan,>>
sembollerinden sonra tek tek girerek icra ediyorduk.
Bir Matlab deyimleri ya da komutlari grubunu içeren bu tip bir dosyaya Matlab’de M-
dosyasi(M-file) adi verilir.Bu tip dosyalariin uzantisi daima .m seklinde olmalidir.Bir Matlab
M dosyasi,bir komut grubu içerdigi için tanim itibari ile bir program dosyasidir.Dolayisi ile
,Matlab’de,M-dosyalari olusturularak programlama yapilabilir.
3)Programi çalistirmak için ya komut satirindan ismi girilerek enter’a basilir veya asagidaki
gibi Debug/Run menüsü kullanilir:
IF DEYIMI
if ifade
deyim1;
end
deyim2;
Burada ifadenin degeri dogru(true) ise deyim1 icra edilir sonra icra deyim2’ye
geçer.Ifadenin degeri yanlis(false) ise bu durumda da dogrudan deyim2’ye
geçilir.Ifadenin degeri yanlis ise deyim1 icra edilmeyecektir.Asagida if yapisini açiklayan bir
akis diyagrami verilmistir.
If deyimi else sözcügü ile birlikte kullanilirsa asagidaki yazilis biçimi kullanilir:
if ifade
deyim1 ;
else
deyim2;
end
deyim3;
...
Bu durumda,ifadenin degeri dogru ise deyim1 icra edilir ve sonra deyim3’e geçilir.Ifadenin
degeri yanlis ise,bu durumda da deyim1 atlanarak dogrudan else’i izleyen deyim2’ye
geçilecek ve bu icra edildikten sonra da deyim3 ile devam edilecektir.Asagida bu yapi ile
iliskili bir akis diyagrami verilmistir.
if deyiminde,ifadenin degeri dogru oldugu zaman sadece deyim1 gibi tek bir deyim degil de
bir deyimler grubunun icra edilmesi isteniyorsa bu durumda bu deyimler grubu if-end
sözcükleri arasina yerlestirilir:
if ifade
deyim1;
deyim2;
..
deyim_n;
end
deyim_x;
..
Bu durumda ifade dogru ise deyim1,deyim2,..deyim_n ile belirtilen deyimler
grubunun tümü icra edilerek deyim_x’e geçilecektir;ifade yanlis ise de bu durumda if’e
ait deyimler blogu atlanarak dogrudan deyim_x’e geçilecektir.
Ayni sey if else yapisi için de söz konusudur:
If ifade
Deyim1;
Deyim2;
..
deyim_n;
else
deyim_n+1;
deyim_n+2;
..
deyim_m;
end
deyim_k;
...
Yukardaki yapida,ifade dogru ise,deyim1,deyim2,..,deyim_n icra edilerek
deyim_k’ya geçilecek,ifade yanlis ise bu durumda da,if içindeki deyimler atlanarak
sadece deyim_n+1,deyim_n+2,..,deyim_m icra edilerek programin icrasi daha sonra
deyim_k’ya erisecektir.
ÖRNEK 1:
I.File/New/m-file yolu ile bir m- file açiniz:
II.Asagidaki komutlari
giriniz:
m-dosyaya
IF1.m adini vererek Save butonunu tiklayiniz.
ÖRNEK PROGRAM 2:
I.Asagidaki m-dosyayi olusturunuz:
II.Programi çalistirdiginizda,bu programda ,klavyeden,10’dan büyük bir sayi
girilirse,asagidaki
Çiktisi elde edilecek,10 ya da daha küçük bir sayi girilirse de asagida görüldügü gibi,
>> if1
BIR TAM SAYI GIRINIZ..7
Bir mesaj elde edilecektir.Böylece if-else yapisi ile daha kapsamli bir kontrol
isleminin gerçeklestirilebilecegi söylenebilir.
PROBLEM:
PROGRAMIN ÇIKTISI:
x’in degeri yaklasik olarak e sayisi olarak girilirse(e sayisinin degeri e=2.718..)
PROBLEM:
Bir satis elemaninin ,sattigi ürün miktarina göre alacagi günlük ücret asagidaki gibi
belirlenmektedir:
Günlük satis miktari 50’den az ise,4,000,000TL lik sabit ücrete satilan ürün basina
50,000TL’lik prim eklenerek günlük ücret belirlenecektir.
Günlük satis miktari 50 ya da daha fazla ise bu durumda günlük sabit ücret 5,000,000TL
alinarak satilan ürün basina da ilk 50 ürün için 50,000TL,50’yi asan kisim için de
60,000TL prim verilerek günlük ücret belirlenecektir.
Dogal olarak, sartli bir ifadede iki deger arasinda karsilastirma islemi gereklidir. Bazen
iliskisel operatörler olarak ta anilan (relational operators ) 6 karsilastirma operatörü
vardir.Bunlar asagidaki tabloda belirtilmistir:
Iliskisel operatörler de ikili operatörlerdir. (binary operators ) Yani bu operatörlerin her biri
iki farkli deger(operand) üzerinde islem görür.
Iliskisel bir ifadenin sonucu dogru ise Matlab derleyicileri bunu 1,iliskisel bir ifadenin
sonucu yanlis ise de Matlab derleyicileri bunu 0 olarak kabul ederler.Buna göre asagidaki
ifadelerin sonuçlarini inceleyiniz:
Tek bir if deyimi programin iki seçenekten birini seçmesine olanak saglar. Fakat bir çok
pratik uygulamada tek bir if deyimi yetersiz kalir. Birinci karari aldiktan sonra ikinci karar,
ikinciden sonra üçüncü kararin alinmasi gerekebilir. Bu tipte bir program akisi,iç içe if
deyimlerini gerektirir. Farz edelim ki üç tamsayiyi kabul eden ve bunlarin en küçügünü bulan
ve yazdiran bir program yazmak istiyorsunuz, Iç içe if deyimleri ile programi asagidaki gibi
yazabilirdiniz.
Iç içe if deyimleri, her else’ in dogru if ile uyusmasi konusunda problem yaratir. Bu genellikle
yakindaki else problemi adi ile anilir. Mesela yukardaki programda, ilk else, ikinci if ile
iliskilidir. Genel kural sudur:
Bununla birlikte her bir if deyimi sadece bir else cümlecigine sahip olabilir.
Birbirini izleyen çok sayida kosul kontrolünü gerçeklestirmeye yarayan bir yapi if-
else- if basamagi adini alir ve yazilis biçimi asagidaki gibidir:
If ifade1
Deyim1;
elseif ifade2
Deyim2;
elseif ifade3
Deyim3;
...
else
Deyim_n;
End
Deyim_n+1;
Önce ifade1 kontrol edilir;bu ifade dogru ise,Deyim1 icra edilir ve sonra
Deyim_n+1’e geçilir.
Ifade1 yanlis ise,o takdirde,ifade2 kontrol edilir.Bu ifade dogru ise,bu durumda
sadece Deyim2 icra edilir ve sonra Deyim_n+1’e geçilir.
Ifade2 yanlis ise,o takdirde,ifade3 kontrol edilir.Bu ifade dogru ise,bu durumda
sadece Deyim3 icra edilir ve sonra Deyim_n+1’e geçilir.
Bu islemler daha fazla sayida else if bulundugu takdirde ayni sekilde devam eder.
if’ler ile kontrol edilen ifadelerin tümü de yanlis ise,bu durumda programin kontrolü
else’i izleyen Deyim_n’e geçer ve bu deyim icra edilir.Daha sonra kontrol
Deyim_n+1’e geçecektir.
v1=150000000*0.25;
v2=150000000*0.30;
v3=300000000*0.35;
v4=600000000*0.40;
gelir=input('\nVERGI MUKELLEFININ GELIRI ');
if gelir<=150000000
vergi=gelir*0.25;
elseif gelir<=300000000
vergi=v1+(gelir-150000000)*0.3;
elseif gelir<=600000000
vergi=v1+v2+(gelir-300000000)*0.35;
elseif gelir<=1200000000
vergi=v1+v2+v3+(gelir-600000000)*0.4;
else
vergi=v1+v2+v3+v4+(gelir-1200000000)*0.5;
end
end
PROGRAMIN ÇIKTILARI:
Yukardaki programda uygulanan vergilendirme mantigi su sekildedir:
O nedenle programin basinda her araliga ait sabit vergiler hesaplanarak v1,v2,v3 ve
v4 degiskenlerine atanmaktadir.
ax2 + bx + c = 0
seklinde ifade edilir ve denklemin köklerinin varligi hakkinda bilgi sahibi olabilmek
için,denklemin diskriminanti adi verilen,
∆=b2-4ac
∆<0 ise denklemin gerçel sayilarla ifade edilebilecek bir kökü yoktur.
∆=0 ise denklemin ,degerleri birbirine esit olan iki kökü vardir ve bunlar,
x1=x2= -b/(2a)
∆>0 ise de denklemin birbirinden farkli iki gerçel kökü vardir ve bunlar,
x1=(-b+√∆)/(2a)
ve
x1=(-b-√∆)/(2a)
seklinde hesaplanirlar.
» ikider
a katsayisi..1
a=
b katsayisi..1
b=
c katsayisi..1
c=
d=
-3
Ayni programi bir kez daha çalistirarak x2-2x+1=0 denkleminin köklerini arastiralim:
» ikider
a katsayisi..1
a =
b katsayisi..-2
b =
-2
c katsayisi..1
c =
d =
x1 =
x1=x2
» ikider
a katsayisi..1
a=
1
b katsayisi..-5
b=
-5
c katsayisi..6
c=
d=
x1 =
x2 =
» xor(1,1)
ans =
» xor(1,0)
ans =
» xor(0,1)
ans =
1
» xor(0,0)
ans =
a..4
a=
b...3
b =
ÖRNEK:xor FONKSIYONU
» a=input('a..'),b=input('b...'),if ~xor(a>0,b>
0),disp('her iki sayi da ayni isarettedir'),end
a..4
a =
b...8
b =
8
her iki sayi da ayni isarettedir
» a=input('a..'),b=input('b...'),if ~xor(a>0,b>
0),disp('her iki sayi da ayni isarettedir'),end
a..-3
a =
-3
b...-6
b =
-6
» a=input('a..'),b=input('b...'),if ~xor(a>0,b>
0),disp('her iki sayi da ayni isarettedir'),end
a..7
a =
b...-4
b =
-4
» A=eye(3,3)
A =
1 0 0
0 1 0
0 0 1
» B=~A
B =
0 1 1
1 0 1
1 1 0
» C=xor(A,B)
C =
1 1 1
1 1 1
1 1 1
» D=ones(3,3)
D =
1 1 1
1 1 1
1 1 1
» E=~D
E =
0 0 0
0 0 0
0 0 0
» F=D|E
F =
1 1 1
1 1 1
1 1 1
ÇÖZÜM:
A =
1 1 1
2 -2 1
4 2 1
K» b=[3 1 7]
b =
3 1 7
K» return
x =
1.0000
1.0000
1.0000
2)Bir kosulu kontrol ederek kosulun sonucuna göre bir islem yapan kontrol
komutlari(if,switch/case)
olmak üzere iki gruba ayrilir.If komutunu yukarda incelemistik;digerleri ise asagida
incelenecektir:
ÇEVRIM OLUSTURMA
for KOMUTU
for Parametre=Baslangiç:Artim:SonDeger
,Deyim1,Deyim2,..Deyim_n,End
Bir m-file içinde ise ayni ifade okunabilirligi arttirmak amaci ile de,
for Parametre=Baslangiç:Artim:SonDeger
Deyim1
Deyim2
..
Deyim_n
End
Seklinde kullanilir.
ÖRNEK 1:
0.5000
0.6000
0.7000
0.8000
0.9000
ÖRNEK 2:
2.5000
2.4000
2.3000
2.2000
2.1000
2
ÖRNEK:FAKTÖRYEL HESABI
for çevrimini kullanacagimiz diger bir örnek program ise faktöryel hesabi programi
olacaktir.Matematikte faktöryel,bilindigi gibi,
n!=1.2.3...n
PROGR
AMIN ÇIKTISI:
1.2/(3.4)-5.6/(7.8)+9.10/(11.12)-13.14/(15.16)
Sadece 4 terim oldugu için for çevrimi 1’den 4’e kadar çalistirilmistir.ilk terim
1.2/(3.4) ve ikinci terim 5.6/(7.8) oldugu için, x degiskeni ilk terimdeki ilk
sayiyi temsil etmek üzere terimi,x.(x+1)/((x+2).(x+3)) seklinde ifade
edebiliriz.x yerine 1 konulursa bu durum kolayca kanitlanabilir.Ikinci terimde
ilk sayi 5 ,3.terimde ilk sayi 9 olduguna göre x,her seferinde 4
arttirilmalidir.Bu da programda x=x+4 ; deyimi ile gerçeklestiriliyor.
ÖRNEK PROBLEM:
ÇÖZÜM:
Bu ifadeyi Matlab’te hesaplatabilmek için çesitli yollar mevcuttur.Biz burada bir m-dosya ile
bu hesaplatmayi gerçeklestirecegiz:
ÇÖZÜM
ÖRNEK PROBLEM:
Asagidaki ifadeyi Matlab’te hesaplatiniz:
ÇÖZÜM:
IÇ IÇE ÇEVRIMLER
Bir çevrim yapisinin içine baska bir çevrim yapisinin yerlestirilmesi ile elde edilen yapiya iç
içe çevrim(nested loop) adi verilir.
Matlab dilinde, if deyimlerini her hangi bir derinlige kadar iç içe kullanmak nasil
mümkünse, çevrim deyimlerini de iç içe kullanmak mümkün olacaktir. Iç içe çevrimlerde
hatirlanacak anahtar bilgi, önce içteki çevrimlerin tamamlanmasi gerektigidir.Bu konuda
asagidaki kural iç içe çevrimler için daima geçerlidir:
ÖRNEK:
Her x degeri için, program önce x ‘i yazdirir; sonra y ‘nin 10 degeri için çevrim yaparak her
iterasyon için x*y ‘yi yazdirir ve yeni bir satira geçer.
komutu en içteki çevrime aittir. % 5 d dönüsümü, fprintf( )nin çikista her sayi için 5 karakter
basmasini saglar. Sayi daha az karakter gerektiriyorsa, ön tarafina bosluklar konur.
ÖRNEK:
break DEYIMI
break deyiminin Matlab programlari içinde iki farkli kullanim alani mevcuttur:
1)switch yapisindaki case seçeneklerinden birinde switch yapisini terketmek ve
switch’i izleyen deyime geçmek.Bu tip kullanim ile iliskili örnekler switch deyimi
anlatilirken verilmistir.
Break deyimi bir çevrim içinde yer almissa bu durumda break deyimi ile
karsilasilir karsilasilmaz çevrim disina çikilir ve çevrimi izleyen deyime
geçilir.
ÖRNEK:
ÖRNEK PROGRAMIN ÇIKTISI
continue DEYIMI
ÖRNEK:
PROGRAMIN ÇIKTISI:
while KOMUTU
Yazilis biçimi,
Seklindedir.
ÖRNEK:
say =
say =
-1