1/13/2013 MATLAB Ek Ders 1: Temel işlemler, vektörler, matrisler, basit grafikler ve dosyalar Kitabımız: MATLAB ile Uygulamaları (Ahmet Altıntaş) Yrd. Doç. Dr. Sevgi Zübeyde GÜRBÜZ Yrd. Doç. Dr. İsrafil BAHÇECİ ELE 371 ve ELE 375 Bahar 2013 MATLAB Çalıştırma Sayfası 2 Çalıştırma sayfası (command window) Çalıştırmak istediğin MATLAB kodu burada yazılır Komut tarihçesi penceresi Daha önce çalıştırılan kod burada gösterilmektedir Workspace Tanımlanan değişkenlerin listesi Current directory Dosyanın içinde bulunduğu folder 1 1/13/2013 MATLAB = Matrix Laboratory 3 Bütün işlemler sayılar, vektörler ve matrisler üzerinde yapılmaktadır. Temel aritmetik işlemler: Toplama: + Çıkartma: Çarpma: * Bölme: / Bir sayının üssü: ^ (ör.: 2 ^ 2 = 4) İşlem sırası soldan sağa Öncelik paranzetli ifadeler Sonra üslü ifadeler, bölme / çarpma, ve toplama / çıkartma Aritmetik İşlem Örneği 4 Örnek 1 >> 1 + 2 – 3 * 4 / 5 ^ 6 ans = 2.9992 5^6 = 15625 4 / 5^6 = 2.5600e-004 3 * 4 / 5^6 = 7.6800e-004 Örnek 2: Parantez ile önceliği belirtebiliriz >> 1 +( ((2 – 3) * 4) / 5 )^ 6 ans = 1.2621 2 1/13/2013 “...” notasyonu 5 Eğer hesaplamak istediğimiz işlem çok uzun olupta çalıştırma sayfasının tek satırına sığmıyorsa, “…” notasyonu kullanarak hesabımızı bir sonraki satırda devam edebiliriz. Örnek: >> 1 + 2 – 3 * 4 / 5 ^ 6 /2 + 4 – 10 / 43 ^2 / 4 ... *8–7+3 ans = 2.9888 ans 6 Eğer kendin isim tanımlamazsan, evvel örnekte olduğu gibi, cevabın “ans” değişkeni olarak kaydedilmektedir. “ans” olarak kaydedilen bir değeri “ans” olarak tekrar kullanılabilir: >> 1 + 3 * 5 ans = 16 >> ans / 4 ans = 4 3 1/13/2013 Sabit ve değişkenlerin isimlendirilmesi 7 Değişken isimlerini istediğimiz gibi koyabiliriz, bir kaç kural çerçevesinde: En az bir karakterden oluşmak zorundadır İlk karakter mutlaka bir harf olmalı (sayı ile başlayamaz) Türkçe karakterler kullanılamaz Maksimüm karakter sayısı 31 Zaten tanınmış olan bir fonksiyon ismi olamaz MATLAB büyük ve küçük harf kullanımına duyarlıdır İsimlendirme örneği 8 >> x = 5 x= 5 >> y = 3 y= 3 >> f = x + y f= 8 4 1/13/2013 “;” Notasyonu 9 Eğer işlem komutumuzun sonunda “;” koyarsak, işlemimizin sonucu çalıştırma sayfasında gösterilmemektedir. Sonucumuz çok büyük matrislerden oluşuyorsa özellikle bu notasyonu kullanmakta fayda vardır. Örnek: >> x = 1 + 3 * 5; >> “%” Notasyonu 10 Bazen işlem ile ilgili yanına not düşmeyi isteyebiliz. Aynı satırda, işlem tamamlandıktan sonra “%” karakteri koyarsak, “%”dan sonra yazılan hiç birşey dikkate alınmamaktadır. Örnek: >> x = 1 + 2 x= 3 % Hadi hesapla: y = 1 5 1/13/2013 Çalışma Sayfası Genel Komutları 11 help: Display help text in Command Window. help fonk_ismi: “fonk_ismi” fonksiyonu hakkinda ilgili tum bilgileri vermektedir lookfor: Search all M-files for keyword. demo: Access product demos via Help browser. intro: temel matris işlemlerini gösten demo who, whos: mevcut değişkenlerin listesi clear: bütün değişkenleri hafizadan siler clear x y: x ve y değişkenleri hafizadan siler clc: çalışma sayfasını temizler home: moves cursor to top left corner of screen Genel Komutlara Devam 12 save: çalışma sayfası değişkenlerini matlab.mat olarak kaydetme save isim: çalışma sayfası değişkenlerini isim.mat olarak kaydetme save isim x y: x ve y değişkenleri isim.mat dosyasına kaydetme load isim: çalışma sayfasına isim.mat değişkenleri yükleme edit: program yazmak için editörü açma quit, exit: program sonlandırma 6 1/13/2013 Vektörlerin Tanımlanması 13 Sıra vektörün tanımlanması >> v = [1 2 3 4] v= 1 2 3 4 Sütün vektörün tanımlanması >> v = [1 ; 2 ; 3] v= 1 2 3 Vektör Tanımlamaya Devam 14 İndislerle elemanlara ulaşabilme: >> v = [1 2 3 4]; >> v(3) ans = 3 İndis yoluyla tanımlanan vektörlerde belirtilmeyen indislerdeki değerler sıfır kabul edilir: >> v(1)=2; v(3)=5; >> v v= 2 0 5 7 1/13/2013 Özel Vektör Tanımlama Fonksiyonları 15 Dizilerin oluşturulması >> x = 1:5 x= 1 2 3 4 5 >> x = [1:5] x= 1 2 3 4 5 >> x = [0.1:0.1:0.5] x= 0.1000 0.2000 0.3000 0.4000 0.5000 Dizinlerle Vektör Değerlerine Ulaşabilme 16 >> v = [1 2 3 4 5 6 7 8 9] v= 1 2 3 4 5 6 % ornek tanimlayalim 7 >> v(4:6)=0 v= 1 2 3 7 8 9 % Ogelerin 4-6 arasini sifir yapalim 0 0 0 8 9 >> v(4:6)=[11 22 33] % Ogeleri farkli tanimlayalim v= 1 2 3 11 22 33 7 8 9 8 1/13/2013 Örneğe Devam 17 >> v(6:end)=1 v= 1 2 3 11 22 >> v(6:end)=[] v= 1 2 3 11 22 % end notasyonu 1 1 1 1 % kare parantez ile silme Özel Fonksiyonlara Devam 18 linspace: lineer aralıklı vektör linspace(X1, X2, N) generates N points between X1 and X2 >> linspace(1,5,5) ans = 1 2 3 4 5 logspace: logaritmik aralıklı vektör logspace(X1, X2, N) generates a row vector of N logarithmically equally spaced points between 10^X1 and 10^X2. >> logspace(1,2,5) ans = 10.0000 17.7828 31.6228 56.2341 100.0000 9 1/13/2013 length 19 length: vektörün uzunluğu (öge sayısı) >> v v= 1 2 3 11 22 >> length(v) ans = 5 Matrislerin Tanımlanması 20 Örnek 1 >> M=[1 2 3 456 7 8 9] M= 1 2 3 4 5 6 7 8 9 • Örnek 2 >> M=[1 2 3; 4 5 6 ; 7 8 9] M= 1 4 7 2 5 8 3 6 9 10 1/13/2013 Matris İndisleri 21 >> M = [1 2 3; 4 5 6; 7 8 9]; >> M(2,2) ans = 5 % Oge (2,2)’yi gösterme >> M(2,2)=50 M= 1 2 3 4 50 6 7 8 9 % Oge (2,2)’ye değer atama Matris İndisleri (2) 22 >> M(3,:)=[-1 -2 -3] M= 1 2 3 4 50 6 -1 -2 -3 % 3. sıraya değer atama >> M(:,1)=[8 18 28] M= 8 2 3 18 50 6 28 -2 -3 % 1. sütüne değer atama 11 1/13/2013 Matris İndisleri (3) 23 >> M(2,2:3)=0 M= 8 2 3 18 0 0 28 -2 -3 % Sadece belirli ögeleri değiştirme >> M(3,2:end)=100 M= 8 2 3 18 0 0 28 100 100 % end notasyonu Matris Biriktirilmesi 24 Matrislerden daha büyük matrisler oluşturma >> A=[1 2 3; 4 5 6]; B=[-4 -5 -6]; C=[-3 ; -6]; >> [A ; B] ans = 1 2 3 4 5 6 -4 -5 -6 % B’yi A’nın sıralarına ekleme 12 1/13/2013 Matris Biriktirmesi (2) 25 >> [A, C] ans = 1 2 3 -3 4 5 6 -6 % C’yi A’nın sütünlerine ekleme >> [A 2*C] ans = 1 2 3 -6 4 5 6 -12 % virgülsüz notasyon, işlemiyle Matrisler için length 26 Matrislere length komutu uygulandığında sütün sayısını vermektedir >> M = [1 2 3; 4 5 6] M= 1 2 3 4 5 6 >> length(M) ans = 3 13 1/13/2013 size 27 size: matrisin sıra ve sütün sayılarını vermektedir >> size(M) ans = 2 3 >> [row col]=size(M) row = 2 col = 3 Özel Matrisler 28 zeros(n): tüm ögeleri sıfır olan bir n x n matris zeros(n,m): tüm ögeleri sıfır olan bir n x m matris ones(n): tüm ögeleri bir(1) olan bir n x n matris ones(n,m): tüm ögeleri bir(1) olan bir n x m matris eye(n): n x n boyutunda birim matris eye(n,m): n x m boyutunda birim matris >> eye(2,3) ans = 1 0 0 0 1 0 14 1/13/2013 Özel Matrislere Devam 29 diag(v): ana köşesinde v vektör değerlerine sahip matris >> v = [1 2 3]; >> diag(v) ans = 1 0 0 0 2 0 0 0 3 Özel Matrislere Hala Devam 30 diag(v,k): k. köşegende v vektör değerlerine sahip matris k = 0 is the main diagonal, k > 0 is above the main diagonal and k < 0 is below the main diagonal. >> diag(v,1) ans = 0 1 0 0 0 2 0 0 0 0 0 0 0 0 3 0 >> diag(v,-1) ans = 0 0 0 1 0 0 0 2 0 0 0 3 0 0 0 0 15 1/13/2013 transpose 31 transpose(M): non-conjugate transpose kısa notasyonu, nokta-tırnak: >> M=j*[1 2; 3 4; 5 6] M= 0 + 1.0000i 0 + 2.0000i 0 + 3.0000i 0 + 4.0000i 0 + 5.0000i 0 + 6.0000i .’ >> transpose(M) ans = 0 + 1.0000i 0 + 2.0000i 0 + 3.0000i 0 + 4.0000i 0 + 5.0000i 0 + 6.0000i >> M.' ans = 0 + 1.0000i 0 + 2.0000i 0 + 3.0000i 0 + 4.0000i 0 + 5.0000i 0 + 6.0000i conjugate transpose 32 Sadece tırnak: >> M' ans = 0 - 1.0000i 0 - 2.0000i ‘ 0 - 3.0000i 0 - 4.0000i 0 - 5.0000i 0 - 6.0000i 16 1/13/2013 elmat 33 MATLAB’da bulunan özel matrisleri oluşturma komutları ve matris hesaplarında kullanılabilecek önceden tanımlı fonksiyonların listesi: help elmat Elementary matrices and matrix manipulation. Trigonometrik Fonksiyonları 34 Sinüs Kosinüs Tanjant Kotanjant Sekant Kosekant Fonksiyon sin() cos() tan() cot() sec() csc() Hiperbolik Fonksiyon sinh() cosh() tanh() coth() sech() csch() Ters Fonksiyon asin() acos() atan() acot() asec() acsc() Ters Hiperbolik Fonksiyon asinh() acosh() atanh() acoth() asech() acsch() 17 1/13/2013 Trigonometrik Fonksiyonlara Devam 35 MATLAB açıları radyan cinsi olarak kabul etmektedir. pi standart sayı olarak önceden tanımlanmaktadır. >> sin(pi/2) ans = 1 >> sin(90*pi/180) ans = 1 % Dereceden radyana çevirme Üstel Fonksiyonları, vb. 36 exp: e tabanında üstel fonksiyonu (e=2.7183...) log: e tabanında doğal logaritma log10: 10 tabanında logaritma log2: 2 tabanında logaritma Başka fonksiyonlar: sqrt: karekök hesaplama pow2: 2’nin kuvvetini alma MATLAB fonksiyon listesi: help elfun: elementary math functions list 18 1/13/2013 Karmaşık Sayıları ve Fonksiyonları 37 i ve j standart olarak sqrt(-1) olarak tanımlıdır, eğer siz farklı bir şey olarak değer vermezseniz: >> i ans = 0 + 1.0000i >> j ans = 0 + 1.0000i >> i=[1:5]; >> i i= 1 2 3 4 5 Karmaşık Sayı Tanımlama 38 Örnek 1: >> x=[1+j 5-6*j complex(2,-3)] x= 1.0000 + 1.0000i 5.0000 - 6.0000i 2.0000 - 3.0000i Örnek 2: >> k=sqrt(-1) k= 0 + 1.0000i >> 1+k ans = 1.0000 + 1.0000i 19 1/13/2013 Karmaşık Sayı İşlemleri 39 >> a=1+j; b=1-j; >> a + b % toplama ans = 2 >> a – b % çıkartma ans = 0 + 2.0000i >> a*b % çarpma ans = 2 >> a/b % bölme ans = 0 + 1.0000i Genlik ve Açı Hesaplamaları 40 Genlik Opsiyon 1 >> r = abs(a) r= 1.4142 Opsiyon 2 >> r = sqrt(real(a)^2 + imag(a)^2) r= 1.4142 Açı Opsiyon 1 >> theta = angle(a) theta = 0.7854 Opsiyon 2 >> theta = atan(imag(a)/real(a)) theta = 0.7854 20 1/13/2013 Karmaşık Sayı Fonksiyonları 41 real(z): karmaşık sayının gerçek kısmı imag(z): karmaşık sayının sanal kısmı abs(z): karmaşık sayının genliği angle(z): karmaşık sayının açısı conj(z): karmaşık sayının eşleniği compass(z): karmaşık sayının polar formatta çizimi >> compass(a) Sayısal Format 42 Sayısal formatlar (single=32 bit, double=64 bit) Format Açıklama pi sayısına etkisi short Scaled fixed point format with 5 digits. long Scaled fixed point format with 15 digits 3.14159265358979 for double and 7 digits for single. 3.1416 short e Floating point format with 5 digits. 3.1416e+000 long e Floating point format with 15 digits for double and 7 digits for single. 3.141592653589793e+000 short g Best of fixed or floating point format with 5 digits. 3.1416 long g Best of fixed or floating point format with 15 digits for double and 7 digits for single. 3.14159265358979 Normal kullanım şekli ‘short’ (kısa) formattır. 21 1/13/2013 format 43 >> format long >> format compact >> pi ans = 3.1416 >> format loose >> pi % short sayisal formati belirleme % dar satır aralığı % geniş satır aralığı ans = 3.1416 Hazır Tanımlanmış Sabitler 44 Sabitler ans Açıklama Bir değişkene atanmayan sonuç ‘ans’ sabitine atanır. pi ‘format long’ olarak 3.14159265358979 i, j Karmaşık sayıların sanal kısmını tanımlar (sqrt(-1)) eps İki sayı arasında olabilecek en küçük fark 2^(-52) realmax MATLAB’ın kurulu olduğu bilgisayarda yazılabilecek en büyük pozitif gerçek sayı realmin MATLAB’ın kurulu olduğu bilgisayarda yazılabilecek en küçük pozitif gerçek sayı bitmax MATLAB’ın kurulu olduğu bilgisayarda yazılabilecek en bütük tam sayı Inf NaN Sayı/sıfır belirsizliği sonucu üretilir 0/0, ∞ - ∞ belirsizliği sonucu üretilir (Not a Number) 22 1/13/2013 Örnekler 45 >> eps ans = 2.2204e-016 >> realmax ans = 1.7977e+308 >> bitmax ans = 9.0072e+015 >> realmin ans = 2.2251e-308 Grafik Çizdirmek 46 İki Boyutlu Lineer Eksenli Çizim: plot() Bu fonksiyonun bir sürü opsiyonu mevcut, hepsini görmek için help plot yazınız İşaret türleri ve simgeleri Nokta(.), Artı(+), Yıldız(*) Çember(o), x-işareti(x), Kare(s) Çizgi türleri ve simgeleri Düz(-), Noktalı(:), Kesikli(--), Nokta-kesik(-.) Çizgi renkleri ve simgeleri Kırmızı(r), Yeşil(g), Sarı(y), Mavi(b), Siyah(k), Mor(m), Beyaz(w) 23 1/13/2013 Fonksiyonu Çizdirme Örneği 47 >> x = [1:10]; y=sin(x); >> plot(x,y) Fonksiyonu Çizdirme Örneği (2) 48 >> plot(x,y,'*k') 24 1/13/2013 Fonksiyonu Çizdirme Örneği (3) 49 >> x = [1:10]; y=sin(x); >> plot(x,y) >> hold on >> plot(x,y,'*k') >> xlabel('x[n]') >> ylabel('y[n]') >> title('y=sin(x)') >> hold off plot()’un Başka Şeçenekleri 50 LineWidth: Çizgi kalınlığını değiştir MarkerEdgeColor: İşaret kenarlık rengini değiştir MarkerFaceColor: İşaret dolgu rengini değiştir MarkerSize: İşaret boyutunu değiştir Örnek: >> x = -pi:pi/10:pi; y = tan(sin(x)) - sin(tan(x)); plot(x,y,'--rs','LineWidth',2,... 'MarkerEdgeColor','k',... 'MarkerFaceColor','g',... 'MarkerSize',10) 25 1/13/2013 Grafik Alanı Komutları 51 Şekillere sayı vermek önemlidir yoksa her figure aynı şekil penceresinde çizdirilir: figure: Yeni şekil pencere açtır figure(n): n sayılı şekil penceresi açtır subplot(m,n,p): Çizim alanını bölgelere ayır close(n): n sayılı şekli kapatma close all: tüm şekilleri kapatma axis(): eksenin sınırlarını görüntüler axis([xmin xmax ymin ymax]): eksen sınırlarını belirler İki Boyutlu Temel Grafikler 52 plot(): lineer eksenli grafikler [sürekli-zaman sinyaller için kullan, örnek sayısını fazla tutarak] loglog(): X ve Y eksenleri logaritmik grafikler semilogx(): X ekseni logaritmik, Y ekseni lineer semilogy(): Y ekseni logaritmik, X ekseni lineer polar: kutupsal koordinat eksenli grafikler area(): alan dolgulu grafikler bar(): çubuk (bar) grafikler stem(): parçalı grafikler [ayrık sinyallerde kullan] stairs(): basamak grafikler hist(): histogram grafikler 26 1/13/2013 stem() 53 >> x = -pi:pi/10:pi; >> y = sin(x); >> stem(x,y) Şekilleri kaydetme 54 Şekil penceresinden ‘save as’ Çalıştırma sayfasından print() komutuyla MATLAB şekili olarak kaydetme .fig dosyasıdır Örnek: jpeg olarak kaydetme İsteğin klasöre girdikten sonra: >> print -djpeg deneme.jpg Daha bilgi için: help print 27 1/13/2013 MATLAB .m Dosyaları 55 Bütün komutları çalıştırma sayfasında tek tek girmek zorunda değiliz. MATLAB .m script dosyasında komutları yazıp, dosya ismiyle çalıştırma sayfasından çağırabiliriz. Örnek: File →New→Blank M File Açılan dosyada tüm MATLAB komutları yazınız deneme.m olarak kaydedin Çalıştırma sayfasından çalıştırın >> deneme Şimdilik bu kadar! 56 Kitabımıza bakın, çok deneyebileceğiniz örnekler mevcut ve bir çok konuyu daha ayrıntılı olarak ele almaktadır. MATLAB’ı öğrenmenin en iyi yolu açıp denemek! En çok kullanacağınız komutu unutmayın: help 28