MATLAB e Giriş 2

DERS 2 : MATLAB e Giriş 2
İkinci derste, basit olarak 2D grafik çizimi (2D plotting) ,Script dosyası ve basit olarak programlamaya(programming) giriş yapılacaktır.Daha sonraki derste ise bu işlemleri daha da detaylandıracağız.
Bu arada internet üzerinden “MATLAB Primer pdf” şeklinde arama yaparsanız MathWorks’un kaynağına ulaşabilirsiniz.

2D-Plot
>> help plot
İlk olarak bu komutu Command Window’a girerek nasıl kullanıldığına bakıyoruz.
Şimdi, sinüs grafiği çizdirelim.İşlemlerimizi yaparken küçükte olsa algoritmalar kurmak daha düzgün,amaca ulaşabilen ve daha karmaşık kodları daha kolay yazmak için çok önemlidir.
            1.Amaç                                               : sinüs grafiği çizdirmek
            2.Girdiler(Inputs)                               : x (0 ile 2p arasında olsun)                                        
3.Matematiksel denklem                    : y = sin(x)
4.Çıktı(Output)                                   : y

>> x = 0:pi/100:2*pi;                Burada x, 0’dan başlayıp , pi/100’er pi/100’er artıp, 2 x pi ‘de bitiyor.
>> y = sin(x)                                     
>> plot(x,y)                                       x(yatay) ekseni x,y(düşey) ekseni y olan grafik çiziyor.
>>xlabel('x')
>>ylabel('sin(x)')
>>title('sinüs fonksiyonu grafiği')            label ve başlık ekleyebilirsiniz…

*** plot fonksiyonu ilk olarak x vektörünün her bir değeri için y vektörünü oluşturur ve sırasıyla her bir noktayı birleştirir.Yani x ile y vektörü aynı boyuttadırlar. length(x),length(y) komutlarını kullanarak boyutlarını bulabilirsiniz.

*** Ayrıca x vektörünün artışını(increment) pi/100 değil de, pi/2 ‘şer arttırırsanız x vektörü 5 elemana sahip olacaktır.Bu noktaları birleştirdiğinde daha sağlıksız sonuç alırız.Yani data fazlaysa,çizim iyileşir ancak bellekte daha fazla yer depolar.

Grafik Çiziminde Ek Bilgiler
>>plot(x,y,'r--')
Burada,r   à  red (kırmızı) ve --  à grafiğin çizgi çizgi basılmasını sağlar.
>>plot(x,y,’g+’,’LineWidth’,2)   burada “LineWidth” çizgi kalınlığını 2 olarak ayarlar.

 


Örnek 1 : y = cos(t)e-|t|
Grafiğini çizdiriniz.
t ‘nin aralığı 0’dan +4p’ye olabilir.
Grafik siyah renk olsun.
Çizgi kalınlığı 2








help komutu kullanarak
semilogx, semilogy, loglog, grid, hold,axis,legend,text,abs fonksiyonlarına bakınız.
Bunlar,ileride detaylı incelenecek…

ÖRNEK 2 :           w = 4000 rad/s ve t’nin aralığı -2p’den +2p’ye olacak şekilde
 y1 = cos(wt + p/6)
y2 = cos(wt + p/3)           grafiklerini çizdiriniz.Bunu yapabilmek için  w,t,y1 ve y2 ifadelerini tanımladıktan sonra

>>figure (1)                       Grafiğin çizdirileceği figürü açınız.
>>hold on                          Sonra bunu  yazınız,bu komut aynı figürde çoklu grafik çizimine ve hold off yazana kadar her komutu açtığınız figür için yapmanızı sağlar.Bunun için label ve title tanımlamalarınızı da bunu kullanarak yapabilirsiniz.
>>help grid ve >>help axis komutlarını girmeyi unutmayınız.



Aynı Figürde Çoklu Grafik (Multiple Plots)
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
hold on
y2 = cos(x);
plot(x,y2,':')
legend('sin','cos')
Fazladan grafik eklemek için hold fonksiyonun kullanırız.Ve hold off kullanana kadar istediğiniz kadar çizdirebilirsiniz.
3D plot ve subplot daha sonraincelenecektir.Şimdi çok fazla detaya girmedik.
Programlama ve Script Dosyaları(Programming and Scripts)
Command Window’a edit plotting  girerseniz,plotting.m olarak kayıtlı script dosyası açılacaktır.
Daha önceden Command Window’da yaptığımız işlemleri daha düzgün yapacağız.Eğer işlemlerin sonuna noktalı virgül(;) koyarsanız sonuç Command Window’da basılmaz,ancak hiçbir şey koymazsanız ekrana basacaktır.
>>edit plotting_ex1                       YES,diye yanıtlıyoruz :)

Aşağıdaki kodları inceleyelim :

% bu dosya plotting_ex.m olarak kaydedildi
% ilk olarak t aralığı tanımlayacağız
% sonra y1 = 3*cos(2.*t)
% y2 = 3*y1 + 2

t = -6*pi:pi/100:6*pi;
y1 = 3*cos(2.*t);
y2 = 3*y1 + 2;

%plot çizimi
figure (1)                                  %figür açtık
hold on
plot(t,y1,'k+','LineWidth',3)
plot(t,y2,'r:')
xlabel('t')
title('y1 ve y2 ''nin çizimi')           %başlık
legend('y1','y2')                         %önce ilk çizilen plot,sonra da ikinci çizilen plot'u
                                               %kutu içinde hangi plotun nasıl
                                               %çizildiğini gösterir
                                          
grid on                                     %figürü karelere böldük
hold off                                    % işlemi tamamladık

%şimdi de y1 ve y2 'nin maximum değerlerini bulup yazdıralım
y1_max = max(y1);
y2_max = max(y2);

disp('y1 için en büyük değer ')
disp(num2str(y1_max))       %burada num2str(y1_max) nümerik ifadeyi string'e çevirdi

disp('y2 için en büyük değer ')
disp(num2str(y2_max))



1.       % operatörünü kullanarak yorum yazabilirsiniz
2.       Command Window’da tek tek komutları girmek yerine çok daha kullanışlıdır.
3.       num2str                      string’e çevirdi.
4.       2 plot’u da aynı figürde çizdiğimizden dolayı x ekseni ortak kullandık,yoksa matematiksel yorumunda zorluk çekebilirdik.
5.       Son olarak da ,help fonksiyonu nasıl önemliyse ,scriptler’de de yorum yazmak (%.... ) çok önemlidir.

ÖRNEK 3 : Aşağıdaki aşamaları uygula ve yazacağın script dosyasına kendi yorumlarını da ekle.
a)      Yeni script dosyası aç ve throwBall.m olarak kaydet.
b)      İlk olarak dosyanın üst kısımlarına bazı sabitler(constants) tanımlaman gerekiyor.
i.                     Topun atıldığı andaki, yani ilk yüksekliği 1.5 m
ii.                   Yer çekim ivmesi 9.8 m/s2
iii.                  Topun atılma hızı 4 m/s
iv.                 Topun fırlatılma açısı yere göre 45 derece’dir.
     c)  Şimdi zaman(time vector) oluşturalım ve,0 ile 1 arasında 1000 elemanlı olsun.
     d)x mesafe ve y ise yükseklik,buna göre aşağıdaki denklemleri zamanın fonksiyonu olarak tanımla.Diğer parametreler ise,(ilk yükseklik h,yerçekimi ivmesi g,topun ilk hızı v,hız vektörünün açısı theta) ve denklemleri çöz.
                                  

NOT : theta’yı (q) ,p/180 ile çarparsak dereceden radyana çevirmiş oluruz.


     e) i.  Yüksekliğin ilk defa negatif olduğu indeksi bulunuz (find kullanınız.) 
ii. topun yere çarptığı andaki x mesafesini bulunuz ve indeksini bulunuz
iii. Şunu yazdırınız : “top x mesafe sonra yere çarptı.”  ii’de bulduğumuz değer x’tir.
      f)   Şimdi sıra,plot olarak çizdirmekte
i. yeni figür aç (figure)
ii. mesafe,yükseklik grafiği çizdir (plot)
iii. label ve başlık ekle.
iv. başka bir grafik çizimi için(hold)
v. yer  seviyesini çizdir.Bunu yapabilmek için yatay bir çizgi olacak ve 0’dan x’in maximum değerine kadar (max)
   g) Kodu çalıştır,ve yaklaşık grafik şunun gibi görünecek,Command Window’a yazdırılan değer yaklaşık 2.5821 olacak.

Bu problem MIT OpenCourseWare 6.094 Introduction to MATLAB® January Homework 1’den alınmıştır.


Şimdi bazı fonksiyonların kullanımına bakalım :
input() komutu : Kullanıcıdan klavye aracılığıyla programcı tarafından girilmesi istenen değişken istenir ve ilgili değişkene atanır.
>> yas = input(‘Yasinizi Giriniz : ’)
Yasinizi Giriniz : 21
yas =
21

fprintf()  komutu : Bir açıklama ifadesiyle birlikte bir veya birden fazla değerin görüntülenebilmesini sağlar.


PROGRAMLAMA
İf-else yapısı
İf-elseif-else yapısı seçim mekanizması için kullanılır. Bir mantıksal ifadeyi kontrol ederek bunun sonucuna göre mümkün seçeneklerden birini icra edebilen bir komuttur.


                              



ÖRNEK 4 : Bir Script dosyasında,ilk olarak kullanıcıdan 0-100 arasında bir integer sayı isteyin.Eğer girdiği
Sayı 50’den büyük ise ,Sayı 50’den büyük
                Sayı 50 ise,sayı 50
                Sayı 50’den küçük ise ,50’den küçük sayı girdiniz. Yazdıran bir program yazınız.

FOR DÖNGÜSÜ
Bir çok uygulamada belirli işlemlerin tekrar tekrar gerçekleştirilmesi gerekir. Programlamada bu işlemler grubunu çok sayıda tekrar etmek imkanı sağlayan yapılara ÇEVRİM, DÖNGÜ veya LOOP denir.

Örnek 5 : 1’den 100’ye kadar sayıların toplamını bulan program
toplam = 0 ;
 for x = 1:100
toplam = toplam + x ;
end toplam


while Döngüsü
while’da belirtilen durum gerçekleşmeyinceye kadar içindeki komutları uygular.Yani,while ifadesi  1 (doğru)ise,while döngüsünün içine girer,0(yanlış) olunca döngü sonlanır.


Örnek 6 : Ax+b=0 şeklinde verilen 1. derece denklemin çözümünü veren programı yanda verilen akış diyagramından yararlanarak MATLAB’de programlayınız.





A=input(‘A katsayısını giriniz..: ’);
while A=0
A=input(‘A katsayısını giriniz..: ’);
end
B=input(‘B katsayısını giriniz..: ’);
x=-B/A;
fprintf(‘%d \n’,x)














KAYNAKLAR
1.        MIT OpenCourseWare 6.094 Introduction to MATLAB® January Homework 1
2.       MATLAB® Primer © COPYRIGHT 1984–2015 by The MathWorks, Inc.
3.       Matlab Ders Notları- MATLAB’ de  Programlama- Doç. Dr. İrfan KAYMAZ




Hiç yorum yok:

Yorum Gönder