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 Ek Ders 1:
Temel işlemler, vektörler, matrisler, basit grafikler ve dosyalar
MATLAB Çalıştırma Sayfası
Ç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
2
MATLAB = Matrix Laboratory
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
3
Aritmetik İşlem Örneği
Örnek 1
>> 1 + 2 – 3 * 4 / 5 ^ 6 ans =
2.9992
Örnek 2: Parantez ile önceliği belirtebiliriz >> 1 +( ((2 – 3) * 4) / 5 )^ 6
ans = 1.2621
4
5^6 = 15625
4 / 5^6 = 2.5600e-004 3 * 4 / 5^6 = 7.6800e-004
“...” notasyonu
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
5
ans
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
6
Sabit ve değişkenlerin isimlendirilmesi
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
7
İsimlendirme örneği
>> x = 5 x = 5
>> y = 3 y = 3
>> f = x + y f =
8
8
“;” Notasyonu
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;
>>
9
“%” Notasyonu
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 % Hadi hesapla: y = 1 x =
3
10
Çalışma Sayfası Genel Komutları
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
11
Genel Komutlara Devam
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
12
Vektörlerin Tanımlanması
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
13
Vektör Tanımlamaya Devam
İ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
14
Özel Vektör Tanımlama Fonksiyonları
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
15
Dizinlerle Vektör Değerlerine Ulaşabilme
>> v = [1 2 3 4 5 6 7 8 9] % ornek tanimlayalim v =
1 2 3 4 5 6 7 8 9
>> v(4:6)=0 % Ogelerin 4-6 arasini sifir yapalim v =
1 2 3 0 0 0 7 8 9
>> v(4:6)=[11 22 33] % Ogeleri farkli tanimlayalim v =
1 2 3 11 22 33 7 8 9
16
Örneğe Devam
>> v(6:end)=1 % end notasyonu v =
1 2 3 11 22 1 1 1 1
>> v(6:end)=[] % kare parantez ile silme v =
1 2 3 11 22
17
Özel Fonksiyonlara Devam
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
18
length
length: vektörün uzunluğu (öge sayısı)
>> v v =
1 2 3 11 22
>> length(v) ans =
5
19
Matrislerin Tanımlanması
Örnek 1
>> M=[1 2 3 4 5 6 7 8 9]
M =
1 2 3 4 5 6 7 8 9
20
• Örnek 2
>> M=[1 2 3; 4 5 6 ; 7 8 9]
M =
1 2 3 4 5 6 7 8 9
Matris İndisleri
>> M = [1 2 3; 4 5 6; 7 8 9];
>> M(2,2) % Oge (2,2)’yi gösterme ans =
5
>> M(2,2)=50 % Oge (2,2)’ye değer atama M =
1 2 3 4 50 6 7 8 9
21
Matris İndisleri (2)
>> M(3,:)=[-1 -2 -3] % 3. sıraya değer atama M =
1 2 3 4 50 6 -1 -2 -3
>> M(:,1)=[8 18 28] % 1. sütüne değer atama M =
8 2 3 18 50 6 28 -2 -3
22
Matris İndisleri (3)
>> M(2,2:3)=0 % Sadece belirli ögeleri değiştirme M =
8 2 3 18 0 0 28 -2 -3
>> M(3,2:end)=100 % end notasyonu M =
8 2 3 18 0 0 28 100 100
23
Matris Biriktirilmesi
Matrislerden daha büyük matrisler oluşturma
>> A=[1 2 3; 4 5 6]; B=[-4 -5 -6]; C=[-3 ; -6];
>> [A ; B] % B’yi A’nın sıralarına ekleme ans =
1 2 3 4 5 6 -4 -5 -6
24
Matris Biriktirmesi (2)
>> [A, C] % C’yi A’nın sütünlerine ekleme ans =
1 2 3 -3 4 5 6 -6
>> [A 2*C] % virgülsüz notasyon, işlemiyle ans =
1 2 3 -6 4 5 6 -12
25
Matrisler için length
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
26
size
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
27
Özel Matrisler
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
28
Özel Matrislere Devam
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
29
Özel Matrislere Hala Devam
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 0 2 0 0 0 0 3 0 0 0 0
30
>> diag(v,-1) ans =
0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0
transpose
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
31
>> transpose(M) ans =
0 + 1.0000i 0 + 3.0000i 0 + 5.0000i 0 + 2.0000i 0 + 4.0000i 0 + 6.0000i
>> M.' ans =
0 + 1.0000i 0 + 3.0000i 0 + 5.0000i 0 + 2.0000i 0 + 4.0000i 0 + 6.0000i
conjugate transpose
Sadece tırnak: ‘
>> M' ans =
0 - 1.0000i 0 - 3.0000i 0 - 5.0000i 0 - 2.0000i 0 - 4.0000i 0 - 6.0000i
32
elmat
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.
33
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()
Trigonometrik Fonksiyonlara Devam
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) % Dereceden radyana çevirme ans =
1
35
Üstel Fonksiyonları, vb.
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
36
Karmaşık Sayıları ve Fonksiyonları
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
37
Karmaşık Sayı Tanımlama
Ö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
38
Karmaşık Sayı İşlemleri
>> a=1+j; b=1-j;
>> a + b % toplama ans =
2
>> a – b % çıkartma ans =
0 + 2.0000i
>> a*b % çarpma >> a/b % bölme ans = ans =
2 0 + 1.0000i
39
Genlik ve Açı Hesaplamaları
Genlik
Opsiyon 1 Opsiyon 2
>> r = abs(a) >> r = sqrt(real(a)^2 + imag(a)^2) r = r =
1.4142 1.4142
Açı
Opsiyon 1 Opsiyon 2
>> theta = angle(a) >> theta = atan(imag(a)/real(a)) theta = theta =
0.7854 0.7854
40
Karmaşık Sayı Fonksiyonları
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)
41
Sayısal Format
Sayısal formatlar (single=32 bit, double=64 bit)
Normal kullanım şekli ‘short’ (kısa) formattır.
42
Format Açıklama pi sayısına etkisi
short Scaled fixed point format with 5 digits. 3.1416 long Scaled fixed point format with 15 digits
for double and 7 digits for single.
3.14159265358979
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
format
>> format long % short sayisal formati belirleme
>> format compact % dar satır aralığı
>> pi ans = 3.1416
>> format loose % geniş satır aralığı
>> pi ans = 3.1416
43
Hazır Tanımlanmış Sabitler
Sabitler Açıklama
ans 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 Sayı/sıfır belirsizliği sonucu üretilir
NaN 0/0, ∞ - ∞ belirsizliği sonucu üretilir (Not a Number)
44
Örnekler
>> eps >> realmax ans = ans =
2.2204e-016 1.7977e+308
>> bitmax >> realmin ans = ans =
9.0072e+015 2.2251e-308
45
Grafik Çizdirmek
İ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)
46
Fonksiyonu Çizdirme Örneği
>> x = [1:10]; y=sin(x);
>> plot(x,y)
47
Fonksiyonu Çizdirme Örneği (2)
>> plot(x,y,'*k')
48
Fonksiyonu Çizdirme Örneği (3)
>> 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
49
plot()’un Başka Şeçenekleri
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)
50
Grafik Alanı Komutları
Ş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
51
İki Boyutlu Temel Grafikler
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
52
stem()
>> x = -pi:pi/10:pi;
>> y = sin(x);
>> stem(x,y)
53
Şekilleri kaydetme
Ş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
54
MATLAB .m Dosyaları
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
55
Şimdilik bu kadar!
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
56