Professional Documents
Culture Documents
Su ana kadar Matlab ile gereklestirdigimiz uygulamalarda ,belirli bir islemi gereklestirmek
zere gerekli olan Matlab komut ya da fonksiyonlarini Matlab komut satirindan,>>
sembollerinden sonra tek tek girerek icra ediyorduk.
Oysa,Matlab komut ya da fonksiyonlarindan gereklestirmek istediginiz bir isle iliskili zel
bir grubu,bir dosyaya kaydederek,bu dosya isminin agrilmasi ile icra edebilirsiniz.Sonuta
ok pratik ve etkin bir yol ortaya ikar;sz konusu islemin gerektigi her anda hazirlanan dosya
icra edilerek,komutlarin tek tek girilmesine gore, nemli bir zaman tasarrufu saglanir.
Bir Matlab deyimleri ya da komutlari grubunu ieren bu tip bir dosyaya Matlabde Mdosyasi(M-file) adi verilir.Bu tip dosyalariin uzantisi daima .m seklinde olmalidir.Bir Matlab
M dosyasi,bir komut grubu ierdigi iin tanim itibari ile bir program dosyasidir.Dolayisi ile
,Matlabde,M-dosyalari olusturularak programlama yapilabilir.
M dosyasi iine tm Matlab komut ve fonksiyonlari yerlestirilebilir;bunlar arasinda asagida
inceleyecegimiz kontrol komutlari da bulunabilir.M-dosyalari aslinda bilinen metin(text)
dosyasi tipinde dosyalardir.Ancak zel bir komut yorumlayicisi iinden geirilirler.
Matlabde birok matematik ya da mhendislik problemini zmek iin yazilacak programlar
C/C++,FORTRAN ya da PASCALdaki karsiliklarina gre ok daha basit ve kisadir.Bu
aslinda beklenen bir sonutur nk Matlabde gerekte bu amala kullanilacak pek ok hazir
fonksiyon mevcuttur.
if ifade
deyim1 ;
else
deyim2;
end
deyim3;
...
Bu durumda,ifadenin degeri dogru ise deyim1 icra edilir ve sonra deyim3e geilir.Ifadenin
degeri yanlis ise,bu durumda da deyim1 atlanarak dogrudan elsei izleyen deyim2ye
geilecek 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
szckleri arasina yerlestirilir:
if ifade
deyim1;
deyim2;
..
deyim_n;
end
deyim_x;
..
Bu durumda ifade dogru ise deyim1,deyim2,..deyim_n ile belirtilen deyimler
grubunun tm icra edilerek deyim_xe geilecektir;ifade yanlis ise de bu durumda ife
ait deyimler blogu atlanarak dogrudan deyim_xe geilecektir.
Ayni sey if else yapisi iin de sz 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_kya geilecek,ifade yanlis ise bu durumda da,if iindeki deyimler atlanarak
sadece deyim_n+1,deyim_n+2,..,deyim_m icra edilerek programin icrasi daha sonra
deyim_kya erisecektir.
RNEK 1:
I.File/New/m-file yolu ile bir m- file ainiz:
II.Asagidaki komutlari
giriniz:
m-dosyaya
IF1.m adini vererek Save butonunu tiklayiniz.
V.Program Debug/Run ile alistirilinca BIR TAM SAYI GIRINIZ mesaji
gelir;mesela 12 girilip entera basilinca GIRDIGINIZ SAYI 10 DAN
BUYUKTUR mesaji gelecektir:
RNEK PROGRAM 2:
I.Asagidaki m-dosyayi olusturunuz:
iktisi elde edilecek,10 ya da daha kk bir sayi girilirse de asagida grldg gibi,
>> if1
BIR TAM SAYI GIRINIZ..7
GIRDIGINIZ SAYI 10 YA DA DAHA KUCUK BIR SAYIDIR
>>
Bir mesaj elde edilecektir.Bylece if-else yapisi ile daha kapsamli bir kontrol
isleminin gereklestirilebilecegi sylenebilir.
PROBLEM:
ve g(x)=1/(x+ln(x))
PROGRAMIN IKTISI:
xin degeri yaklasik olarak e sayisi olarak girilirse(e sayisinin degeri e=2.718..)
Bir satis elemaninin ,sattigi rn miktarina gre alacagi gnlk cret asagidaki gibi
belirlenmektedir:
Gnlk satis miktari 50den az ise,4,000,000TL lik sabit crete satilan rn basina
50,000TLlik prim eklenerek gnlk cret belirlenecektir.
Gnlk satis miktari 50 ya da daha fazla ise bu durumda gnlk sabit cret 5,000,000TL
alinarak satilan rn basina da ilk 50 rn iin 50,000TL,50yi asan kisim iin de
60,000TL prim verilerek gnlk cret belirlenecektir.
Bir saticinin gnlk satis miktari bilgisayara
girildiginde saticinin alacagi gnlk creti
hesaplayan bir C programi yaziniz.
KARSILASTIRMA IFADELERI
Dogal olarak, sartli bir ifadede iki deger arasinda karsilastirma islemi gereklidir. Bazen
iliskisel operatrler olarak ta anilan (relational operators ) 6 karsilastirma operatr
vardir.Bunlar asagidaki tabloda belirtilmistir:
Iliskisel operatrler de ikili operatrlerdir. (binary operators ) Yani bu operatrlerin her biri
iki farkli deger(operand) zerinde islem grr.
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 gre asagidaki
ifadelerin sonularini inceleyiniz:
I IE IF DEYIMLERI(NESTED IF STATEMENTS)
Tek bir if deyimi programin iki seenekten birini semesine 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 ie if
deyimlerini gerektirir. Farz edelim ki tamsayiyi kabul eden ve bunlarin en kgn bulan
ve yazdiran bir program yazmak istiyorsunuz, I ie if deyimleri ile programi asagidaki gibi
yazabilirdiniz.
PROGRAMIN IKTISI:
I ie 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:
Bir else, kendisinden nce gelen en yakin if ile iliskilidir seklindedir.
Bununla birlikte her bir if deyimi sadece bir else cmlecigine sahip olabilir.
if-else-if BASAMAK YAPISI
Birbirini izleyen ok sayida kosul kontroln gereklestirmeye yarayan bir yapi ifelse- if basamagi adini alir ve yazilis biimi asagidaki gibidir:
If ifade1
Deyim1;
elseif ifade2
Deyim2;
elseif ifade3
Deyim3;
...
else
Deyim_n;
End
Deyim_n+1;
RNEK PROBLEM:
');
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
fprintf('\nHESAPLANAN GELIR VERGISI=%12.2f\n\n',vergi);
end
PROGRAMIN IKTILARI:
ax2 + bx + c = 0
seklinde ifade edilir ve denklemin kklerinin varligi hakkinda bilgi sahibi olabilmek
iin,denklemin diskriminanti adi verilen,
=b2-4ac
b katsayisi..-5
b=
-5
c katsayisi..6
c=
6
d=
1
x1 =
3
x2 =
2
Kkler x1=3 ve x2=2 olarak bulunmustur ki bu da dogru sonutur.
Hem if hem de while komutlari kosul ifadeleri kullanmaktadir.Kosul ifadeleri ya
iki ifadenin karsilastirilmasindan olusan mukayeseler seklinde ya da sonucu sayisal
degerler olabilen ifadeler seklindedir.mukayese ifadesinde karsilastirmanin sonucu
dogru ise kosul dogru kabul edilecektir;sayisal ifadelerde ise yukarda belirtildigi
gibi,C diline benzer sekilde ,ifadenin sonucu 0 dan farkli ise kosul dogru aksi takdirde
ise kosul yanlis olarak kabul edilecektir.
Mukayese sembollerini yukarda vermistik,Tablo 2de ise birden fazla mukayese
ifadesini birlestirmek iin kullanilan mantiksal islem operatrleri grlmektedir:
Tablo 2-Mantiksal islem operatrleri
Asagida
xor fonksiyonunun en basit kullanim sekli ile iliskili rnekler sunulmustur :
xor(1,1)
ans =
0
xor(1,0)
ans =
1
xor(0,1)
ans =
1
xor(0,0)
ans =
0
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 =
4
b...8
b =
8
b...-6
b =
-6
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..7
a =
7
b...-4
b =
-4
B=~A
B =
C=xor(A,B)
C =
1
D=ones(3,3)
D =
1
E=~D
E =
F=D|E
F =
1
denksis
KOMUTUNU GIRINIZ
A =
1
-2
K b=[3 1 7]
b =
3
K return
x =
1.0000
1.0000
1.0000
EVRIM OLUSTURMA
for KOMUTU
for komutu, asagidaki biimde kullanilabilir:
for Parametre=Baslangi:Artim:SonDeger
,Deyim1,Deyim2,..Deyim_n,End
Bir m-file iinde ise ayni ifade okunabilirligi arttirmak amaci ile de,
for
Parametre=Baslangi:Artim:SonDeger
Deyim1
Deyim2
..
Deyim_n
End
Seklinde kullanilir.
Burada Parametre degeri baslangi degerinden baslayarak ve her seferinde artim
degeri kadar arttirilarak Sondegere erisene kadar degistirilir.Parametrenin her degeri
iin,Deyim1,Deyim2,Deyim_n seklinde belirtilen ve for-end szckleri arasinda yer
alan deyimler grubu icra edilir.Parametrenin degeri,SonDegeri asinca,programin
kontrol,endi izleyen deyime yani evrimin disina ikacaktir.Artim degeri negatif te
olabilir.Bu durumda Baslangi degerinin SonDegerden daha byk olmasi gerekir.
RNEK 1:
for t=0.5:0.1:1 ,disp(t) ,end
0.5000
0.6000
0.7000
0.8000
0.9000
1
RNEK 2:
for t=2.5:-0.1:2 ,disp(t) ,end
2.5000
2.4000
2.3000
2.2000
2.1000
2
RNEK:FAKTRYEL HESABI
for evrimini kullanacagimiz diger bir rnek program ise faktryel hesabi programi
olacaktir.Matematikte faktryel,bilindigi gibi,
n!=1.2.3...n
seklinde tanimlanir;yani n sayisinin faktryeli 1den ne kadar tam sayilarin
arpimina esittir.Asagida,faktryel hesabi ile iliskili Matlab programi ve bu
program iindeki degiskenlerin programin icrasi esnasindaki degisimlerini
gsteren tablo verilmistir:
PROGR
AMIN IKTISI:
RNEK:
1.2/(3.4)-5.6/(7.8)+9.10/(11.12)-13.14/(15.16)
AIKLAMA:
Sadece 4 terim oldugu iin for evrimi 1den 4e kadar alistirilmistir.ilk terim
1.2/(3.4) ve ikinci terim 5.6/(7.8) oldugu iin, 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 gre x,her seferinde 4
arttirilmalidir.Bu da programda x=x+4 ; deyimi ile gereklestiriliyor.
Seri alterne seri olduguna gre,yani terimlerin isaretleri +,-,+,- seklinde
degistigine gre,p degiskeni yardimi ile terimlerin isaretleri ayarlanabilir.p
nce 1 olarak atanmistir.Sonra evrim iine konulan p=-p;ifadesi ise bir
sonraki isareti -,bir sonrakini + ve onu izleyeni yapacaktir.(Programi kagit
zerinde adim adim izleyiniz).
FOR EVRIMI ILE ILISKILI RNEK PROBLEMLER:
RNEK PROBLEM:
RNEK PROBLEM:
ZM:
Asagidaki m-dosyayi olusturunuz ve alistiriniz:
I IE EVRIMLER
Bir evrim yapisinin iine baska bir evrim yapisinin yerlestirilmesi ile elde edilen yapiya i
ie evrim(nested loop) adi verilir.
Matlab dilinde, if deyimlerini her hangi bir derinlige kadar i ie kullanmak nasil
mmknse, evrim deyimlerini de i ie kullanmak mmkn olacaktir. I ie evrimlerde
hatirlanacak anahtar bilgi, nce iteki evrimlerin tamamlanmasi gerektigidir.Bu konuda
asagidaki kural i ie evrimler iin daima geerlidir:
I ie evrimlerde en iteki evrim en nce tamamlanir.
RNEK:
Asagidaki
programda,dis
evrim
olan
i
parametreli
alisacaktir.(i=1,2,3,4,5).inin
her
degeri
iin
ise
iteki
alisacaktir.(j=1,2,3).Bylece asagidaki ikti elde edilecektir:
evrim
evrim
5
3
kez
kez
PROGRAMIN IKTISI:
Her x degeri iin, program nce x i yazdirir; sonra y nin 10 degeri iin evrim yaparak her
iterasyon iin x*y yi yazdirir ve yeni bir satira geer.
printf (% 5d ,x*y);
komutu en iteki evrime aittir. % 5 d dnsm, fprintf( )nin ikista her sayi iin 5 karakter
basmasini saglar. Sayi daha az karakter gerektiriyorsa, n tarafina bosluklar konur.
RNEK:
break
DEYIMI
break deyiminin Matlab programlari iinde iki farkli kullanim alani mevcuttur:
1)switch yapisindaki case seeneklerinden birinde switch yapisini terketmek ve
switchi izleyen deyime gemek.Bu tip kullanim ile iliskili rnekler switch deyimi
anlatilirken verilmistir.
2)break deyiminin ikinci kullanilis yeri,bir evrim(loop) yapisi iinden
,evrimi kontrol eden kosul ifadesini beklemeksizin hemen evrim disina
ikmak amaci iledir.
Break deyimi bir evrim iinde yer almissa bu durumda break deyimi ile
karsilasilir karsilasilmaz evrim disina ikilir ve evrimi izleyen deyime
geilir.
RNEK:
continue
DEYIMI
PROGRAMIN IKTISI:
while KOMUTU
Yazilis biimi,
While Kosul ,Deyim1,Deyim2,..,Deyim_n,end
Seklindedir.
Kosul dogru oldugu srece,Deyim1,deyim2,..,deyim_n seklinde belirtilen deyimler
grubunu icra eder.Kosul yanlis oldugu anda,endi izleyen deyime yani evrim disina
ikilacaktir.
RNEK:
say=2,while say>0 ,say=input('BIR SAYI GIRINIZ,DURDURMAK
IIN NEGATIF SAYI GIRMELISINIZ'),end
say =
2
BIR SAYI GIRINIZ,DURDURMAK IIN NEGATIF SAYI GIRMELISINIZ
say =
9
BIR SAYI GIRINIZ,DURDURMAK IIN NEGATIF SAYI GIRMELISINIZ
say =
-1
-1