MATLAB Bilgisayar Programlama Yrd.Doç. Dr. Aslıhan KURNUÇ Erzincan Üniversitesi Mühendislik Fakültesi Makine Mühendisliği Bölümü
MATLAB’DE DEYİMLER VE BİLEŞENLERİ MATLAB komut penceresinden doğrudan çalıştırılabilen ya da bir MATLAB dosyası içerisine kaydedilebilen ve MATLAB tarafından yorumlanabilen her şey MATLAB deyimidir. MATLAB deyimleri değişkenler, rakamlar, operatörler ve fonksiyonlar kullanılarak oluşturulurlar. Değişkenler: Deyimler içerisinde sayısal değerlerin yerini alan ifadelerdir. MATLAB bir değişken ile karşı karşıya geldiğinde, otomatik olarak bu değişken oluşturulur ve yeteri kadar bellek ayrılır. Eğer değişken daha önceden tanımlı ise MATLAB onun içeriğini değiştirir ve gerekirse yeni bellek ayırır. Örneğin, >> x=50 komut satırından işletildiğinde MATLAB “x” adında bir değişken oluşturur ve 50 değerini bu değişkene atar. Diğer bilgisayar dillerinde olduğu gibi MATLAB’in de değişken isimleri konusunda bazı kuralları vardır.
Değişken Tanımlama Kuralları 1. Değişken isimleri daima bir harf ile başlamalıdır. İlk harfi başka harfler, rakamlar ve alt çizgiler ( _ ) izleyebilir. Örneğin 1sayi uygun bir değişken ismi değilken, sayi_1 kullanılabilir bir değişken adıdır. 2. Değişken isimleri noktalama işaretleri ve boşluk(lar) barındırmamalıdır. sayi.1 veya sayi 2 (2 den önceki boşluğa dikkat) şeklinde tanımlanan değişken adları bu kural ihlaline 2 güzel örnektir. 3. Değişken isimleri içerisinde Türkçemize özgü küçük veya büyük “ç, ğ, ı, ö, ş, ü” karakterleri kullanılmamalıdır. 4. Değişken isimlerinin küçük ve büyük harf kullanımına duyarlı olduğu unutulmamalıdır. orta, Orta, ORTA veya orTa adlı değişkenler MATLAB için farklı değişkenlerdir. 5. Değişken isimleri en fazla 63 karakter içerebilir ve bundan fazlası MATLAB tarafından dikkate alınmaz.
DEĞİŞKENLERİN İSİMLENDİRİLMESİ Değişkenler ve daha sonraki bölümlerde göreceğimiz fonksiyonlar muhakkak kullanım amaçları dikkate alınarak ve anlamlı bir şekilde isimlendirilmelidirler. Örneğin kullanıcıdan klavye yoluyla alınacak ve ortalamaları hesaplanacak üç sayı a, b, c veya x, y, z gibi jenerik değişken isimleriyle değil sayi1, sayi2 ve sayi3 gibi anlamlı isimlerle temsil edilmelidir. Bir zorunluluk olmasa bile yazılan bir programın anlaşılabilirliğini artırmak adına değişkenler ve fonksiyonlar adlandırılırken bazı notasyonlardan faydalanılır.
DEVE VE PASKAL NOTASYONLARI Değişken tanımlamalarında Deve Notasyonundan (Camel Notation) ve dosya isimlendirmelerinde (düzyazı ve fonksiyon m-dosyaları) Paskal Notasyonundan (Pascal Notation) faydalanılabilir. Deve Notasyonu değişken adı birden fazla kelime içeriyorsa ilk kelime hariç diğer bütün kelimelerin ilk karakterlerinin büyük harfle yazıldığı bir notasyondur. Değişken isimlerine birkaç örnek olarak sayi1, enKucuk, bankaHesapNo ve basamakSayisi verilebilir. Paskal Notasyonunun Deve Notasyonundan tek farkı dosya adını oluşturan ilk kelimenin ilk karakterinin de büyük harfle yazılıyor olmasıdır. Dosya isimlerine örnek olarak AsalSayiMi.m, OrtalamayiHesapla.m ve ToplayarakCarpma.m verilebilir. .m, daha sonra da öğreneceğimiz üzere MATLAB programlama dosyalarının uzantısıdır.
Rakamlar MATLAB’de negatif bir sayıyı temsil için o sayının önünde eksi (-) işareti vardır. Bir sayının önüne artı (+) işareti koyulması veya hiçbir işaret koyulmaması o sayının pozitif olduğunun delilidir. Ondalıklı sayılarda ayraç olarak nokta (.) ve 10 sayısının kuvvetini temsilen e harfi kullanılır. Karmaşık sayıların sanal kısımları MATLAB’de son takı olarak i harfini kullanır. Bu bilgiler ışığında MATLAB yorumlayıcısının anlayacağı birkaç rakama örnek olarak 6, -175, 3.1416, 2.54e2, 7i veya 5+7i verilebilir.
Aritmetik Operatörler: MATLAB, deyimler içerisinde aşağıdaki aritmetik operatörleri ve öncelik kurallarını kullanır. İşlem Operatör Örnek Toplama, a+b + 2+3 Çıkarma, a-b - 5-2 Çarpma, a*b * 3*4 Bölme, a/b / 15/7 Üs alma, ab ^ 2^3 Parantez a*(b+c) ( ) 2*(3+5) Aritmetik Operatörlerin Öncelik Sıraları: Tek bir matematiksel deyim içinde birden fazla işlem bir arada bulunabildiğine göre hangi işlemin öncelik hakkına sahip olduğunun bilinmesi yerinde olacaktır. MATLAB’de işlemlerin öncelik listesi aşağıda verilmiştir. Öncelik İşlem 1. Parantez (İçten Dışa Doğru) 2. Üs Alma (Soldan Sağa Doğru) (2^2^3=???) 3. Çarpma ve Bölme (Soldan Sağa Doğru) 4. Toplama ve Çıkarma (Soldan Sağa Doğru)
MATLAB’in Kullanıma-Hazır Bazı Matematiksel Fonksiyonları
Örnekler: Uygulama : Matematiksel Yazılım MATLAB de Yazılım ab-c+d-6+da a*b-c+d-6+d*a b+c3-d/8-b2c b+c^3-d/8-b^2*c a=1, b=2, c=3, d=4, e=5, f=6 iken ??? 649 Uygulama : işlemini MATLAB dilinde kodlayınız.
MATLAB’ DE DEĞİŞKEN TÜRLERİ VE DEĞER ATAMALARI Herşey matris? MATLAB değişkenlerine değer olarak aşağıdakilerden herhangi birisi atanabilir: Matris Satır Vektörü Sütun Vektörü Karakter Dizisi (Katar) (String) Skaler
(İKİ BOYUTLU) MATRİSLERİN DEĞİŞKENLERE DEĞER OLARAK ATANMASI
(TEK BOYUTLU) SATIR VEKTÖRLERİNİN DEĞİŞKENLERE DEĞER OLARAK ATANMASI
(TEK BOYUTLU) SÜTUN VEKTÖRLERİNİN DEĞİŞKENLERE DEĞER OLARAK ATANMASI
KARAKTER DİZİLERİNİN DEĞİŞKENLERE DEĞER OLARAK ATANMASI
SKALERLERİN DEĞİŞKENLERE DEĞER OLARAK ATANMASI
ANS DEĞİŞKENİ
pi SABİTİ
Ondalıklı Sayı Formatı Bir işlemin sonucu, varsayılan (default) olarak 4 ondalık ile gösterilir. Ondalık hane sayısı format fonksiyonu ile değiştirilebilir. format veya format short: 4 ondalık format bank: 2 ondalık format long: 15 ondalık format rat: Ondalık sayıları rasyonel sayı olarak gösterir. UYGULAMA 1: >>a=22/5 i yukarıdaki formatlar için test ediniz. UYGULAMA 2: Ayrıca aşağıdaki komutlar dizisini çalıştırınız. >>format rat >>a=22/5 >>b=1/3 >>c=a+b >>format >>format >>pi >>format long
MATLAB PROGRAMLARINA KLAVYEDEN VERİ AKTARIMI "input" komutu yardımıyla bir MATLAB programı içerisinde değerlendirilmek üzere kullanıcıdan klavye yoluyla bir veri alınır ve bu veri bir değişkene atanır.
input KOMUTU İLE KLAVYEDEN SAYISAL VERİ TEMİNİ >> sayi1=input('Lutfen 1. Sayiyi Giriniz= ') Tek tırnaklar arasına nasıl bir bilgi girmesi gerektiği hususunda kullanıcıya verilecek uyarı mesajı yazılır. >> sayi1=input('8')
input KOMUTU İLE KLAVYEDEN METİNSEL VERİ TEMİNİ >> isim=input('Lutfen Isminizi Giriniz = ', 's' )
disp VE fprintf KOMUTLARI İLE EKRANA BİLGİ YAZDIRMA Bir önceki dersimizde input komutu ile klavye üzerinden MATLAB programlama ortamına nasıl veri aktarılacağını öğrendik. Bu dersimizde ise disp ve fprintf komutları yardımıyla ekrana nasıl bilgi yazdırılacağını öğreneceğiz.
disp KOMUTU İLE EKRANA METİN YAZDIRMA
disp KOMUTU İLE EKRANA SAYISAL DEĞER YAZDIRMA
disp KOMUTU İLE EKRANA METİNLERİ VE SAYISAL DEĞERLERİ BİRLİKTE YAZDIRMA MATLAB’in num2str fonksiyonu kendisine parametre olarak aldığı bir sayıyı bir karakter dizisine (string) çevirir. (22 sayısı '22' olur.)
fprintf KOMUTU İLE EKRANA BİLGİ YAZDIRMA fprintf('Ekrana Basılacak Açıklama %X \n', deger); Burada %X Kısmında Kullanabileceğimiz Seçenekler : %c : deger in tek bir karakter olduğunu gösterir. %s : deger in bir karakter dizisi (string) olduğunu gösterir. %d : deger in bir tamsayı olduğunu gösterir. %f : deger in bir ondalıklı sayı olduğunu gösterir. (.6) %g : deger i mümkün olan en kompakt forma sokar. Diğer yandan : \n : İmleci bir alt satırın başına götürür. (n, newline) \t : İmleci bir TAB kadar sağa kaydırır.
fprintf Kullanımına Örnekler
fprintf Kullanımına Örnekler >> fprintf('a değişkenine atanan değer= %f \n',a) a değişkenine atanan değer= 5.890000 >> fprintf('pi sayısı= %5.2f \n\n',pi) pi sayısı= 3.14 >> % ile f ifadelerinin arasına ondalık sayılar yazarak, sunulacak değerin gösterim biçimini değiştirebilmek mümkündür. Ondalık sayının tam kısmı, yani “5”, sunulacak ifadenin ne kadar boşluk bırakıldıktan sonra yazılacağını belirler. “2” ise, bu “pi” sayısının virgülden sonra iki basamak yazılarak gösterileceğini belirler. “\n\n” şeklindeki kullanım, prompt’un (>>) , 2 satır atlandıktan sonra gösterimini sağlar.
Aşağıdaki 2 Komut Aynı İşi Yapar disp('Üzgünüm! Sıfıra Bölüm Hatası Var.'); fprintf('Üzgünüm! Sıfıra Bölüm Hatası Var.\n');
disp ve fprintf ARASINDAKİ FARKLAR disp komutu ekrana çıktı verdikten sonra bir alt satıra otomatik olarak atlar. fprintf komutunu bir alt satıra götürebilmek için ise \n kullanılmalıdır. Ayrıca disp komutu satır veya sütun vektörleri ile matrisleri ekrana kolayca yazdırabilirken aynı işlemi fprintf ile yapabilmek daha çok işlem gerektirmektedir.
disp ve fprintf komutlarıyla ekrana yazdırılmak istenen metnin ’,% ve \ karakteri içerdiğini düşününüz. Söz konusu karakterlerin bu komutlar için özel anlamlar ifade ettiğini biliyoruz. Bu karakterlere kaçış (escape) karakterleri denir ve MATLAB’de bu karakterleri ekrana yazdırmak için bunlardan peş peşe iki adet kullanmak gerekir. >> fprintf('indirim oranı=%%30\n') indirim oranı=%30 >> oran=35; >> fprintf('nem oranı=%%%d\n',oran); nem oranı=%35
MATLAB komut penceresinde kontrolü kaybettiğinizde ( örneğin programınız sonsuz bir döngüye girdiyse ve bir türlü sonlanmıyorsa) kontrolü yeniden kazanabilmek için yani >> karakterlerini yeniden ekranda görebilmek için “ctrl+c” tuş kombinasyonundan faydalanabilirsiniz. >> while 1 disp('aslıhan'); end
MATLAB’DE PROGRAMLAMA MATLAB’de programlama genel olarak iki yolla yapılır: Komut satırında (inline) programlama m-dosyaları ile (m-files) programlama Düzyazı (script) m-dosyaları ile programlama Fonksiyon (function) m-dosyaları ile programlama m-dosyaları oluşturabilmek için ise bir metin düzenleyicisine (editor) ihtiyaç vardır.
Düzyazı M-Dosyaları ile Programlama Bir düzyazı (senaryo dosyası) (script file) özel bir görevi yerine getirmek için gerekli MATLAB komutlarının saklandığı bir metin dosyasıdır. Başka bir ifadeyle; bir hesaplamayı gerçekleştirmek için yazılacak birçok komut dizisi, komut penceresinden tek tek girmek yerine bir dosyada saklanır ve daha sonra bu dosya çalıştırılarak bu komutlar icra edilir. Bu dosyaların MATLAB’in Çalışma Dizini (Current Folder) altında "DosyaAdi.m" şeklinde saklanmaları gerekir. DOSYA ADLARI TÜRKÇE KARAKTERLER VE BOŞLUKLAR İÇERMEZLER.!!!!!!!! MATLAB DOSYALARI İSİMLENDİRİLİRKEN PASKAL NOTASYONUNDAN FAYDALANILIR. MATLAB programlama ortamı, m-dosyalarının oluşturulmasını kolaylaştıran akıllı bir metin düzenleyicisine (text editor) sahiptir. m-dosyaları Windows’un Notepad i gibi herhangi bir metin düzenleyicisi ile de yazılabilirler. Bir düzyazı m-dosyası oluşturmak için “Current Folder” penceresinde boş bir alana sağ tıklayıp “New File>Script” yolu takip edilmelidir.
Programı yazma işlemi bittikten sonra ve programı çalıştırmadan önce muhakkak kaydediniz.
Değişken ve dosya adlarının ilk birkaç karakterini yazdıktan sonra TAB tuşuna basarak MATLAB’in bu adları otomatik olarak tamamlamasını sağlayabilirsiniz.
İnput komutu ile kullanıcıdan klavye yoluyla aldığı 3 sayının aritmetik ortalamasını hesaplayan ve bu ortalamayı disp komutuyla ekrana basan bir MATLAB programını UcSayininAritmetikOrtalamasiniHesapla.m adındaki düzyazı m-dosyasının içerisine yazınız.
>> UcSayininAritmetikOrtalamasiniHesapla Lütfen 1. sayıyı giriniz: 2 Lütfen 2. sayıyı giriniz: 4 Lütfen 3. sayıyı giriniz: 6 Girilen 3 sayının aritmetik ortalaması: 4
Fahrenhayt=1.8*Santigrat+32 Fahrenhayt derece ile Santigrat derece arasındaki ilişki şu denklem ile verilir. Fahrenhayt=1.8*Santigrat+32 Bu formüle göre su 0 santigrat derecede (°C) veya 32 fahrenhayt derecede (°F) donar, benzer şekilde 100°C’de ya da 212°F’de kaynar. İnput komutu ile kullanıcıdan klavye yoluyla aldığı (°C) cinsinden bir sıcaklık değerini (°F) cinsinden sıcaklık değerine dönüştüren ve bu değeri fprinf komutuyla ekrana basan bir MATLAB programını SantigratiFahrenhaytaCevir.m adındaki düzyazı m-dosyasının içerisine yazınız.
Fahrenhayt=1.8*Santigrat+32 Fahrenhayt derece ile Santigrat derece arasındaki ilişki şu denklem ile verilir. Fahrenhayt=1.8*Santigrat+32 Bu formüle göre su 0 santigrat derecede (°C) veya 32 fahrenhayt derecede (°F) donar, benzer şekilde 100°C’de ya da 212°F’de kaynar. İnput komutu ile kullanıcıdan klavye yoluyla aldığı (°C) cinsinden bir sıcaklık değerini (°F) cinsinden sıcaklık değerine dönüştüren ve bu değeri fprinf komutuyla ekrana basan bir MATLAB programını SantigratiFahrenhaytaCevir.m adındaki düzyazı m-dosyasının içerisine yazınız.
>> SantigratiFahrenhaytaCevir Santigrat derece cinsinden sıcaklık? : 0 0 Santigrat derece, 32.000000 fahrenhayt derecedir.
>> SantigratiFahrenhaytaCevir Santigrat derece cinsinden sıcaklık? : 0 0 Santigrat derece, 32 fahrenhayt derecedir.
>> SantigratiFahrenhaytaCevir Santigrat derece cinsinden sıcaklık? : 0 0 Santigrat derece, 32 fahrenhayt derecedir. disp komutuyla aynı şeyi yazdırmayı deneyiniz.