Matlab Yeni başlayanlar için MATLAB Yeni Ba şlayanlar için MATLAB Yardımcı Ders Notları Yrd. Doç. Dr. Cüneyt AYDIN Yıldız Teknik Üniversitesi İstanbul-20091 İçindekiler Giri ş Matris i şlemleri Sayı Formatları Temel Lineer Cebir İşlemleri Diziler (Arrays) Programı Dallandıran İfadeler (if-end , switch-case yapıları) Döngüler (for-end ve while-end döngüleri) Grafik Dosya yazdırma-okuma Fonksiyon dosyası olu şturma2 Kaynakça Do ğan, U., (2009), Temel Bilgisayar Bilimleri Ders Notları, YTÜ, Lisans Ders Notları, İstanbul. Demirel, H., (2005), Dengeleme Hesabı, YTÜ, Lisans Ders Notları, İstanbul. Uzuno ğlu M., vd. (2002), Matlab, Türkmen Kitabevi, İstanbul. http://www.mathworks.com/matlabcentral/ http://www.mathworks.com/matlabcentral/fileexchange/3 MATLAB (MATrix LABoratuary) http://www.mathworks.com/matlabcentral/ MATLAB, yüksek performanslı bir uygulama yazılımı ve bir programlama dilidir. MATLAB’in temelindeki yapı, boyutlandırma gerektirmeyen matrislerdir. Yaptı ğımız tüm girdi ve çıktılar, belirteç gerektirmeksizin bir matris tanımlar. İlk olarak Fortran dili ile yazılan MATLAB, daha sonra C ile yazılmı ştır.4 MATLAB (MATrix LABoratuary) Matlab’de hazır programlar vardır. Bu programlara fonksiyon adı verilir. Matlab fonksiyonlarının kullanımı, matematikteki y=f(x) fonksiyonunun kullanımıyla özde ştir. Örne ğin, a=sin(x) fonksiyonunda, sin fonksiyonu, x açısının (input- girdi) de ğerini hesaplar; kullanıcı bu de ğeri, örne ğin, bir a de ği şkenine atar. a de ğeri sin fonksiyonunun bir çıktısıdır (output).5 MATLAB (MATrix LABoratuary) Avantajları: Kullanım kolaylı ğı, İşletim sistemi uyumlulu ğu, Sayısal analiz i şlemlerindeki kolaylıklar, Hazır fonksiyonlar (function files), Görüntüleme (visualization) kolaylı ğı (grafik çizim), GUI geli ştirme kolaylı ğı, MATLAB derleyicisi (exe: executable dosya ile win32 uygulamaları), Toolboxes (Araç kutuları) :hazır programlar!6 MATLAB/Command window (komut penceresi) Current directory (çalı şma klasörü) Dinamik komut satırı Her türlü mat. i şlem, Demo, program çalı ştırma vb. M-file editörü Programların yazıldı ğı editör7 MATLAB/Workspace (İş alanı) Workspace penceresi Atanan de ği şken Workspace penceresini açmanın “komut” yolu Workspace, ilgili oturumda kullanılan tüm de ği şkenlerin tutuldu ğu alandır.8 MATLAB/Array Editor (Dizi editörü) Matris, vektör ve sayılar için excel özelli ğindeki editördür. Daha önce atanan bir de ği şkenin boyutları istenildi ği gibi de ği ştirilebilir! İki farklı biçimde görüntülenir: >>open('a') workspace penceresinde ilgili de ği şken iki kez tıklanır.9 MATLAB/Temel Komutlar clc Command window’u temizler. clear İlgili oturumda atanmı ş tüm de ği şkenleri siler. clear a Yalnızca “a” de ği şkenini siler. demo Matlab demosunu çalı ştırır. date Gün-Ay-Yıl’ı görüntüler (Örne ğin, 17-Oct-2009) exit Matlab oturumundan çıkar. help Yardım menüsünü açar. help f_na f_na fonksiyonu hakkında bilgi verir. save d a a de ği şkenini d dosya ismiyle mat uzantılı olarak kaydeder. load d a de ği şkenini d dosyasından geri ça ğırır. Save ve load komutları, matris vb. yapıların kaydedilmesi için çok önemlidir.10 MATLAB/Temel dosya türleri *.m MATLAB program dosyaları *.fig Grafik dosyaları ve GUI’lerin grafik parçaları *.mat De ği şken ve matris dosyaları *.p pre-parsed pseudo-code dosyaları (bu dosyaların içeri ği görüntülenemez ancak program olarak ça ğrılabilir, yani MATLAB’de çalı ştırılabilir!)11 MATLAB/Matrislerin Girilmesi Matris ve vektörler [ ] kö şeli parantezleri ile tanımlanır. Matris ve vektör girmenin 3 farklı yolu vardır: Örne ğin: A=[1 3 5 7 8 11 100 1 4] 1.yol A=[1 3 5;7 8 11;100 1 4] 2.yol ? ? ? ? ? ? ? ? ? ? = 4 1 100 11 8 7 5 3 1 A A(1,1)=1, A(1,2)=3, A(1,3)=5 A(2,1)=7, A(2,2)=8, A(2,3)=11 A(3,1)=100, A(3,2)=1, A(3,3)=4 3.yol12 MATLAB/Matrislerin Kaydedilmesi Matris ve vektörler *.mat uzantılı olarak save komutuyla kaydedilir, load ile de istenilen yerden geri ça ğrılır. Örne ğin, girilmi ş bir a matrisini “D:\yildiz” klasörüne “katsayilar.mat” olarak kaydetmek isteyelim: Bunun için a şa ğıdaki komut dizisi kullanılır; save D:\yildiz\katsayilar a katsayilar.mat olarak kaydedilen a matrisinin herhangi bir zamanda geri ça ğrılması için, load D:\yildiz\katsayilar komut dizisi kullanılır. Geri ça ğırma i şleminden sonra, ilgili matris a dizisi olarak workspace’de kaydedilir (workspace’e kaydetme i şleminin geçici oldu ğunu hatırlayınız!) Yeni bir matrisi katsayilar.mat olarak kaydetti ğimizde, önceki matrisi bir daha görme imkanı kalmaz. Yani save overwrite (üzerine yazma) özelliklidir.13 MATLAB/Matrislerin Kaydedilmesi *.mat uzantılı dosyalar, ayrıca MATLAB’den open files kısa yolundan da geri ça ğrılabilir: Open files Dosya türünü MAT-files olarak de ği ştir. Dosyadaki de ği şken workspace’de oluşturulur.14 MATLAB/Sayı Formatları >> format long >> a=1.123000123123123123; >> a a = 1.12300012312312 >> a=100004545.99923423499111; >> a a= 1.000045459992342e+008 16 karakter 10 8 >> format short >> a=1.123000123123123123; >> a a = 1.1230 >> a=100004545.99923423499111; >> a a= 1.0000e+008 6 karakter 10 8 Bir sayının istenilen hanesinin gösterilmesi için fprintf veya sprintf komutları kullanılır: >>a=100004545.99923423499111; >>fprintf(‘%1.10f’,a) 100004545.9992342300 Matris elemanlarının istenilen hanede gösterilmesi için, printmatrix fonksiyonu oldukça kullanılı şlıdır (File-exchange sayfasından download edilebilir!)15 MATLAB/Temel lineer cebir komutları inv(a) Bir a kare matrisinin tersini (inversini) alır. a’ a matrisinin devri ğini (transpozesini) alır. det(a) a matrisinin determinantını hesaplar. a+b Boyutları aynı olan a ve b matrisini toplar. a-b Boyutları aynı olan a ve b matrislerinin farkını alır. a*b Sütun sayısı m olan a matrisiyle satır sayısı m olan b matrisini çarpar. a/b b düzenli kare bir matrisse (determinantı sıfırdan farklıysa), aynı boyutlu a matrisiyle; a*inv(b) i şlemini yapar. a.*b Boyutları aynı olan a ve b matrislerinin elemanlarını kar şılıklı olarak çarpar. a./b Boyutları aynı olan a ve b matrislerinin elemanlarını kar şılıklı oranlar.16 MATLAB/Temel lineer cebir komutları trace(a) Bir a matrisinin izini (kö şegen elemanlarının toplamını) hesaplar. diag(a) Bir kare a matrisinin kö şegen elemanlarını bir sütun vektöre atar. Ya da a bir vektör ise kö şegenleri bu vektörün elemanlarından olu şan bir kö şegen matris olu şturur. sum(a) a matrisinin her bir sütununun toplamını hesaplar. a bir vektör ise sonuç, vektör elemanlarının toplamı olur. triu(a) Bir matrisin üst üçgen matrisini olu şturur. tril(a) Bir matrisin alt üçgen matrisini olu şturur. zeros(m,n) m ×n boyutlu sıfır matrisi olu şturur. ones(m,n) m ×n boyutlu elemanları “1” olan matris olu şturur. eye(m) m ×m boyutlu birim matris olu şturur.17 MATLAB/Temel matris operatörleri a(:) a matrisinin sütunlarının ard arda dizilmesinden olu şan bir sütun vektör olu şturur (vec operatörü) a(:,i) a matrisinin i. sütununu alır. a(j,:) a matrisinin j. satırını alır. a(:,[i j]) a matrisinin i ve j. sütununu alır. a([i j],:) a matrisinin i ve j. satırını alır. e=a:b:n a, (a+b),…,n sayılarından olu şan bir satır vektör olu şturur. Örne ğin, e=1:1:n, 1 ile n arasındaki tam sayılardan olu şan bir vektör. e=2:2:n, 1 ile n arasındaki çift sayılardan olu şan bir vektör. e=1:2:n, 1 ile n arasındaki tek sayılardan olu şan bir vektör. e=-10:0.1:n, -10’dan 0.1 artımla n’ye kadar olan sayılardan olu şan bir vektör.18 MATLAB/Temel matris operatörleri length(a) a matrisinin sütun sayısını verir. a bir vektör ise sonuç, a vektörünün eleman sayısıdır. [m,n]=size(a)a matrisinin satır sayısını (m) ve sütun sayısını (n) verir. max(a) Bir a vektörünün en büyük elemanını gösterir. min(a) Bir a vektörünün en küçük elemanını gösterir. [m,i]=max(a) Bir a sütun vektörünün en büyük elemanını (m) ve bunun satır numarasını verir. [m,i]=min(a) Bir a sütun vektörünün en küçük elemanını (m) ve bunun satır numarasını verir. sort(a) Bir a vektörünün elemanlarını küçükten büyü ğe sıralar. a(:,i)=[] A’nın i. sütununu siler. a(i,:)=[] A’nın i. satırını siler.19 MATLAB/Temel matris operatörleri sortrows(a,i) Bir a matrisinin elemanlarını i.sütuna göre sıralar. Örnek: a = 1 1000 3 10 2 5 4 1 >> sortrows(a,1) ans = 1 1000 2 5 3 10 4 1 a = 1 1000 3 10 2 5 4 1 >> sortrows(a,2) ans = 4 1 2 5 3 10 1 100020 MATLAB/Uygulama-1 A şa ğıdaki i şlemleri command window’da yapınız. 1) A matrisini giriniz. 2) A matrisinin determinantını hesaplayınız. 3) A matrisinin tersini bulunuz. Çıkan sonucu bir B matrisine atayınız. 4) A*B i şlemini yapınız. Elde edilen sonucu irdeleyiniz. 5) A matrisinin 1. sütununu a1, 3. sütununu a3 vektörlerine atayınız. 6) Kö şegenleri A matrisinin kö şegenlerinden olu şan bir C kö şegen matrisi olu şturunuz. 7) a1’in devri ği ile a3 vektörünü çarpınız. 8) a1 ile a3 vektör elemanlarını kar şılıklı çarpınız. 9) A’nın 3. satırını, di ğer satır elemanlarını girmeden, [5 6 7] olarak de ği ştiriniz. 10)A’nın 1 ve 2. satırlarını siliniz. ? ? ? ? ? ? ? ? ? ? = 4 1 100 11 8 7 5 3 1 A21 MATLAB/Uygulama-1:Çözüm >> A=[1 3 5;7 8 11;100 1 4]; >> det(A) ans = -728 >> inv(A) ans = -0.0288 0.0096 0.0096 -1.4725 0.6813 -0.0330 1.0893 -0.4107 0.0179 >> B=ans; >> A*B ans = 1.0000 0 0.0000 0 1.0000 0.0000 0 0.0000 1.0000 >>a1=A(:,1);a3=A(:,3); >>C=diag(diag(A)); >>a1’*a3 ans= 482 Birim matris 1 2 3 4 5 6 7 >> a1.*a3 ans= 5 77 400 >>A(3,:)=[5 6 7] A = 1 3 5 7 8 11 5 6 7 >> A([1 2],:)=[] A = 5 6 7 >> 8 9 1022 MATLAB/Uygulama-2 A şa ğıdaki i şlemleri command window’da yapınız. 1) B matrisini giriniz. 2) B matrisini mevcut çalı şma klasörünüze katsayilar ismiyle kaydediniz. 3) Dosyanın kaydedilip kaydedilmedi ğini kontrol ediniz. (Open Files penceresinden) 4) MATLAB oturumundaki tüm de ği şkenleri siliniz (clear) 5) Command window’da yazılmı ş tüm ifadeleri temizleyiniz. (clc) 6) B*2 i şlemini yapınız. 7) B matrisini geri ça ğırınız. 8) B matrisinin üst ve alt üçgen matrislerini olu şturunuz. 9) C=[B zeros(3,2)] i şlemini yapınız. ? ? ? ? ? ? ? ? ? ? = 3 1 10 7 8 70 5 5 10 B23 MATLAB/Uygulama-2:Çözüm >> B=[10 5 5;70 8 7;10 1 3]; >> save katsayilar B >> clear >> clc 1 2 4 5 >> C=[B zeros(3,2)] C = 10 5 5 0 0 70 8 7 0 0 10 1 3 0 0 9 8 6 7 >> B*2 ??? Undefined function or variable 'B'. >> load katsayilar >> triu(B) ans = 10 5 5 0 8 7 0 0 3 >>tril(B) ans = 10 0 0 70 8 0 10 1 3 3 Neden?24 MATLAB/Diziler (Arrays) Sayılar : Sayıdizileri (numeric array) Karakterler : Karakter dizileri (character array) Örnek: c=1999 (numericarray) d='Yildiz Teknik Universitesi' (character array) f=[1999 2000] (numeric, matrix) g=[d ' Insaat Fakultesi'] (character, matrix) Not: Numeric ile character dizileri bir matriste bir arada bulunamaz! Yani, bir matris hem sayı hem de bir kelimeyi aynı anda içeremez! Hücreler : Hücre dizileri (cell array) Yapılar : Yapıdizileri (structure array)25 MATLAB/Diziler (Arrays) Hücre Dizileri (Cell arrays) { } ile tanımlanır. Böylesi bir dizi, farklı matrisleri aynı isim altında tutmak ve i şlemek için kullanılmaktadır. Örne ğin, C{1}=[1 2;3 5],C{2}=[4 4 4 4];C{3}=[('yildiz teknik'),(' insaat')]; girildi ğinde, C bir hücre dizisi olur. Bu hücre geri ça ğrıldı ğında, C = [2x2 double] [1x4 double] [1x20 char] C{1} hücresi C{2} hücresi C{3} hücresi Her bir hücre ayrı ayrı i şlenir.26 MATLAB/Diziler (Arrays) C=cell(n) n ×n hücreden olu şan bo ş bir hücreyi C’ye atar. Örne ğin n=2 için >> C=cell(2) C = [] [] [] [] hücresi olu şturulur. Bir hücrenin içine istenilen sayıda yeni hücreler eklemek mümkündür; Örne ğin, C{1}{1}=[2 3] ile C a şa ğıdaki biçimde de ği şir; C = {1x1 cell} [] [] []27 MATLAB/Diziler (Arrays) C{1,1} C{2,1} C{3,1} C{1,2} C{2,2} C{3,2} C=cell(3,2) hücresi C{1,2}{1,1} C{1,2}{1,2} C{1,2}{2,1} C{1,2}{2,2} C{1,2} hücresi C{1,2}{2,2} hücresi Yeni alt hücre(ler)28 MATLAB/Diziler (Arrays) Yapı dizileri (Structure arrays), veri tabanları için oldukça kullanılı şlı bir dizi türüdür. A.name='Cüneyt'; A.sname='Aydin'; A.univ='YTU'; A.city='Istanbul'; A.email='caydin@yildiz.edu.tr'; A.year=2009; ile A, bir structure array olur. >>A A = name: 'Cüneyt' sname: 'Aydin' univ: 'YTU' city: 'Istanbul' email: 'caydin@yildiz.edu.tr' year: 2009 A yapı dizisi ça ğrıldı ğında, Hücre ve yapı dizileri, mat uzantılı dosyalar olarak, daha önce açıklanan save komutuyla kaydedilip, load komutuyla geri ça ğrılabilir. 29 MATLAB/Diziler arasında dönü şümler num2str(a) Bir a sayısını bir karaktere atama (From numeric to (2) string) str2num(a) Karakter olan bir a sayısını sayı de ğerine atama mat2str(a) Bir a matrisini bir karakter dizisine atama int2str(a) Bir a tam sayısını bir karaktere atama char(a) Bir a hücresini bir karakter dizisine atama cellstr(a) Bir a karakterini bir hücre dizisine atama num2cell(a) Bir a sayısını bir hücre dizisine atama30 MATLAB/Diziler arasında dönü şümler Örnek: Bir i şlem sonucunda a=10.234 elde edilsin. “Elde edilen sonuc=10.234” karakterini görüntülemek için, ['Elde edilen sonuc=' num2str(a)] yapısı dü şünülmelidir. Her iki ifade karakter olmalıdır! Bunun daha geli şmi ş biçimi, fprintf ile sa ğlanır: fprintf('%s%1.4f',('Elde edilen sonuc='), a ) Karakter Sayı31 MATLAB/Uygulama-3 A şa ğıdaki i şlemleri command window’da yapınız. 1. fprintf fonksiyonunu kullanarak, a=10.45623 sayısını 3 haneye kadar yazdırınız. 2. [‘sayinin degeri=‘ a] ifadesini, a virgülden sonra 2 hane olacak biçimde yazdırınız. 3. Yukarıdaki ifadeyi bir b de ği şkenine atayınız (sprintf ile) 4. b’nin bir karakter dizisi olup olmadı ğını denetleyiniz. 5. a de ğerini önünde 5 karakter bo şluk kalacak biçimde 2 haneye kadar yazdırınız. 6. a de ği şkenini msgbox(a,’sonuc’) ifadesiyle bir GUI’ye yazdırınız. 7. b de ği şkenini msgbox(b,’sonuc’) ifadesiyle bir GUI’ye yazdırınız. 8. a’nın karakökünü c de ğerine atayınız. b ve [‘sayinin karakoku’, c] ifadesi alt alta olacak biçimde (c, virgülden sonra 5 hane gösterilecek) msgbox içinde yazdırınız.32 MATLAB/Uygulama-3:Çözüm >> msgbox(b,’sonuc’) >> >>c=sqrt(a) c = 3.2336 >>b1=sprintf(‘%s%1.5f’,(‘sayinin… karakoku=‘),c); >>g=char(b,b1); >>msgbox(g,’sonuc’) 7 8 >> a=10.45623;fprintf(‘%1.3f’,a) 10.456 >> >>fprintf('%s%1.2f',('sayinin… degeri='),a) sayinin degeri=10.46 >> >>b=sprintf(‘%s%1.2f’,('sayinin… degeri='),a) b = sayinin degeri=10.46 >>ischar(b) ans= 1 >>fprintf(‘%10.2f’,a) 10.46 >>msgbox(num2str(a),’sonuc’) 1 2 3 4 5 6 5 bo şluk+5 karakter Not: b ve b1 karakter dizilerini alt alta yazdırmanın bir di ğer yolu, bunları bir hücre dizisi altında dü şünmektir; G=cell(2,1);G{1}=b;G{2}=b1; msgbox(G,’sonuc’) benzer sonucu üretir.33 MATLAB/Uygulama-4 A şa ğıdaki i şlemleri command window’da yapınız. 1. Sonraki i şlemlerde kullanılacak bir a sayı de ğerini, inputdlg fonksiyonu ile girdiren komutu yazınız. 2. a de ğerinin bir sayı olup olmadı ğını irdeleyiniz. 3. a*2 i şlemini yapınız. Bu i şlemin neden sonuç vermedi ğini irdeleyiniz. 4. a de ğerini, gerekli ise, sayı dizisine dönü ştürünüz.34 MATLAB/Uygulama-4:Çözüm >> a=inputdlg(‘Bir sayi giriniz’,’YTU-2009’) a = '150.123135465' >>isnumeric(a) ans = 0 >>a*2 >>?? Error using ==> * Function '*' is not defined for values of class 'cell'. >>a=str2num(char(a)) >> a = 150.1231 1 2 3 4 inputdlg ile karakter hücre dizisi olu şturulur. Bu nedenle, girilen verinin sayı yapılması gerekir.35 MATLAB/Programı Dallandıran İfadeler Dal yapıları, program kodlarından istenilenleri seçen ve onları i şleten, istenilen kodları ise de ğerlendirme dı şı bırakabilen MATLAB ifadeleridir. if Switch, case try/catch yapıları ile olu şturulur. Bu bölümde try/catch yapısına de ğinilmeyecektir.36 MATLAB/if,end yapısı if (e ğer) yapısı bir ko şulun gerçekle şmesi durumunda bir i şlemi yaptırmak için sıklıkla kullanılır. Bu ifade, if ko şul i şlem end biçimindedir. Örnek: Girilen bir sayının negatif olması durumunda, sayıyı do ğal logaritmasıyla de ği ştiren bir kod dü şünelim: a=input(' bir sayi giriniz= '); if a<0 a=log(a); else a=a; end a “Di ğer durumda” anlamındadır: Burada, a>0 ko şulunu temsil eder. a=input('bir sayi giriniz= '); if a<0 a=log(a); end if a>0 a=a; end a Else yapısı kullanılmasaydı37 MATLAB/switch,case yapısı switch (de ği ştir) if yapısına benzer. Burada daha çok sözel olarak belirtilen durumlara göre yönlendirme i şlemi yapılır. Bu yapının kullanımıcase ile a şa ğıdaki gibidir; switch durum case durum1 i şlem1 case durum2 i şlem2 otherwise i şlem3 end Örnek: gun degiskeninin, is gunu olup olmadı ğına karar vermek için a şa ğıdaki kodlar dü şünülür; clear,clc gun=input('hangi gun=', 's'); switch lower(gun) case {'pazartesi', 'sali','carsamba','persembe','cuma'} disp('i ş günü') case {'cumartesi','pazar'} disp('TAT İL!') end Kullanımı ki şiye ba ğlıdır.38 MATLAB/switch,case yapısı Kullanıcı tarafından girilen bir a=10.2424542 de ği şkeninin virgülden sonra 2’mi 3 hane mi yazdırılaca ğını sorgulayan bir questdlg GUI’sini dü şünelim: a=10.2424542; dummy=questdlg('Virgülden sonra kaç... hane verilsin?','Sonuc',... '2 hane', '3... hane','3 hane'); switch dummy case {'2 hane'} fprintf('%1.2f',a) case {'3 hane'} fprintf('%1.3f',a), end “2 hane” dü ğmesinin tıklanması durumunda, 10.24 sonucu görüntülenir. questdlg GUI’si39 MATLAB/Uygulama-5 1 ve 2. noktanın X ve Y koordinatlarının girilmesinden sonra, (1-2) açıklıklık açısının kaçıncı bölgeye dü ştü ğünü belirleyen, ilgili bölgeyi bir msgbox kutusunda yazdıran bir program yazınız. clear clc X1=input('X1=');Y1=input('Y1='); X2=input('X2=');Y2=input('Y2='); DX=X2-X1;DY=Y2-Y1; if (DX>0) & (DY>0) a=('Aci 1. bolgede'); end if (DX<0) & (DY>0) a=('Aci 2.bolgede'); end Çözüm if (DX<0) & (DY<0) a=('Aci 3.bolgede'); end if (DX>0) & (DY<0) a=('Aci 4.bolgede'); end msgbox(a,'Bolge?')40 MATLAB/Uygulama-6 1 ve 2. noktanın X ve Y koordinatlarının girilmesinden sonra, (1-2) açıklıklık açısını hesaplayan bir program yazınız. clear clc X1=input('X1=');Y1=input('Y1='); X2=input('X2=');Y2=input('Y2='); DX=X2-X1;DY=Y2-Y1; if (DX~=0)&(DY~=0),a=atan(DY/DX);a=a*200/pi; if (DX>0)&(DY>0),a=a;end if (DX<0)&(DY>0),a=a+200;end if (DX<0)&(DY<0),a=a+200;end if (DX>0)&(DY<0),a=a+400;end end if (DX==0)&(DY>0),a=100;end Çözüm Dı ş ko şul if (DX==0)&(DY<0),a=300;end if (DX>=0)&(DY==0),a=0;end if (DX<0)&(DY==0),a=200;end a %veya output a, a şa ğıdaki biçimde yazdırılabilir. fprintf('%s%1.5f%s','(1-2) aciklik acisi=',a,' grad')41 MATLAB/Uygulama-7 1 ve 2. noktanın X ve Y koordinatlarının girilmesinden sonra, (1-2) açıklıklık açısını ve (1-2) kenar uzunlu ğunu hesaplayan bir program yazınız. clear clc X1=input('X1=');Y1=input('Y1='); X2=input('X2=');Y2=input('Y2='); DX=X2-X1;DY=Y2-Y1; if (DX~=0)&(DY~=0),a=atan(DY/DX);a=a*200/pi; if (DX>0)&(DY>0),a=a;end if (DX<0)&(DY>0),a=a+200;end if (DX<0)&(DY<0),a=a+200;end if (DX>0)&(DY<0),a=a+400;end end if (DX==0)&(DY>0),a=100;end if (DX==0)&(DY<0),a=300;end if (DX>=0)&(DY==0),a=0;end if (DX<0)&(DY==0),a=200;end S=sqrt(DX^2+DY^2);%kenar fprintf('%s%1.5f%s','(1-2) aciklik acisi=',a,' grad') fprintf('\n') fprintf('%s%1.3f%s','(1-2) kenar uzunlugu=',S,' m') Çözüm Dı ş ko şul İki ifadeyi alt alta yazdırmak için Sonuçları, ayrıca sprintf fonksiyonu ile bir msgbox’a alt alta yazdırınız.42 MATLAB/Uygulama-9 Kullanıcıyı,1’i seçmesi durumunda YTÜ web sayfasina, 2’yi seçmesi durumunda istedi ğiniz bir web sayfasina yönlendiren bir menü programı yazınız. clear clc disp('[1]...YTU web sayfasi') disp('[2]...Cüneyt Aydın web sayfasi') a=input('='); if (a>2)|(a<=0) menu %Kullanıcının 0,negatif veya 3’den büyük sayı girmesi end durumunda, programı yeniden ba şlatmak için if a==1 web www.yildiz.edu.tr -browser Çözüm end if a==2 web www.yildiz.edu.tr/~caydin -browser end43 MATLAB/for,end döngüsü for,end döngüsü bir i şlemin birden daha fazla sayıda yaptırılmasında kullanılır. (Örne ğin, kök bulma problemlerinde kullanılan iterasyon çözümleri). Kullanımı, for i=1:n (i ›Tam sayı (integer)) i şlem end biçimindedir. Örnek: 1’den N’ye kadar olan sayıların toplamını yapan bir program dü şünelim. clear,clc N=input('bir sayi giriniz='); say=0; %sayac for i=1:N say=say+i; %birikimli (kümülatif toplam) end say44 MATLAB/while,end döngüsü while,end döngüsü, belirli bir durumun gerçekle şmesi durumunda bir i şlemin birden daha fazla sayıda yaptırılmasında kullanılır. done=0; while done==0 i şlem end Örnek: 1’den N’ye kadar olan sayıların toplamını while,end döngüsü ile yapan bir program dü şünelim. clear,clc N=input('bir sayi giriniz='); say=0; i=0;done=0; while done==0 i=i+1; %bir önceki örnekte for,end döngüsündeki “i” ye kar şılık gelir. if i==N done=1; end say=say+i; end say 1. Buradaki, while,end döngüsü, done de ği şkeni ancak ve ancak 0 oldu ğu zaman çalı şacaktır. 2. Bir önceki satırda, done de ği şkeni 0 olarak atanmı ş oldu ğu için while,end döngüsü çalı şır. (while, end döngüsünü çalı ştıran farklı algoritmalara burada de ğinilmeyecektir). i, son sayıya (N’ye) ula ştı ğında, done de ği şkenine 0’dan farklı bir sayı atanır. Böylece, while’ıno l d u ğu satıra gelindi ğinde, done “0” olmadı ğı için while, end döngüsü çalı şmaz (döngü sonlanır). Program, bu döngünün end satırının hemen altındaki satırdan i şleme devam eder (burada, say de ği şkeni command window’da yazdırılır.).45 MATLAB/Uygulama-10 n sayıda ölçünün tek tek düzeltmesi ve standart sapması girildi ğinde ilgili ölçünün kaba hatalı olup olmadı ğını belirleyen, kaba hatalı ölçüleri (varsa) yazdıran bir program olu şturunuz. Çözüm clear,clc n=input('olcu sayisi=');say=0; for i=1:n v=input('duzeltme='); s=input('standart sapma='); if abs(v)>=(3*s) disp('--------------------------') disp([int2str(i) '. olcu kaba hatali']) disp('--------------------------') say=say+1;KH(say,1)=i; end if abs(v)<(3*s) disp('--------------------------') disp([int2str(i) '. olcu normal']) disp('--------------------------') end end if say==0 disp('Kaba hatali olcu yok') end if say>0 disp('Kaba hatali olan olculer') KH end46 MATLAB/Grafik Matlab’de grafikler “figure” penceresinde çizdirilir. İki ve üç boyutlu çizim yanı sıra, kutupsal koordinat sisteminde de çizim olana ğı bulunur (bak., polar). Apsis (X) Ordinat (Y) X Y Z İki Boyutlu Koordinat Sistemi Üç Boyutlu Koordinat Sistemi47 MATLAB/Grafik Matlab’de en temel çizim fonksiyonu plot’dur. Örne ğin, x=0:0.1:5 olan bir dizi vektör elemanlarına kar şılık, y=x.^3+x.^2 fonksiyon de ğerleri hesaplatılsın. plot(x,y) ile a şa ğıdaki grafik çizdirilir. Çizilen grafi ğin üzerinde birçok de ği şiklik yapmak mümkündür. Bunun için “Edit plot”d ü ğmesi tıklanır. İlgili nesne (çizdirilen e ğri, eksenler vb.) iki kez tıklanarak beliren “Property Editor” penceresinden istenilen de ği şiklikler yapılabilir. Property Editor penceresinden yapılan her türlü de ği şikli ği, komut olarak yaptırmak mümkündür. Örne ğin, plot(x,y,'-o') hem ardı şık noktaları şekildeki gibi birle ştirir, hem de x,y nokta çiftlerini grafik üzerinde bir “o” sembolü ile i şaretler. Edit plot48 MATLAB/Grafik plot(x,y,'-o') ile ilgili grafik a şa ğıdaki gibi olur. A şa ğıdaki ifadelerle çizimi tekrarlayınız: plot(x,y,'-o') plot(x,y,'-*') plot(x,y,'-+') plot(x,y,'-^') plot(x,y,'-.') Sözü edilen grafik üzerindeki o,*,+ gibi sembollere marker denir. plot fonksiyonu ile ilgili e ğrinin rengini de ği ştirmek de mümkündür: plot(x,y,'r') kırmızı (red) plot(x,y,'k') siyah plot(x,y,'b') mavi (blue) plot(x,y,'g') ye şil (green)49 MATLAB/Grafik-Kaydetme ve kopyalama Çizilen grafikleri kaydetmek için Figure penceresindeki “File” menüsünden “Save” veya “Save As” seçenekleri seçilir. Grafikler, “fig” uzantılı dosyalar olarak ilgili klasöre kaydedilirler. Çizilen grafiklerin ba şka bir ortama aktarılmaları için, “Edit” menüsünün altındaki “Copy Figure” seçene ği seçilir. (Not: Kopyalamanın arka plan rengini ayarlamak için “Copy Options” seçene ğine bakınız.)50 MATLAB/Grafik-Aynı eksen takımına farklı grafikler çizdirme Aynı eksen takımına farklı grafikleri çizdirmek için hold on ve hold off komutları kullanılır. Bu iki komut arasına yazılan her türlü grafi ğin çizimi aynı eksen takımında gösterilir. Örne ğin, ya=[1;1.2;2.4;4.5] ve yb=[0.5;0.8;1.8;0] vektörleri ile ifade edilen iki farklı ölçü grubunu x=[1;2;3;4] vektörüne göre aynı eksen takımında çizdirmek için a şa ğıdaki komutları yazmak yeterlidir: hold on, plot(ya), plot(yb,'r'),hold off Not: E ğer x ekseni, bu örnekte oldu ğu gibi, y de ğerlerinin indisini, yani kaçıncı de ğer oldu ğunu, gösteriyorsa, plot fonksiyonunda x’in yeniden belirtilmesine gerek yoktur.51 MATLAB/Grafik-Grafik yoluyla bilgi üretme Örnek:ya=randn(1000,1) ve yb=randn(1000,1)*3 biçiminde iki ölçü grubu olu şturalım. (randn fonksiyonu, beklenen de ğeri 0, standart sapması 1 olan normal da ğılmı ş sayı üretir). ya’nın standart sapması 1, yb’nin standart sapması ise 3’tür. Bu ölçülerin, a ve b kaynaklarından elde edildi ğini ve de standart sapmalarını bilmedi ğimizi dü şünelim. Hangi ölçü grubunun daha kaliteli oldu ğunu (standart sapmasının dü şük oldu ğunu) grafik üzerinden görebilmek için, bir önceki örnekteki hold on/hold off komutlarını kullanarak bunları çizdirmek yeterli olacaktır: hold on, plot(ya), plot(yb,'r'),hold off Böylece, kırmızı ile gösterilmi şyb ölçülerinin sıfırdan daha çok saptıkları, dolayısıyla standart sapmasının daha yüksek oldu ğu bilgisi grafik üzerinden kolaylıkla okunabilmektedir. Not:sqrt(yb’*yb/999) i şlemi, ya’nın deneysel standart sapmasını verecektir (bkz. İstatistik Ders Notları). Bu de ğerin “3” kuramsal standart sapma de ğerine yakın olaca ğına dikkat ediniz. 52 MATLAB/Grafik-Grafik yoluyla bilgi üretme Bir önceki örnekte kullanılan ya ve yb ölçülerinin birbirleriyle nasıl bir ili şkide oldu ğunu görmek için, plot(ya,yb,'.') komutunu kullanmak yeterlidir. İlgili grafikten, ya ve yb ölçüleri arasında anlamlı bir ili şki (korelasyon) olmadı ğı bilgisi hemen türetilebilir. Çünkü beklenen de ğerleri 0 olan bu iki gruba ili şkin ölçü çiftleri, 0 merkezinde düzgün olarak (daire biçiminde) da ğılmı şlardır. İki ölçü grubu arasında korelasyon olabilmesi için, bu nokta bulutunun bir do ğru etrafında gözlenmesi gerekir. 53 MATLAB/Grafik-Grafik yoluyla bilgi üretme Bir önceki örnekte kullanılan yb ölçülerini, yb=2+3*ya+randn(1000,1)*1, biçiminde ya ölçülerine ba ğlı olarak üretelim. Bu durumda, plot(ya,yb,'.') ile olu şturulan grafikten ya ve yb ölçüleri arasındaki korelasyonun varlı ğı hemen görülecektir.54 MATLAB/Grafik-Grafik yoluyla bilgi üretme Mühendislik uygulamalarında en çok kar şıla şılan problemlerden biri de F(x)=0 biçimindeki bir denklemin ilgili aralıktaki kökünü (fonksiyonu sıfır yapan x de ğerini) bulmaktır. Sayısal analizde kullanılan Newton-Raphson gibi yöntemlerde kökün yakla şık de ğerine ihtiyaç vardır. Bu yakla şık de ğeri bulmak için grafik çizimi oldukça kullanı şlı olmaktadır. Örne ğin, F(x)=x 3 +x 2 -5=0 gibi bir denklemin -2 ile 2 arasındaki yakla şık kökünü bulmak için, x=-2:0.1:2 biçiminde x de ğerleri ve y=x.^3+x.^2-5 ile de bu x’lere kar şılık y de ğerleri üretilir. plot(x,y),grid on komutlarıyla a şa ğıdaki grafik çizdirilir.(grid on komutu şekildeki grid a ğını çizer) y=0 do ğrusunun e ğriyi kesti ği noktadan, x eksenine hayali bir dik inilirse, bu dikin gösterdi ği x de ğeri, F(x) denklemini sa ğlayan kök olacaktır. Buradan kökün yakla şık de ğerinin 1.4 oldu ğu sonucuna kolaylıkla ula şılır. Not: Figure penceresindeki büyütme özelli ği ile, ilgili kesi şim noktasına zoom yapılarak, yakla şık kök daha hassas biçimde belirlenir. y=x 3 +x 2 -5 e ğrisi55 MATLAB/Grafik-Basic Fitting Tool Bir mühendis, bir olayı gözler ve gözlem sonucunda elde etti ği ölçüler yoluyla olayı matematiksel e şitliklerle açıklamaya çalı şır. Böylesi e şitliklere, kısaca “model” adı verilir. Figure penceresinde yer alan “Tools” menüsü içindeki “Basic Fitting” seçene ği grafik üzerindeki x ve bunlara kar şılık gelen y de ğerlerini kullanarak, bunlara en iyi uyan y=f(x) polinomunu tanımlar. Böylece oldukça pratik bir biçimde model olu şturulur. Burada hatırlatılması gereken iki nokta vardır: (1) E ğer nokta çifti (x,y) sayısı uydurulan polinomun bilinmeyen sayısına e şitse, bulunan fonksiyon bir enterpolasyon polinomudur. (Not: n. dereceden bir polinomun n+1 adet bilinmeyeni oldu ğunu hatırlayınız: Örne ğin 4. dereceden bir polinom; y=ax 4 +bx 3 +cx 2 +dx+e dir ve bilinmeyen sayısı 5’dir) (2) E ğer nokta çifti sayısı, uydurulan polinomun bilinmeyen sayısından fazlaysa en uygun polinom bir “en küçük kareler” kestirim yöntemi sonucudur. y de ğerleri hatalı büyüklüklerse (yani ölçü ise), basic fitting ile uydurulacak polinomun bilinmeyen sayısı her zaman ölçü sayısından küçük olmalıdır!56 MATLAB/Grafik-Basic Fitting Tool f 5 10 15 20 t 2.57 2.23 2.13 2.09 Örnek: A şa ğıdaki tabloda f= 5, 10, 15 ve 20 de ğerlerine kar şılık t-da ğılımının ?=%5 güven sınırları (t, de ğerleri) verilmektedir. t=af 3 +bf 2 +cf+d polinomunu “basic fitting” özelli ğini kullanarak belirleyiniz. f=9 için t=2.26 oldu ğuna göre elde edilen enterpolasyon polinomun do ğrulu ğunu test ediniz. Çözüm: x=[5;10;15;20] ve y=[2.57;2.23;2.13;2.09] olsun. plot(x,y) ile ilgili e ğri çizilir. Figure penceresindeki “Tools” menüsünden, “Basic Fitting” seçene ği seçilir. Açılan, “Basic Fitting” penceresinden ilgili polinom (burada, cubic, yani 3.derece) ve ardından, “show equations” seçene ği i şaretlenir. Şekil üzerinde gösterilen f(x) e şitli ği, bize enterpolasyon polinomunu vermektedir. Bu denklemde, x=9 girilirse, y=2.24 de ğeri elde edilir. f=9 için t=2.26 oldu ğu bilindi ğine göre, enterpolasyon polinomumuzun do ğrulu ğu-bu aralık için-%2’dir.57 MATLAB/Grafik-Basic Fitting Tool x012345 y 10.06 9.36 16.69 22.28 25.44 27.75 Örnek: A şa ğıdaki tabloda, x zamanlarına kar şılık y ölçüleri elde edilmi ştir. Ölçülere en iyi uyan y=a+bx do ğrusunu belirleyiniz (En küçük kareler kestirim yöntemi) Çözüm: Tablodaki de ğerler x ve y vektörlerine atanır. plot(x,y,'o')ile ilgili e ğri çizilir. Basic Fitting penceresinde, “linear”, “show equation”, “plot residuals” seçenekleri i şaretlendi ğinde, a şa ğıdaki grafik olu şturulur. Ölçülerin, belirlenen do ğru denkleminden sapmasını (düzeltmeleri- residuals) gösterir. En küçük kareler yöntemine göre belirlenen en uygun do ğru denklemi (model) * * Demirel H (2005), Dengeleme Hesabı Ders Notları, YTÜ, İstanbul58 MATLAB/Grafik-Çubuk (bar) ve stem grafi ği Matlab’de farklı gösterimlere göre çizim yapmak mümkündür. Bunlardan ikisi bar(…) ve stem(…) çizim fonksiyonlarıdır. Örnek: x=[5;10;100;20;2] vektör elemanlarının bar ve stem grafik olarak göstermek isteyelim. bar(x) ve stem(x) a şa ğıdaki grafikleri çizdirecektir. Bar grafi ği Stem grafi ği59 MATLAB/Grafik-Histogram Ölçülerin hangi istatistiksel da ğılıma uydu ğunu görebilmek için, frekans (sıklık) de ğerleri hesaplanır ve histogram grafikleri çizilir. Elimizde, aynı da ğılımda oldu ğu bilinen bir x ölçü vektörü varsa, hist(x) fonksiyonu otomatik olarak bir histogram grafi ği çizer. Örne ğin, x=randn(100,1)*3 biçiminde normal da ğılmı ş bir ölçü grubu üretelim. hist(x) ile a şa ğıdaki histogram grafi ği olu şturulur (Her bir barın üst noktası birle ştirildi ğinde olu şan e ğrinin bir normal da ğılım e ğrisi veya di ğer adıyla çan e ğrisi biçiminde oldu ğu görülecektir.) Sıklık x60 MATLAB/Grafik-Vektör çizimi x ve y koordinat de ğerlerine sahip bir noktanın dx ve dy kadar yer de ği ştirdi ği dü şünülsün. Bu noktadaki (dx,dy) vektörünü çizdirmek istedi ğimizde, quiver fonksiyonu kullanılır. Örne ğin, bir jeodezik dik koordinat sisteminde iki noktanın koordinatları x=[1000;2000], y=[5000;1000] vektörleri, bu noktadaki de ği şimler ise dx=[1;2] ve dy=[-0.5;0.8] ile tanımlansın. quiver(y,x,dy,dx) (Not: Bir jeodezik dik koordinat sisteminde x ve y’nin yer de ği ştirdi ğini hatırlayınız!) komutu ile bir jeodezik dik koordinat sisteminde vektör çizimi gerçekle ştirilir. Vektörleri ölçeklendirmek için, s ölçek faktörü quiver fonksiyonuna be şinci bir de ği şken olarak eklenmelidir; quiver(y,x,dy,dx,s)61 MATLAB/Grafik-Kanava Çizimi Bir jeodezik dik koordinat sistemindeki x ve y koordinatları verilen jeodezik noktaları, nokta sembolleri üçgen olacak biçimde çizdiriniz. plot(y,x,'^') axis([200 1700 200 1500]) axis equal Nokta P1 P2 P3 P4 x (m) 500.00 550.00 1000.00 1200.00 y (m) 500.00 750.00 1500.00 800.00 axis([Xmin Xmax Ymin Ymax]) fonksiyonu, eksenlerin en küçük ve en büyük de ğerlerini ayarlar, axis equal ise x ve y eksenlerindeki ölçek faktörünü (büyüme ve küçülme oranlarını) e şitler.62 MATLAB/Grafik- İnterpolasyon x ve y koordinatları bilinen noktalara ili şkin üçüncü bir bilgi (örne ğin, yükseklik, yükseklik de ği şimi, sıcaklık, nem, basınç, gelgit deformasyonu, anomali vb.) oldu ğunda, noktaların çevreledi ği alanın içindeki hayali noktalar için bu bilgiler, çe şitli matematiksel yakla şımlarla üretilebilir: Bu i şleme, kısaca, interpolasyon denir. Böylesi hayali noktalar, alanın içindeki belirli büyüklükteki kareler a ğının kö şe noktaları olabilir. Bu noktalara grid noktaları denir. Matlab’de, sonraki interpolasyon i şlemlerinde kullanılmak üzere, meshgrid fonksiyonu ile bu noktaların x-y koordinatları belirlenir. Öncelikle, x ve y eksenleri, söz konusu karenin kenar büyüklü ğü kadar parçalara ayrılır. Örne ğin, kenar büyüklü ğü 10 m olsun: Böylece eksenler a şa ğıdaki biçimde 10 m’lik parçalara bölünür; x1=xmin:10:xmax; y1=ymin:10:ymax Daha sonra, [XI, YI]=meshgrid(x1,y1)ile gridlerin kö şe nokta koordinatları XI ve YI matrislerine yazdırılır. HI=griddata(y,x,H,YI,XI,'v4') fonksiyonu ile x ve y koordinatlarına sahip jeodezik noktalardaki üçüncü bilginin toplandı ğı H, koordinatları XI ve YI’da tanımlanmı ş grid noktaları için v4 yöntemiyle interpole edilir; grid noktalarına ili şkin üçüncü bilgi HI vektöründe toplanır. (Not: v4 yönteminden ba şka, cubic, linear gibi interpolasyon yöntemleri de bulunur)63 MATLAB/Grafik- İnterpolasyon Örnek: Nokta koordinatları, x=[1000;1200;4000;1000], y=[1500; 2000;3000;3500] ile ve bu noktaların yükseklikleri, H=[100.0000;95.9850;50.5000;140.1200] ile tanımlansın. Bölgeyi 10 m’lik gridlere bölerek, bölgenin yükseklik de ğerlerini gösteren bir renk haritası hazırlayınız. clear,clc x=[1000;1200;4000;1000]; y=[1500;2000;3000;3500]; H=[100.0000;95.9850;50.5000;140.1200]; x1=1000:10:4500; y1=1500:10:4000; [XI,YI]=meshgrid(x1,y1); HI=griddata(y,x,H,YI,XI,'v4'); hold on, pcolor(YI,XI,HI), shading interp colormap('jet') plot(y,x,'o','MarkerFacecolor','b') hold off Not: v4 interpolasyonu yerine, di ğer interpolasyon yöntemlerini kullanarak aradaki farkları irdeleyiniz.64 MATLAB/Grafik-Contour Haritası ve 3B Çizim Contour (örne ğin, e ş yükselti e ğrileri) haritası için contour ve clabel fonksiyonlarına, Üç boyutlu yüzey çizimleri için mesh, surf, surfl ve surfc fonksiyonlarına bakınız. surfc fonksiyonu ile olu şturulmu ş bir yüzey grafi ği65 MATLAB/Dosya Yazdırma-Okuma Program sonuçlarının otomatik olarak farklı bir dosyaya yazdırılması veya bir dosyadaki bilgilerin okunarak program içerisinde kullanılması, programcılıkta oldukça sık ba şvurulan çıktı alma ve veri giri şi yöntemleridir. Dosya yazdırma, çıktı almaya; Dosya okuma ise veri giri şine kar şılık olan i şlemlerdir. Matlab’de dosya yazdırma, en basit biçimde, diary komutuyla gerçekle ştirilir. Kullanımı ise a şa ğıdaki biçimdedir; a=10; diary sonuc.txt disp('-----------------') disp(a) diary end İki diary komutu arasındaki “command window” da yazdırılacak her türlü bilgi, sonuc.txt dosyasına yazdırılır. sonuc.txt dosyası, mevcut klasörün içinde olu şturulur, Örnekteki, sonuc.txt dosyası yerine ba şka dosya tür ve isimleri kullanılabilir. Yazdırılacak olan dosya, daha önce olu şturulmu ş bir dosya ise, çıktı dosyanın içindeki metinin altına yazdırılır.66 MATLAB/Dosya Yazdırma-Okuma Daha geli şmi ş dosya yazdırma, fopen, fprintf ve fclose fonksiyonlarının kullanımı ile gerçekle ştirilir. Bu fonksiyonlar ile dosya yazdırmada, yazdırılacak olan metnin “command window” da gösterilmesine gerek yoktur. fopen, program çıktılarının yazdırılaca ğı dosyayı açar, fprintf yazdırır ve fclose ise yazdırma i şlemini sonlandırır. Örne ğin, bir a kenarı programda hesaplatılmı ş olsun. Bu programın a çıktısını, kenar.txt isimli bir dosyaya yazdırmak için, a şa ğıdaki kodlar dü şünülür; a=150.0234234; fid=fopen('kenar.txt','w'); fprintf(fid,'%s%1.4f','kenar uzunlugu=',a); fclose(fid); w bu dosyanın üzerine yazılaca ğını gösterir. (a “mevcut metnin altına yaz” demektir) 67 MATLAB/Dosya Yazdırma-Okuma Örnek: a=[3.12356 4.12456 1;5.8463 6.45111 2;4 5 6] biçiminde verilen bir a matrisini, elemanları virgülden sonra 4 hane olacak biçimde, mat.out dosyasına yazdıran bir program yazınız. a=[3.12356 4.12456 1;5.8463 6.45111 2;4 5 6] fid = fopen('mat.out','w'); fprintf(fid,'%1.4f%10.4f%10.4f\n',a); fclose(fid); Örnek: kenar=1500.123 m ve aciklik=103.3367 grad olan de ği şkenleri, sonuc.out dosyasına alt alta yazdırınız. kenar=1500.123; aciklik=103.3367; fid=fopen('sonuc.out','w') fprintf(fid,'%s%1.3f%s\r\n','kenar=',kenar,' m'); fprintf(fid,'%s%1.4f%s','aciklik=',aciklik,' grad'); fclose(fid)68 MATLAB/Dosya Yazdırma-Okuma Matlab’de dosyaların içindeki metnin okunması için textread fonksiyonu bulunmaktadır. Örne ğin, a şa ğıda koordinat.txt dosyasındaki verilerin okunması istensin: P1 1000.1234 1300.23423 P2 1300.5673 1450.98563 P3 2000.1500 2000.11000 P4 3500.3100 1000.12000 Nokta isimleri x koordinatları y koordinatları Bunun için, [nokta,x,y]=textread('koordinat.txt','%s%f%f') fonksiyonu kullanılır. nokta, nokta isimlerini içeren bir hücre dizisi; x, x koordinat vektörü ve y, y koordinat vektörü olarak atanır.69 MATLAB/Dosya Yazdırma-Okuma Örnek: Koordinat dosyası, a şa ğıdaki gibi olan bir koordinat.txt dosyasından, nokta isimlerini, x ve y koordinatlarını textread fonksiyonu kullanarak uygun de ği şkenlere atayınız. Nirengi koordinatları NN x(m) y(m) P1 1000.1234 1300.23423 P2 1300.5673 1450.98563 P3 2000.1500 2000.11000 P4 3500.3100 1000.12000 [nokta,x,y]=textread('koordinat.txt','%s%f%f','headerlines',2) 'headerlines‘ komutu ve ardından gelen sayı, dosyanın ba şlangıcından itibaren kaç tane satırın dikkate alınmayaca ğını gösterir. koordinat.txt dosyasında ilk iki satır alınmadan nokta isimleri, x ve y koordinatları okunmu ştur.70 MATLAB/Fonksiyon Dosyası Olu şturma Matlab fonksiyonları (örne ğin, inv, disp, num2str,det, textread…) kullanıcının bir ba şka programa gerek duymaksızın temel i şlemleri kolayca yapabilmesini sa ğlar. Kullanıcılar kendi fonksiyonlarını geli ştirebilirler. Fonksiyonlar, bir m-dosyası biçiminde saklanır ve bu dosyalara, fonksiyon dosyaları adı verilir. Fonksiyon olu şturmanın iki önemli getirisi vardır: Sürekli olarak uygulanan bir i şlem için kod tekrarını önler (örne ğin, açıklık açısı için yazılmı ş bir fonksiyon aciklik ise, programın ilgili yerinde “aciklik(X1,Y1,X2,Y2)” fonksiyonu (1-2) veya (2-1) aciklik acisini do ğrudan üretecektir. Fonksiyonlarda kullanılan de ği şkenler yereldir (local variables). Yani workspace içinde di ğer program türlerinin de ği şkenleri (global variables) gibi yer i şgal etmezler.71 MATLAB/Fonksiyon Dosyası Olu şturma Örnek: Koordinatları bilinen iki nokta arasındaki yatay uzunlu ğu hesaplayan kenar isimli bir fonksiyon olu şturunuz. Fonksiyonların, biçim olarak, di ğer programlardan tek farkı, function output=fonk_ismi(input) ile ba şlaması ve fonksiyon dosyasının sonunda end ile bitmesidir. function komutunun bulundu ğu ilk satırdan hemen sonra gelen açıklama (comment) satırları, ilgili fonksiyonun “yardım” metinleridir. Fonksiyon ismiyle, fonksiyon dosyasının ismi aynı olmalıdır.72 MATLAB/Fonksiyon Dosyası Olu şturma Örnek: Hem açıklık açısını hem de kenar uzunlu ğunu üreten aci_kenar isimli bir fonksiyon olu şturunuz. Bir fonksiyonun birden fazla çıktısı olabilir. Bu örnekte a ve S gibi iki çıktı bulunmaktadır. a, açıklık açısını, S ise kenar uzunlu ğunu göstermektedir. aci_kenar(X1,Y1,X2,Y2) komutuyla, ilk output, yani açıklık açısını belirten a de ği şkeni üretilir.Matlab Hızlı Eri şim Kılavuzu Temel Komutlar help y Bir y fonksiyonu için yardım clear Atanan tüm de ği şkenlerin silinmesi clear x Bir x de ği şkeninin silinmesi pwd Çalı şma klasörü yolu demo Matlab demo penceresi save Matris kaydetme load Matris geri ça ğırma clc Çalı şma penceresinin temizlenmesi Matematiksel Operatörler + Toplama - Çıkarma * Çarpma / Bölme ^ Üst alma .* Elemanter çarpım ./ Elemanter bölme .^ Elemanter üst alma sqrt Kök alma abs Mutlak de ğer Mantıksal Operatörler & Ve | Veya ~ De ğil / Bölme Karar Operatörleri > Büyüktür < Küçüktür >= Büyük e şittir <= Küçük e şittir == E şittir ~= E şit de ğildir Semboller % Açıklama getirme ifadesi [ ] Matris girme ifadesi ( ) İndis ve de ğer girme ifadesi = De ği şken atama ifadesi ; Matrislerde satır ayıracı. Ayrıca, içinde "=" bulunan bir i şlemin gösterilmemesi : Kolon ifadesi ans De ği şken atanmamı ş en son i şlem için varsayılan de ği şken ismi (answer) { } Hücre dizisi x.adi x yapı dizisi Sabit terimler pi ? sayısı eps 2.2204e-016 sayısı inf Sonsuz (belirsiz) ifadesi Trigonometrik Fonksiyonlar sin,cos,tan,cot Trig. Fonksiyonlar asin,acos,atan,acot Ters Trig. ifadeler Logaritmik Fonksiyonlar log Do ğal logaritma exp Eksponansiyel Lineer Cebir Fonksiyonları det(x) Bir x matrisinin determinantı inv(x) Bir x matrisinin tersi trace(x) Bir x matrisinin izi diag(x) Bir x matrisinin kö şegen elemanları diag(y) Kö şegenleri, bir y vektörünün elemanları olan kö şegen matris zeros Sıfır matris ones Birler matrisi eye Birim matris eig Özde ğer ve özvektör bulma 1Matlab Hızlı Eri şim Kılavuzu Yazdırma Fonksiyonları fprintf Bir ifadenin yazdırılması sprintf Bir ifadenin bir karakter dizisine atanması disp Bir ifadenin ekran çıktısı olarak gösterilmesi Karakter dizisi fonksiyonları num2str(x) Bir x sayısını bir karaktere atama str2num(x) Karakter olan bir x sayısını sayı de ğerine atama char(a) a hücresini bir karaktere atama char(s1,s2,…) s1,s2,… karakterlerinden yeni bir karakter dizisi olu şturma lower(s) Bir s karakter dizisinin tüm elemanlarını küçük harf yapma upper(s) Bir s karakter dizisinin tüm elemanlarını büyük harf yapma isnumeric Bir de ği şkenin sayı olup olmadı ğını sorgulama ischar Bir de ği şkenin karakter olup olmadı ğını sorgulama iscell Bir de ği şkenin hücre olup olmadı ğını sorgulama Hazır GUI'ler msgbox İleti penceresi inputdlg De ğer girme penceresi questdlg Soru diyalog penceresi uigetfile Open file diyalog penceresi uigetdir Open directory diyalog pen. Uiputfile Save file diyalog penceresi Sayı yuvarlatma fonksiyonları fix Sıfıra yuvarlatma floor Negatif sonsuza yuvarlatma ceil Pozitif sonsuza yuvarlatma round En yakın tam sayıya yuvarlatma Bazı matematiksel fonksiyonlar sum(x) Bir x vektör elemanlarının toplamı diff(x) Bir x vektör elemanlarının ardı şık farklandırılması mean(x) Bir x vektör elemanlarının ortalaması median(x) Bir x vektör elemanlarının orta de ğeri (medyanı) sort(x) Bir x vektör elemanlarının küçükten büyü ğe sıralanması max,min En büyük ve en küçük de ğer bulma sortrows İlgili sütuna göre küçükten büyüğe sıralama Programlama if/end E ğer ko şulu for/next Döngü while/end while döngüsü input De ği şken girdirme Çizim plot 2 boyutlu grafik plot3 3 boyutlu grafik hist,bar Histogram ve bar grafikleri surf,mesh Yüzey grafikleri figure Çizim penceresi olu şturma ( İki veya daha fazla sayıdaki grafikleri ayrı pencerelerde göstermek için) hold on, hold off Farklı grafikleri aynı eksen takımında çizdirme komutları axis Eksen komutu axis equal Eksenleri e şit ölçek katsayısı ile ölçeklendirme stem Çubuk grafik plotyy Çift y eksenli grafik errorbar Hata bar grafi ği 2