MATLAB İLE PROGRAMLAMAYA GİRİŞ Nedim TUTKUN Elektrik Elektronik Mühendisliği Bölümü nedimtutkun@gmail.com 1
3. Hafta Ders İçeriği M Dosyası Oluşturma Fonksiyon Yazma
Fonksiyonlar ve Alt Programlar MATLAB bir çok hazır fonksiyon içermektedir (sqrt, sum vb.) Fonksiyonları oluşturan kodlar yerine bu fonksiyonları çağıran komutlar kullanılmaktadır. Yazdığınız programda bir dizi MATLAB komutu sıklıkla tekrar ediyorsa, bu komutların fonksiyon yapısı altında bir araya getirilip bir isim verilerek kullanılması daha uygundur. 3
M-Dosya Yapısı Senaryo dosyaları (scriptfile) özel görevlerin yerine getirilmesi için gerekli olan MATLAB komutlarının saklandığı metin dosyalarıdır. Belirli bir hesaplamayı gerçekleştirmek için komut penceresinden çok sayıda komut yazmak yerine komutlar script dosyasında saklanır ve daha sonra bu dosya çalıştırılarak komutlar yerine getirilir. Bu dosyalar MATLAB ın çalıştığı dizinde "*.m" dosya uzantısıyla kayıt edilmelidir. M-dosyalarının oluşturulması ve düzenlenmesi için MATLAB metin editörü arabirimi (text editor) ya da Windows Notepad gibi metin düzenleme yazılımı da kullanılabilir. MATLAB metin hazırlayıcısı ya komut penceresinin üst kısmında yer alan NewM-file düğmesi tıklanır ya da File menüsünden New/Mfile komutu seçerek etkin hale getirilebilir. 4
5
Neden M-Dosyalarına İhtiyaç Duyuyoruz? Değişken sayısının fazla olması Akış diyagramlarının uygulanmasında Programda gerekli değişikliklerin kolayca yapılmasında M-Dosyalarının Kullanılmasında Dikkat Edilecek Hususlar M-dosyası çalışma klasörü olarak tanımlanan klasörde bulunmalıdır. MATLAB in Çalışma Dizini (CurrentFolder) altında "DosyaAdi.m" şeklinde saklanmaları gerekir. M-dosyasına isim verilirken kesinlikle Türkçe karakter kullanılmamalıdır. M-dosyasına isim verilirken MATLAB in hazır komutları (pi, exp, sin ve vs.) verilmemelidir. 6
Alt Programlar Alt programları fonksiyonlardan ayıran en önemli özelliği, çağıran programa, parametre listesindeki değişkenler aracılığıyla birden çok sonuç değeri gönderebilmeleri ve bağımsız bir komut ile çalıştırılmalarıdır. Alt programlar, başka bir prosedür içinden Call komutu ile çağrılırlar. 7
M-fonksiyon yapısı function cikis_ifadesi1, 2,, n =fonksiyon_adi (giris_ifadesi1, 2, n) M-Fonksiyonlar kullanılırken dikkat edilecek hususlar: 1- Kullanıcılar kendi fonksiyonlarını yazmak için m-fonksiyonlarını kullanabilirler. 2- Function alt programı ve ana program şeklinde iki program yazılarak bu iki program ayrı ayrı kaydedilir. 3- Alt programdaki fonksiyon_adı, m-dosyasına verilen isimle aynı olmalıdır. 4- Ana programdan alt program, function adı kullanılarak çağrılır. 5- Alt programdan da ana programa geçiş yapılabilir fakat genelde tercih edileni tersidir. 6- Parametre aktarımı olması durumunda alt ve ana programda eşit sayıda parametre ve giriş değişkeni olmalıdır. 8
function cikis_ifadesi1, 2,, n =fonksiyon_adi (giris_ifadesi1, 2, n) Örnek: İki nokta arasındaki uzaklığı bulan programı m-fonksiyon (alt program) kullanarak yazınız. x1=1.noktanın x koordinati; x2=2.noktanın x koordinati y1=1.noktanın y koordinati; y2=2.noktanın y koordinati FUNCTION ALT PROGRAMI (uzak.m): function uzaklik = uzak(x1,y1,x2,y2) uzaklik=sqrt((x2-x1).^2+(y2-y1).^2); Bu function alt programı uzak.m olarak kaydedilir. ANA PROGRAM: ax=3; ay=4; bx=1; by=2; sonuc = uzak(ax,ay,bx,by); % uzak.m alt programını çağırıyor fprintf( iki nokta arasindaki uzaklık=%f,uzaklik); 9
Adım adım gerçekleştirilen işlemler: Ana program herhangi bir isimle kaydedilip çalıştırılır. Program, function adına geldiğinde alt program çağrılır ve ax, ay, bx, by parametreleri sırasıyla x1, y1, x2, y2 giriş değişkenlerine aktarılır. Function alt programında hesaplama gerçekleştirilir. Function daki çıkış değişkeni olan uzaklik ana programda sonuc değişkeninde saklanır. Alt programdan ana programa parametre aktarımı zorunlu değildir. İstenirse değişkenlerin değerleri alt programda da girilebilir ve sonuç alt programda yazdırılabilir. 10
Uygulama: Yukarıdaki örneği ana programdan alt programa parameter aktarımı yapmadan yeniden yazınız. (Değişkenlerin girilmesi, sonucu hesaplama ve yazdırma işlemi alt programda yapılacaktır) FUNCTION ALT PROGRAMI: function uzaklik = uzak x1=3; y1=4; x2=1; y2=2; uzaklik=sqrt((x2-x1).^2+(y2-y1).^2); fprintf( iki nokta arasindaki uzaklık=%f, uzaklik); ANA PROGRAM: uzak; % uzak.m alt programını çağırıyor 11
Alt Programdan Ana Programın Çağrılması Örnek: a, b ve c değişkenlerinin alt programda girilmek suretiyle alt programdan ana programın çağrılmasına dair örnek (Sık kullanılmaz) function sonuc = sonuckiyasla a=input( a = ) ; b=input( b= ) ; c=input( c= ); d=a*b; e=a*c; f=b*c; Alt program (sonuckiyasla.m) kiyasla % kiyasla.m ana programını çağırır 12
MATLAB Bilgilerinin Saklanması Yapılan çalışmaları saklamak için diary, save as komutları, bilgisayar ortamında saklı bir bilgiyi çağırmak için ise load ve import data komutları kullanılır. Komut diary (dosya adı) diary off diary on Açıklama MATLAB ortamında o anda bulunan tüm text leri (>> işaretleri hariç) belirtilen dosyaya (bu dosyanın adı diary komutundan sonra yazılır) kaydeder. Eğer dosya adı belirtilmez ise dosya adı diary olarak kaydedilir. diary işlemini askıya alır. diary işlemine geri döner. 13
diary komutu diary off komutu kullanılmaz ise komut penceresinde kullanılan her satır yamuk_alan.m adlı dosyaya kaydedilmeye devam edecektir. yamuk_alan.m adlı dosya tekrar görüntülenmek istenirse type komutu kullanılır. 14
save komutu save komutundan sonra dosya adı ve boşluk bırakılarak saklanacak değişken adları sırası ile yazılır ve.mat dosya uzantısı ile kayıt edilir. 15
save as komutu 16
Import Data komutu ile MATLAB dosyalarının okunması 17
MATLAB de Vektör ve Matris Gösterimi MATLAB ortamında her değişken ya bir vektör yada bir matristir. Örneğin a=2 yazıldığında, a sayısı MATLAB arka planında 1 1 boyutunda bir matris olarak saklanır. Eğer söz konusu bir sayı değil de sayı dizisi ise satır veya sütun vektörü olarak saklanır. 18
(:) operatörü kullanarak vektör elde edilmesi başlangıç değeri:artış değeri:son değer [başlangıç değeri:artış değeri:son değer] 19
Mevcut bir vektörün elemanlarını kullanarak başka vektör elde edilmesi B vektörünün elemanları; A nın 3 numaralı elemanından 1 er artış ile 7 numaralı elemana kadar yazılması ile elde edilmektedir. linspace komutu kullanarak vektör üretilmesi artış = son değer başlangıç değeri toplam sayı 1 artış= 11 0 9 1 =1.375 20
Özel Vektör Yapıları zeros(1,n) : Tüm elemanları sıfır olan n elemanlı satır vektör. ones(1,n) : Tüm elemanları bir olan n elemanlı satır vektör. eye(n,n) rand(1,n) : n elemanlı birim matris. : 0 ile 1 arasında üniform rastgele üretilmiş n elemanlı vektör randn(1,n) : Ortalaması 0 ve standart sapması 1 olan normal dağılımlı üretilmiş n elemanlı vektör. «21
prod komutu prod(x) : Vektörün elemanlarını birbiriyle çarpar 22
sign komutu sign(x) : Vektörün pozitif elemanlarını 1, negatif elemanları için -1, 0 olan elemanları için 0 sonucunu verir. «23
fix komutu fix(y) : Sıfıra doğru yuvarlama işlemi yapar. «24
floor, ceil, round ve sort komutları floor(y) : sonsuza doğru yuvarlama işlemi yapar. ceil(y) : + sonsuza doğru yuvarlama yapar. round : Kendisine en yakın sayıya yuvarlama işlemi Sort : Vektörün elemanlarını küçükten büyüğe sıralar. «25
Vektör ve Matris Transpozesi Matlab da bir vektörün tranzpozesini alma işlemi satır ve sütunların yer değiştirmesi durumudur. Yani satır vektör olarak tanımlanmış bir x vektörü x ifadesi ile sütun vektöre çevrilmiş olur. xt=x 26
Yararlanılan Kaynaklar İ. Kaymaz, Bilgisayar Programlama MATLAB, Ders Notları, Erzurum, 2010. B. R. Hunt, R. L. Lipsman, J. M. Rosenberg, A Guide to MATLAB for Beginners and Experienced Users. U. Arifoğlu, MATLAB 9.1 Simulink ve Mühendislik Uygulamaları, 1. baskı, 2016. M. Coşar, MATLAB, Ders Notları, Çorum. A. Dumlu, Bilgisayar Programlama, Ders Notları, Erzurum. 27