google it!

18.02.2010

Matlab da ressamlık

               Merhaba Sevgili Arkadaşlar,

     Bu yazımı tamamen okuyup anladığınızda Matlab ın çizim özelliklerine hakim olacaksınız. Hemen başlayalım.

 Bazen elde ettiğiniz verilerin zamanla, frekansla, güçle ya da akım la ya da herhangi bir veri çeşidine bağlı olarak nasıl değiştiğini dünya gözü ile görmek istersiniz. Ya da görmek istersiniz ki acaba bir veri bir veriye bağlımıdır değilmidir? Bunları görmek isteyebilirsiniz yani insanlık hali. O zaman en çok kullanılan komutlardan biri plot() ile başlayalım.  plot(x,y) şeklinde bir komut y değişkeninin x değişkenine bağlı olarak nasıl değiştini gösteren bir figür çizdirir. Burada plot un içine yazdığınız ilk değişken x eksenini, virgül koyup yanına eklediğiniz değişken ise y eksenini temsil etmektedir.
        Yukarıda ki şekilde bir devre temsili olarak gösterilmiştir ve altında bu devreye ait 2 değişkenden oluşan çeşitli değerlerin olduğu bir tablo verilmiştir. Devreye uygulanan alternatif gerilimin genliği sabit kalırken, açısal frekansı ω (radians/second) 300 ile 3000 arasında 100 er 100 er artmaktadır ya da değişmektedir. Devredeki ampermetre ise her artışta bir ölçüm almaktadır. Devrenin empedansı Z nin genliğini hesaplamak için ise formülünü kullanıyoruz. Ancak biz hesaplama yapmayacağız, empedans verisi yukarıda ki tabloda zaten verilmiş. Şimdi o zaman plot() komutumuzu kullanarak empedans genliğinin ya da şiddetinin açısal frekansa bağlı olarak nasıl değiştiğini görelim. Aşağıda Matlab porogramı kullanılarak çözüm üretilmiştir. Görünüz;
                                          
  Şekilde görüldüğü gibi önce kodu yazıyoruz ve ardından enter tuşuna bastığımız da Matlab programı çalıştırıp görmek istediğimiz figure u önümüze çıkarttırıyor. Burada bahsetmek istediğim birkaç nokta var. Matlabda komut satırına (command window da) uzun bir dizi yazıyorsanız ve satırın sizin gördüğünüz kısmından çıkıp bilinmeyen uzaklara gittiğini hissediyorsanız ve buna engel olmak istiyorsanız yani alt satıra geçmek istiyorsanız bu işlemi 4 adet nokta (....) ile halledebilirsiniz. Şöyle oluyor;
                                                                           
Umarım ne demek istediğimi anlamışsınızdır. Birde sevgili arkadaşlar görüldüğü üzere açısal frekansımızı tanımlarken bir dizi oluşturduk. Ve 300 den 3000 e kadar artan değerlerimizi teker teker girdik. Sorarım size ne gerenk var? linspace() komutumuz varken buna ne gerenk var? linspace(x,y,z) şeklinde kullanılır. Eğer 2 değer arasında sabit bir artışla artan bir diziniz varsa bu komutu kullanabilirsiniz. Örneğin yukarıda ki tabloda açısal frekans 300 den başlıyor. x yerine 300 yazacaz. 3000 e kadar devam ediyor. y yerine 3000 yazacağız. ve 100 er 100 er artış miktarı hiç değişmeden artıyor. o zaman z yerine öyle bir değer yazmalıyız ki bu değer 300 ile 3000 arasını 100 er 100 er artan şekilde parçalasın. ufak bir hesap yaptığımızda 300 ile 3000 arasında 28 tane 100 ün katı olan sayı var. yani 300,400,500,600.... gibi. o zaman z yerinede 28 yazıyoruz. Görelim;

                                                            
  Ne kadar hoş değilmi? Bu komutu örneğimiz deki Z değerleri için kullanabilirmiyiz? hayır çünkü Z nin nasıl değiştiğini Z bile bilmiyor. Sabit bir artış yok Z de. linspace(x,y) şeklinde yani z yi eklemeden kullanırsanız x ve y aralığını 100 eşit aralıklı parçaya böler. Şimdi birde bu grid komutu var o da çizilen figure ü karelere ayırıyor, bölüyor yani. Yukarıda yazdığım komutta plot(w,z); den sonra birde grid; şeklinde ekleme yapıyorum. Birde öyle görelim figürü;
                                                     
 Çizdirdiğiniz şeklin üst kısmına başlık yazdırmak istiyorsanız title('başlık konusu') komutunu, aynı şekilde x eksenine ve y eksenine de birer isim koymak istiyorsanız sırasıyla xlabel('başlık konusu') ve ylabel('başlık konusu') komutlarını girmemiz gerekir. Bazı durumlarda çizdirdiğimiz şekil logaritmik ölçekli olarak değişir. Mesela bit hata olasılığı şekilleri. Bu durumda ise semilogy(x,y) komutunu kullanırız. Bu durumda y ekseni logaritmik olarak değişirken x ekseni lineer olarak değişir. Eğer x ekseni logaritmik ve y ekseni lineer olarak değişiyorsa semilogx(x,y) şeklinde kullanırız. Her iki ekseninde logaritmik olarak değişmesi durumunda ise loglog(x,y) komutunu kullanmamız gerekir. Bu arada logaritmaya ait fonksiyonları tanıtalım. Matlab da log(x) doğal logaritmayı yani e tabanında, log10(x) 10 tabanında, log2(x) ise 2 tabanında logaritma almayı temsil eder. Logaritması alınacak değeri x kısmına yazıp enter tuşuna bastıkmıydı herşey yoluna girer. Öğrendiğimiz komutlarla örnek tablomuzdaki değerleri bir de şu şekilde çözdirelim.
                                     
  Gördüğünüz gibi semilogx komutuyla x eksenini logaritmik olarak ölçeklendirdik ve grid fonksiyonu ile şekle bakınca daha iyi anlayabilmek için şekli logaritmik olarak parça pinçik ettik. title ile şekle başlık verdik, xlabel ve ylabel ile x ve y eksenine hayat verdik. Matlab da birde DB(x) komutu vardır. Bu komutta x değerini ya da x dizisi içerisindeki değerleri dB karşılıklarına dönüştürür. Bu komutun algoritması şu şekildedir: dB=20*log10(x) . Bir diğer ilginç komut ise gtext('açıklama') komutudur. Anlatması biraz karışık. Açıklama kısmına bişeler yazın deneyin derim. Güzel bişi ama mutlaka deneyin. Diyelimki çizdirdiğimiz şekil üzerinde x=3, y=5 noktasında bişiler yazsın. Bunu da text(3,5,’bişiler’) şeklinde yapabiliriz. Yani komutumuz genel şekliyle text(x,y,’açiklama’) biçimindedir.
   Şimdi bir örnek yapacağız ve olayı daha iyi anlamaya çalışacağız. Gelin sinüs çizdirelim. Bir sinüsün yatay ekseninde pi nin katları düşey ekseninde ise genlik değerleri yazar. O zaman sinüs çizdirmek için öncelikle yatay eksenin aralığını tanımlayalım. Düşey ekseni tanımlamaya gerek yok, çünkü sin yazdınız mı atıyorum sin(pi) değerini matlab kendisi hesaplar ve şekle koyar. Yatay ekseni linspace(x,y,z) şeklinde tanımlayacağız. Bir de bir adet değil de 3 adet sin çizdirelim yanlız bunların fazları farklı olsun. Görelim;
                                                                       
  Gordüğnüz deeemi, bizde yalan yok. Şimdi bide arkadaşlar bu Matlab da çizim yaparkene çizgileri farklı renklerde yapabilirsiniz. Ya da düz çizgi değilde noktalı çizgi ya da kısa çizgi şeklinde felan çizdirebiliriz. Bide bunlara bakalım. Önce bir aşağıdaki tabloyu inceleyelim.
                                        
Bu çizelgeyi nasıl kullanıcaz sorun bu. plot komutunun parantezlerinin içine x,y yi yazdıktan sonra bir virgül açar iki apostrof koyarız. Bu apostrofların arasına tablodaki sembolleri koyarız. Örnek verelim. Mesela diyelimki çizgimiz kırmızı renkte olsun, o zaman hemen tablodan kırmızıya gidiyorum ve r harfini görüyorum. plotun içine apostrofların arasına r yazıyorum ve şu hale geliyor plot(x,y,'r'). Sonra nasıl olsa bedava diyorum. Bu çizgimin üstünde baklava işareti olsun diyorum. hemen r nin yanına birde d ekliyorum ve şu hale geliyor: plot(x,y,'rd') . Bide diyorum ki bu çizgi tireli noktalı olsun. Ve en sonunda şöyle bir komut ortaya çıkıyor: plot(x,y,'rd-.') Çok güzel değil mi? Bence münkemmel! :))

   Diyelimki çizdirdiğiniz şekilin x ekseni 1 den 100 e y ekseni 10 dan 50 ye kadar. Ama size x eksenini 5 ten 20 ye, y ekseninide 10 dan 30 a kadar görmek yeterli oluyor. Buralarda kesmek istiyorsunuz. O zaman axis([]) komutunu kullanıyoruz. Bu sorun için şöyle yaparız: axis([5 20 10 30]);    Gördüğünüz üzere önce x ekseninin sınırlarını ve sonra y ekseninin sınırlarını girerek bu sorunu hallediyoruz. Ayrıca plot(x,y) komutu çizimi noktaları birleştirerek yapar. Ama direkt birleştirir. stem(x,y) komutu ise nokta şeklinde bırakır. stairs(x,y) ise basamak şeklinde çizdirir. Denemenizi ve görmenizi tavsiye ederim. Son olarak arkadaşlar bir Matlab figure penceresinde 1 den fazla şekil olsun istiyorsak subplot(x,y,z) komutunu kullanırız. Burada x satır sayısını y sütun sayısını ve z ise 1. satırın elemanlarından başlamak üzere saydığınızda kaçıncı şekle denk geliyorsa çizdireceğiniz şekil onun sırasını temsil eder. Mesela diyelimki 4 tane şekli aynı pencereye çizdircem ve 2. satır ve 2. sütundaki şekle sıra geldi. Diğer 3 ünü daha önce çizdirdim(varsayım). yani bu şekil 4. sıradadır. Dolayısıyla komutum 2 satır 2 sütun 4. sıra  ==> subplot(2,2,4); şeklinde olacaktır. Görelim;
                                             


      Ben yoruldum, bana müsade kendinize iyi bakın, örneklerle değişik denemeler yapın derim. Bir de 3 boyutlu çizimler var onlarada daha sonra değineceğiz. Ciaooo!

  Kaynak: Signals and Systems with Matlab Applications Steven T. Karris

  

2 yorum:

Blogu faydali buldunuz mu?

İzleyiciler