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.
MATLABTE BIR m-DOSYAYI(PROGRAMI) ALISTIRMAK Matlabde bir program alistirmak iin asagidaki adimlar izlenmelidir: 1)Program Matlab editr iinde yazilir ve saklanir. 2)Programin saklandigi dosya daima .m uzantili olmalidir. 3)Programi alistirmak iin ya komut satirindan ismi girilerek entera basilir veya asagidaki gibi Debug/Run mens kullanilir:
4)Programi icra edebilmek iin,komut satirinda, sadece programin adi yazilir;uzantisi yazilmamalidir.
if deyimi iin akis diyagrami(flow chart) If deyimi else szcg ile birlikte kullanilirsa asagidaki yazilis biimi kullanilir:
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:
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:
Bu ok basit ve kisitli programda kullanici klavyeden 10dan daha byk bir sayi girdigi zaman,program yukardaki iktida grlen mesaji verecek fakat 10 ya da daha kk bir sayi girilirse bu durumda herhangi bir mesaj grntlenmeyecektir.
II.Programi alistirdiginizda,bu programda ,klavyeden,10dan byk bir sayi girilirse,asagidaki BIR TAM SAYI GIRINIZ..14 GIRDIGINIZ SAYI 10 DAN BUYUKTUR
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))
seklinde tanimlanmaktadir.x degeri klavyeden girildigine gre,f(x) ve g(x)i hesaplatan ve yazdiran bir Matlab programi yaziniz.
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.
Gerekli tm araliklarin kontrol iin,program 40,50 ve 60 satis miktarlari iin test edilrek asagidaki sonular elde edilmistir:
PROBLEM:Bilgisayara negatif olmayan bir sayi girildiginde bu sayinin karekkn hesaplayan ,negatif bir sayi girildiginde ise kullaniciyi uyaran bir MATLAB 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:
DIKKAT EDILECEK NOKTA: Karsilastirma islemlerinde esitlik kontrolnn == sembol yerine yanlislikla = sembol ile yapilmasi durumu.
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:
Bu yapi su sekilde alismaktadir: nce ifade1 kontrol edilir;bu ifade dogru ise,Deyim1 icra edilir ve sonra Deyim_n+1e geilir. Ifade1 yanlis ise,o takdirde,ifade2 kontrol edilir.Bu ifade dogru ise,bu durumda sadece Deyim2 icra edilir ve sonra Deyim_n+1e geilir. Ifade2 yanlis ise,o takdirde,ifade3 kontrol edilir.Bu ifade dogru ise,bu durumda sadece Deyim3 icra edilir ve sonra Deyim_n+1e geilir. Bu islemler daha fazla sayida else if bulundugu takdirde ayni sekilde devam eder. ifler ile kontrol edilen ifadelerin tm de yanlis ise,bu durumda programin kontrol elsei izleyen Deyim_ne geer ve bu deyim icra edilir.Daha sonra kontrol Deyim_n+1e geecektir. Yukardaki yapi iinde,Deyim1,Deyim2,..Deyim_n ile belirtilen birimler tek bir deyimden ibaret olabilecegi gibi, deyimler grubundan da olusabilir.
RNEK PROBLEM:
Bu rnekte basit bir vergi hesabi programi gelistirmek istiyoruz.Gelir vergisinin asagidaki kurallara gre belirlendigini var sayalim: Gelir150,000,000 ise vergi orani %25 Gelir300,000,000 ise vergi orani %30 Gelir600,000,000 ise vergi orani %35 Gelir1,200,000,000 ise vergi orani %40 Gelir>1,200,000,000 ise vergi orani %50
Bu problemi Matlab dilinde programlayabilmek amaci ile,asagidaki basit algoritmayi uygulayacagiz: a)Gelir bilgisi klavyeden girilecektir. b)Gelir bilgisi,yukardaki vergi hesaplama kurallarina gre kontrol edilerek vergi hesaplanacaktir. c)Hesaplana n vergi ekrana yazdirilacaktir.
VERGI HESABINI GEREKLESTIREN MATLAB PROGRAMININ LISTESI: v1=150000000*0.25; v2=150000000*0.30; v3=300000000*0.35; v4=600000000*0.40;
');
PROGRAMIN IKTILARI:
Yukardaki programda uygulanan vergilendirme mantigi su sekildedir: rnegin,bir kisinin geliri 200,000,000 TL olsun.Bunun ilk 150,000,000 TLsi %25ten,kalan 200,000,000-150,000,000=50,000,000 TLsi ise %30dan vergilendirilecektir. 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 kklerinin varligi hakkinda bilgi sahibi olabilmek iin,denklemin diskriminanti adi verilen,
=b2-4ac
ifadenin hesaplanmasi gerekir.Diskriminantin degerlerine gre,sayet, <0 ise denklemin gerel sayilarla ifade edilebilecek bir kk yoktur.
=0 ise denklemin ,degerleri birbirine esit olan iki kk vardir ve bunlar, x1=x2= -b/(2a) seklinde hesaplanirlar.Bunlara iki kat kk ya da akisik kk adi verilir. >0 ise de denklemin birbirinden farkli iki gerel kk vardir ve bunlar, x1=(-b+)/(2a) ve x1=(-b-)/(2a) seklinde hesaplanirlar.
3) Programi File/Save mens yardimi ile ikider.m adi ile saklayiniz. 4)Matlab komut satirina asagidaki ismi giriniz: ikider a katsayisi..1 a= 1 b katsayisi..1 b= 1 c katsayisi..1 c= 1 d= -3 gerek kk yok
Program alisinca a b ve c katsayilarini istemis ve kullanici a=1 b=1 c=1 degerlerini girmistir.Bylece x2+x+1 =0 denkleminin kkleri aranmaktadir.Bu denklemin gerek kk yoktur ve program bu mesaji vermektedir. Ayni programi bir kez daha alistirarak x2-2x+1=0 denkleminin kklerini arastiralim: ikider a katsayisi..1 a = 1 b katsayisi..-2 b = -2 c katsayisi..1 c = 1 d = 0 x1 = 1 x1=x2 Bu durumda denklemin akisik iki kk vardir ve x1=x2=1dir ve program bu sonucu bulmustur. Son olarak ayni programi x -5x+6=0 denklemi iin test edelim: ikider a katsayisi..1 a= 1
2
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
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 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 = 0 1 1 1 0 1 1 1 0
C=xor(A,B) C = 1 1 1 1 1 1 1 1 1
1 1
1 1
1 1
A KATSAYILAR MATRISINI VE b SAG TARAF VEKTRN GIRINIZ DAHA SONRA return KOMUTUNU GIRINIZ
A = 1 2 4 1 -2 2 1 1 1
K b=[3 1 7]
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:
RNEK: 1.2/(3.4)-5.6/(7.8)+9.10/(11.12)-13.14/(15.16)
seklindeki alterne seri toplaminin hesaplanmasi. Yukardaki ifadede, . sembol arpma islemi anlamindadir. ALTERNE SERI PROGRAMININ LISTESI:
ALTERNE SERI PROGRAMINDAKI DEGISKENLERIN PROGRAMIN ICRASI ESNASINDAKI DEGISIMLERINI GSTEREN TABLO
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:
II.yukardaki m-dosyayi m=1000, m=10000 ve m=100000 degerleri iin alistirdiginizda gittike piye yaklasan degerler elde edeceksiniz:
RNEK PROBLEM:
Ifadesini Matlabte hesaplatiniz. Bu ifadeyi Matlabte hesaplatabilmek iin esitli yollar mevcuttur.Biz burada bir m-dosya ile bu hesaplatmayi gereklestirecegiz: ZM Asagidaki m-dosyayi olusturunuz:
m-dosyayi alistirdiginizda asagidaki sonucu elde edeceksiniz: : Tam dogru deger RNEK PROBLEM: dir ve yukardaki sonu bu degere ok yakindir.
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:
Bu seri toplamini hesaplamak istedigimizde,i ie iki evrim kullanmak gerektigini hemen anlariz: 1)Her adimda,bir toplama islemi gerektiren,terimlerin toplanmasinin gerekli oldugu bir evrim(Yukardaki tek evrim rneklerindeki 1+2+3+..+n toplami rnegini hatirlayiniz) 2)Yukarda belirtilen evrimin her parametre degeri iin,o adimdaki faktryeli hesaplatmak zorunda oldugumuz ve o nedenle yukardaki evrimin iinde yer almasi gereken bir evrim. Bu dsncelerle,problemin zmn teskil edecek olan bir Matlab programini asagidaki gibi yazabiliriz:
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
continue deyimi,evrim iinde,belirli bir kosulun kontrol ile,bir sonraki evrim adimina gidilmesini gereklestirir. RNEK: Asagidaki programda,for evriminin parametresi olan i degiskeni 3 ile tam blnemeyen bir deger alinca bu deger ile islem yapilmayip bir sonraki adima geilmesi continue deyimi ile saglanmaktadir.Bylece program,kullanici tarafindan girilen bir st limite kadar,3 ile blnebilen sayilarin toplamini ve bu tip sayilarin adedini bulacaktir.
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 9