MATLAB Ek Ders 1

advertisement
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
Download