Osman Tutaysalgir`in MATLAB Kullanim Kilavuzu

advertisement
sin|sqrt|quad|trapz|find|plot|fprintf|
all|any|fminbnd|diff|sum|ode|cos|tan
|acos|atan|feval|factorial|exp|log|abs
|round|rand|linspace|median|std|imr
ead|fopen|imwrite|eye|zeros|ones|pl
ot|fplot|ceil|surf|mesh|plot3|contour
|sin|sqrt|quad|trapz|find|plot|fprintf|
all|any|fminbnd|diff|sum|ode|cos|tan
MATLAB
|acos|atan|feval|factorial|exp|log|abs
|round|rand||linspace|median|std|im
read|fopen|imwrite|eye|zeros|ones|p
lot|fplot|ceil|surf|mesh|plot3|contour
|sin|sqrt|quad|trapz|find|plot|fprintf|
all|any|fminbnd|diff|sum|ode|cos|tan
|acos|atan|feval|factorial|exp|log|abs
|round|rand|linspace|median|std|imr
ead|fopen|imwrite|eye|zeros|ones|hl
Önsöz
Matlab’ın çok geniş kullanım alanı olmakla birlikte en çok ;görüntü işleme, yapay sinir
ağları,sinyal işleme, optimizasyon, veri elde etme, veritabanı, süzgeç tasarımı, bulanık mantık, sistem
kimliklendirme gibi alanlarda kullanılmaktadır. Bu kitapçıkta temel matlab kuralları anlatılacak ve
örnekler verilecektir. Ayrıca elde edilen örneklerden grafikler çıkarılarak, grafik çizmek de
anlatılacaktır. Matlab’da komut yazarken yapılan hatalardan bahsedilecektir. Öncelikle matlabın ne
olduğu, nasıl çalıştığı anlatılacak okuyucunun kolayca anlamasına ve uygulamasına yardımcı olacaktır.
Bu tutorialı Ali Cafer gürbüz hocamın isteği üzerine yazdım. Tutorialı yazmak için ilk başta
matlabı öğrendim. Tutorial için 4-5 tane kitabı taradım. Gerekli soruları çözdüm cevaplarını kontrol
ettim. Kendime göre uygun olanları buraya ekledim. Genel olarak Amos Gilat’ın kitabını kullandım.
Onun kitabındaki çözümlü ve çözümsüz örneklerin uygun olanlarını ekledim, bazılarını değiştirdim.
Başka kitaplardan da örnekler eklemeye gayret ettim. Anlayacağınız bayağı sıkı hazırlandım. Umarım
yardımcı olur.
Kitaptaki örnekleri kontrol eden, imlasını düzelten, önerilerini eksik etmeyen arkadaşlarıma
çok teşekkür ediyorum. İstek ve önerileriniz için mail adresim aşağıdadır.
Osman Tutaysalgır
osmantutaysalgir@hotmail.com
2
İçindekiler
Matlab nedir?. .........................................................................................................................................4
Matlab’a giriş ...........................................................................................................................................4
Matematiksel ifadeler ..........................................................................................................................4
Diziler ve Matrisler ..................................................................................................................................6
Matrislerle İlgili Sorular ..................................................................................................................... 10
Matrislerde Matematiksel işlemler ................................................................................................... 13
Matrislerde lineer denklem çözümü ................................................................................................. 14
Matris elemanları ile yapılan işlemler ............................................................................................... 15
Vektör analizleri için matlab fonksiyonları ........................................................................................ 15
Script dosyaları............................................................................................................................17
2 boyutlu grafikler ................................................................................................................................ 19
Birden fazla grafiği aynı sayfa üzerine çizdirmek............................................................................... 22
Grafik özellikleri ................................................................................................................................. 23
Farklı grafikleri aynı sayfaya ayrı ayrı çizdirmek ................................................................................ 24
Fonksiyon dosyaları ve Program yazma ............................................................................................... 25
Fonksiyon dosyaları ........................................................................................................................... 25
Fonksiyon dosyaları ile script dosyaları arasındaki farklar ................................................................ 27
Koşul ifadeleri .................................................................................................................................... 32
Döngüler ........................................................................................................................................... 32
3 boyutlu grafikler ................................................................................................................................ 37
Çizgi grafikleri .................................................................................................................................... 37
Mesh ve Yüzey grafikleri .................................................................................................................... 38
Fonksiyonlarda sayısal çözümleme(Nümerik analiz)........................................................................... 44
Tek değişkenli fonksiyonların çözümü ............................................................................................... 44
Maksimum ve Minimum değer bulma .............................................................................................. 46
İntegral çözme ................................................................................................................................... 46
Adi diferansiyel denklem çözümü ..................................................................................................... 48
Genel sorular......................................................................................................................................... 51
Kaynakça ............................................................................................................................................... 54
3
Matlab nedir
MATLAB programı, ilk olarak 1985 yılında C.B. Moler tarafından geliştirilmiş olup, teknik
hesaplamalar ve matematiksel problemlerin çözümü ve analizi için tasarlanmış bir yazılım geliştirme
aracıdır. Matlabın kullanıldığı alanlar











Matematiksel Ölçüm ve Hesaplamalar (Maths and Computation)
Algoritma Geliştirme (Algorithm Development)
Veri Elde Etme (Data Acquisition)
Görüntü İşleme (Image Processing)
Sayısal İşaret İşleme (Signal Processing)
Süzgeç Tasarımı (Filter Design)
Dalgacıklar (Wavelets)
Yapay Sinir Ağları (Artificial Neural Networks)
Veritabanı (Database)
optimizasyon (Optimization)
Modelleme ve Simülasyon (Modeling, Simulation)
MATLAB’in nasıl bir yazılım olduğunu anlamak için onu çok gelişmiş özellikleri olan,
programlanabilen bir bilimsel hesap makinesine benzetebiliriz. MATLAB’de yazılan programlar ,
MATLAB’in kendine özgü dili kullanılarak yazılır ve MATLAB içinden çalıştırılır. Ayrıca yazdığınız
programları DLL ve EXE olarak oluşturabildiğiniz gibi C/C++ kodlarına da çevirebilirsiniz.
Matlaba giriş








Bir komut yazıp enter tuşuna basıldığında komut çalıştırılır.Komut çalıştırılırken sadece son
komut çalıştırılır.Daha önde çalıştırılan komutlarda herhangi bir değişiklik olmaz.
Bir satırda birden fazla komut yazılırken komutlar arasına virgül konur.Yazılan komut
çalıştırıldığında verilen çıktı yazılan komuta göre soldan sağa doğru yer alır.
Çalıştırılmış komut üzerinde değişiklikler yapılmaz.Ancak o komutu tekrar yazıp düzeltmeler
yapılabilir.
Daha önce yazılan bir komuta yön tuşları ile yeniden ulaşılabilir.
Eğer yazılacak komut 1 satıra sığmıyorsa komutun sonuna 3 nokta koyarak bir alt satıra inilir
ve yazmaya devam edebilir.
Eğer bir komutu yazıldıktan sonra noktalı virgül konulursa yazdığımız komutun çıktısı ekrana
verilmez.
Yazdığımız programla ilgili bir yorum eklenmek isternirse yazılanlardan önce % sembolünü
eklenir.Bu sembol sayesinde matlab yazılan yerleri çalıştırmaz.
Clc komutu sayesinde matlab daha önce komut satırında yazılan verileri siler.
Matematiksel ifadeler
İşlem
Sembol
Toplama
+
Çıkarma
-
4
Çarpma
*
Sağdan Bölme
/
Soldan bölme
\
Üst alma
^
Kök alma
sqrt(x)
Exponansiyel
exp(x)
Mutlak değer
abs(x)
Doğal logaritma (ln)
log(x)
10 tabanlı logaritma
log10(x)
Faktoriyel
factorial(x)
Sinüs
sin (x)
Cosinüs
cos(x)
Tanjant
tan(x)
Kontanjant
cot(x)
Yukardaki x değerleri için hesaplanacak değerler yazılacaktır.
Trigonometrik fonksiyonlar için x değerleri radian cinsinden yazılmalıdır. (ör: pi/5 )
Matlab’taki öncelik sırası da normal matematikte kullanıldığı gibidir.
1.
2.
3.
4.
Parantezler (iç içe geçmiş parantezlerde ise en içteki parantez)
Üslü ifadeler
Çarpma ve bölmeler
Toplama ve çıkarma
Eğer aynı önceliğe sahip işlemler var ise işlem soldan sağa doğru yapılır.
Matlab, elde edilen ifadeleri yuvarlamak için fonksiyonlara sahiptir.
Fonksiyon
Açıklama
round(x)
En yakın değere yuvarlar
fix(x)
Sıfıra daha yakın olan değere doğru yuvarlar
ceil(x)
Sonsuza doğru yuvarlar
floor(x)
Eksi sonsuza doğru yuvarlar
rem(x)
Bölümden kalan değeri verir
5
Örnekler:
>> x=sin(pi/6)
x=
0.5000
>> round(x)
ans =
1
>> fix(x)
ans =0
y=1/3
y=
0.3333
>> ceil(y)
ans =
1
Diziler ve Matrisler
Matris tanımlarken;
Dizi_adı=*1.satır;2.satır;….;son satır +
komutu kullanılır.
Dizi tanımlarken, işimizi kolaylaştıran komutlarda vardır.
x=[0:1:15]
(ifadesini kullanarak lineer artan bir çıktı elde edilir)
x=
Columns 1 through 14
0
1
2
3
4
5
6
7
8
9 10 11 12 13
Columns 15 through 16
14 15
6
linspace(10,15,6)
(bu komutla 10 ile 15 arasında doğrusal
artan bir dizi elde ederiz.)
ans =
10 11 12 13 14 15
Özel matrisler oluşturmak için matlabtaki kodları kullanılabilir.
Komut
zeros(m,n)
eye(m)
ones(m,n)
Matris adı
m satır n sütün 0 matrisi oluşturur
m*m birim matsi oluşturur.
m satır n sütünluk bir matrisi oluşturur.
>> eye(3)
ans =
1
0
0
0
1
0
0
0
1
>> zeros(2,3)
ans =
0
0
0
0
0
0
>> ones(3,2)
ans =
1
1
1
1
1
1
Bir matrisin istediğimiz herhangi bir elemanını geri çağırılabilir. Matrisin çağırılan elemanları ile
matematiksel işlemler yapmak için kullanılabilir.”Matris transpoze” işlemine de örnekte yer
verilmiştir.
>> mtrs=[10 11 14 16;25 36 33 28;0 12 19 11]
mtrs =
10 11 14 16
7
25 36 33 28
0 12 19 11
>> mtrs(2,4)+mtrs(1,3)*mtrs(1,1)
ans =
168
>>c=mtrs'
(mtrs matrisinin transpoze alınıp c değişkenine atanmıştır.)
c=
10
11
14
16
25 0
36 12
33 19
28 11
Matriste sadece istediğimiz elemanları tek tek değil bir satırı bir sütunu yada belli satır yada sütün
arasındaki değerleri alarakta yeni vektör ve matrisler oluşturabiliriz.
Bir matris için;
A(:,n) n.sütun elemanlarını ekrana verir.
A(m,:) m. satır elemanlarını ekrana verir
A(:,m:n) m. sütun ile n.sütun arasını ekrana verir.
A(m:n,: ) m ile n. Satır arasını ekrana verir.
A(m:n,a:b) m ile n. satır ile aile b. Sütun arası değerleri ekrana verir.
Bir matris oluştururken, oluşturulan vektörler yardımı ile de matrisler oluşturulabilir.
>> mtrs=[14:-1:8;ones(1,7);4:2:16;zeros(1,7)]
mtrs =
14
1
4
0
13 12 11 10 9 8
1
1 1
1 1 1
6
8 10 12 14 16
0
0 0 0
0 0
>> mtrs(3,5)
ans =
12
(3. Satır 5 sutun elemanını işaret ediyor)
8
>> mtrs(:,5)
(5. Sutun elemanlarını işaret ediyor )
ans =
10
1
12
0
>> mtrs(4,:)
ans =
0 0 0
(4. satır elemanlarını işaret ediyor )
0
0
>> mtrs(3:4,5:7)
0
0
(3 ile 4 satır ile 5ile 7. Sutun elemanlarıyla yeni bir matris oluşturuyor)
ans =
12 14 16
0 0
0
Matrislere yeni elemanlar da eklenebilir.Bu işlemi yapılırken , linspace komutunu ve lineer artan
çıktılar oluşturmak için kullandığımız metot da kullanılabilir.Ayrıca matrislerden elemanlar da
silinebilir.Ancak eleman eklerken de silerken de matris tanımını bozulmaması gerekmektedir.
mtrs=[14:-1:8;ones(1,7);4:2:16;zeros(1,7)]
mtrs =
14
1
4
0
13 12 11
1
1
1
6
8 10
0
0
0
10 9 8
1
1 1
12 14 16
0
0 0
>> mtrs(5,:)=linspace(10,16,7)
(5. Satıra eleman ekleyeceğiz)
mtrs =
14 13 12 11 10 9 8
1
1 1 1
1 1 1
4
6 8 10 12 14 16
0
0 0 0
0 0 0
10 11 12 13 14 15 16
>> mtrs(:,8)=*0:3:9+
(satır sayısı ile matrisin boyutları uyuşmadığı için
hata verdi)
??? Subscripted assignment dimension mismatch.
>> mtrs(:,8)=[0:3:12]
(8.sutuna elemanlar ekleyeceğiz)
9
mtrs =
14 13 12 11 10 9 8 0
1
1
1 1 1
1 1 3
4
6
8 10 12 14 16 6
0
0
0 0 0 0 0 9
10 11 12 13 14 15 16 12
>>mtrs(:,1:3)=*+
(mtrs matrisinden 1.ve 3. Satırları ve aradaki satırları sildi.)
mtrs =
11 10 9 8 0
1
1 1 1 3
10 12 14 16 6
0 0 0 0 9
13 14 15 16 12
>> mtrs(2:4,1:3)=*+
(Böyle bir yazım hata verir ; çünkü silinen yerlerin dışındaki elemanlar
matris tanımını bozuyor )
??? Subscripted assignment dimension mismatch.
Matrislerle ilgili sorular
Soru 1
1
1
1
0
0
1
1
1
0
0
1
1
1
0
0
0
0
0
5
5
0
0
0
5
5
1)Yandaki matrisi matris işlemlerini kullanarak
oluşturunuz.
Çözüm
A=ones(3)
A=
1
1
1
1
1
1
1
1
1
>> B=5*ones(2)
B=
5 5
5 5
>> A(4:5,4:5)=B
(A matrisine B matrisini ekledik Matlab otomatik olarak boş kalan
yerleri 0 lar ile doldurdu)
10
A=
1
1
1
0
0
1
1
1
0
0
1
1
1
0
0
0
0
0
5
5
0
0
0
5
5
Soru 2
Aşağıdaki matrisi matris komutlarını kullanarak oluşturunuz.
2
2
3
0
4
4
4
2
2
3
0
4
4
4
2
2
3
0
7
7
7
0
0
0
1
0
0
0
5
5
5
0
9
9
9
Çözüm
a=eye(7)
a=
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
>> a(2:3,1:3)=3*ones(2,3)
a=
1
3
3
0
0
0
0
0
3
3
0
0
0
0
0
3
3
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
>> a(1:2,1:3)=2*ones(2,3)
11
5
5
5
0
9
9
9
5
5
5
0
9
9
9
a=
2
2
3
0
0
0
0
2
2
3
0
0
0
0
2
2
3
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
>> a(1:3,5:7)=5*ones(3,3)
a=
2
2
3
0
0
0
0
2
2
3
0
0
0
0
2
2
3
0
0
0
0
0
0
0
1
0
0
0
5
5
5
0
1
0
0
5
5
5
0
0
1
0
5
5
5
0
0
0
1
>> a(5:7,5:7)=9*ones(3,3)
a=
2
2
3
0
0
0
0
2
2
3
0
0
0
0
2
2
3
0
0
0
0
0
0
0
1
0
0
0
5
5
5
0
9
9
9
5
5
5
0
9
9
9
5
5
5
0
9
9
9
>> a(5:7,1:3)=7*ones(3,3)
a=
2
2
3
0
7
7
7
2
2
3
0
7
7
7
2
2
3
0
7
7
7
0
0
0
1
0
0
0
5
5
5
0
9
9
9
5
5
5
0
9
9
9
5
5
5
0
9
9
9
>> a(5:7,1:2)=4*ones(3,2)
a=
2
2
3
2
2
3
2
2
3
0
0
0
5
5
5
5
5
5
5
5
5
12
0
4
4
4
0
4
4
4
0
7
7
7
1
0
0
0
0
9
9
9
0
9
9
9
0
9
9
9
Matrislerde Matematiksel İşlemler
Matlab’ta matris işlemleri 2 şekilde yapılabilir.Birincisi; matris elemanlarıyla yapılan işlemler, diğeri
ise lineer cebir derslerinde öğretilen matrisler arası işlemlerdir.Matrisler arasındaki işlemler de dikkat
edilmesi gereken nokta yapılan işlemlerin lineer cebir kurallarına uyması gerekliliğidir.
>> vktr1=[1 3 5;2 4 5;6 8 10];
>> vktr2=[1 4 8;4 16 31;57 24 8];
>> vktr1+vktr2
(1. Ve 2 matrisin boyutları birbirine eşit)
ans =
2 7 13
6 20 36
63 32 18
>> vktr1*vktr2
(1. Matrisin sütün sayısı ile 2. Matrisin satır sayısı birbirine eşit)
ans =
298 172 141
303 192 180
608 392 376
>> A=[1 2 3];
>> B=[1;2;3];
>> C=A*B
C=
14
Bir matrisin tersini ve determinantını almak için matlab’ta bazı komutlar vardır. Matrisin tersini almak
için inv(matris adı),determinantını almak için det(matris adı) komutları kullanılır.
Matrislerle Lineer Denklem Sistemleri Çözümü
Matrislerde bölüm işlemi sağdan ve soldan bölme işlemi olarak ikiye ayrılır.
a)soldan bölme işlemi:
Soldan bölme işlemi genel olarak
matrisleri sütün matrislerdir.)
AX=B şeklindeki matrislerin çözümü için kullanılır(Burada X ve B
13
𝐴−1 . 𝐴. 𝑋 = 𝐴−1 . 𝐵
𝑋 = 𝐴−1 . 𝐵
𝑋 = 𝐴−1 \𝐵
bu işlem matlabta soldan bölme(ters bölme) işlemi ile gerçekleştirilir.
b)sağdan bölme işlemi:
sağdan bölme işlemi XA=B tipindeki matrislerin çözümünde kullanılır.(Burada X ve B satır
matrisleridirler.)
𝑋. 𝐴. 𝐴−1 = 𝐵. 𝐴−1
𝑋 = 𝐵. 𝐴−1
𝑋 = 𝐵/𝐴
Soru:
Aşağıdaki lineer denklemin köklerini bulunuz.
3x+2y-9z=-65
-9x-5y+2z=16
6x+7y+3z=5
>> A=[3 2 -9;-9 -5 2;6 7 3];
>> B=[-65;16;5];
>> A\B
(B ve X sütün matrisleridir)
(Soldan bölme işlemi ile çözümü)
ans =
2.0000
-4.0000
7.0000
>> B=[-65 16 5];
>> A=[3 -9 6;2 -5 7;-9 2 3+;
>> B/A
(İlk satır x’i, 2. satır y’yi,3. Satır z’yi gösteriyor.)
(Sağdan bölme işlemi ile çözümü)
ans =
2.0000 -4.0000 7.0000
Matris elemanlarıyla yapılan işlemler
Sembol
.*
./
.\
.^
Açıklama
Çarpım
Sağdan bölme
Soldan bölme
Üst alma
14
Matlab, yukarda verilen semboller kullanılarak matrislerdeki elemanların hepsini aynı işleme
sokar.Eğer işleme giren matrisler ise her elemanı karşı taraftaki aynı elemanla işleme sokar.
x=linspace(0,5,3)
x=
0 2.5000 5.0000
>> y=linspace(6,11,3)
y=
6.0000 8.5000 11.0000
>> x.*y
ans =
0 21.2500 55.0000
>>x.^2+2
ans =
2.0000 8.2500 27.0000
Vektör analizleri için matlab fonksiyonları
Fonksiyon
mean(x)
sum(x)
sort(x)
median(x)
std(x)
det(x)
dot(x,y)
cross(x,y)
İnv(x)
max(x)
min(x)
rand(m,n)
Açıklama
Vektördeki elemanları ortalama değerlerini bulur
Vektördeki elemanların toplamlarını bulur.
Vektördeki elemanları artan sırayla sıralar.
Vektördeki orta elemanı bulur eğer çift sayıda
eleman varsa ortadaki 2 elemanı toplar 2 ye
böler
Vektördeki elemanların standart sapmasını
hesaplar
Kare matrisin determinantını hesaplar
Vektörlerin skalar çarpımını bulur
Vektörlerin vektörel çarpımını bulur. Vektörler 3’
er elemana sahip olmak zorundadır.
Kare matrisin tersini bulur.
Vektördeki en büyük elemanı verir
Vektördeki en küçük elemanı verir
M satır n sütünluk rastgele matris
oluşturur.matris elemanları 0-1 arası sayılardan
oluşur.
15
Soru
1)
𝑛
𝑛=0 1\(2𝑛
+ 1)(2𝑛 + 2)
Yukardaki serinin değerini
a)n=50
b)n=500
c)n=5000
değerleri için hesaplayınız.bu hesaplamayı yaparken de bir 0 dan başlayan, artış oranı bir olan bir
vektör oluşturun.Oluşturduğunuz bu vektörün her elemanına yukarıdaki formülü uygulayarak yeni
bir vektör oluşturun.Toplam değeri ise matlab fonksiyonlarını kullanarak bulunuz.
n=50 için çözümü aşağıdadır.
>>n=0:1:50;
>> v=1./((2.*n+1).*(2.*n+2));
>> sum(v)
ans =
0.6883
2) Aşagıdaki matrisi için;
a)matrisin 2. satırının seçiniz.
b)matrisin 2. satırının elemanlar toplamını bulunuz.
c)2. ile 3. satırının vektörel çarpımlarını bulunuz.
d)her sutundaki en küçük ve en büyük elemanları bulunuz.
0
8
18
3
6
9
-5
-2
0
>> mtrs=[0 8 18;3 6 9;-5 -2 0];
>> str2=mtrs(2,:);
>> str3=mtrs(3,:);
>> cross(str2,str3);
(2. satırı seçtik ve str2 ye atadık.)
(3. satırı seçtik ve str3 e atadık.)
(2 vektörün vektörel çarpımını bulduk.)
16
ans =
18 -45 24
>> sum(str2);
(2.satırın eleman toplamlarını bulduk.)
ans =
18
>> stn1=mtrs(:,1);
(1.sütunu seçtik ve stn1 e atadık)
>> stn2=mtrs(:,2);
(2.sütunu seçtik ve stn2 e atadık)
>> stn3=mtrs(:,3);
(3.sütunu seçtik ve stn3 e atadık)
>> min(stn1),max(stn1),min(stn2),max(stn2),min(stn3),max(stn3)
ans =
-5
ans =
3
ans =
-2
ans =
8
ans =
0
ans =
18
Script Dosyaları
Matlabta bir script dosyası açmak için file->new->script yolu izlenir.
Script dosyaları notları:







Script dosyasındaki kodlar eğer bir çıktı veriyorsa, komut satırında çıktı verir.
Script dosya sisteminin avantajı yazılan kodlar üstünde sonradan düzenleme yapabilme
olanağı vermesidir.
Script dosyasını çalıştırmak için dosyanın ismini yazmak yeterli olacaktır.
Eğer değişkenler ve değerleri script dosyasının içerisinde tanımlanmış ise ve değerler
değiştirilmek isteniyorsa, script dosyasının içeriği değiştirilmelidir.
Eğer yapılacak iş script dosyasında tanımlanmış ve değişkenlerin değerleri komut satırından
alınmak isteniyorsa, script dosyasındaki değişkenlerle komut satırındaki değişkenlerin isimleri
aynı olmalıdır.
Script dosyasına input komutunu ekleyerek kullanıcıdan değerleri istenilebilir.
Dışarı çıkış vermek için disp ve fprintf fonksiyonlarını kullanırız.
İnput komutu:
İnput komutu sayesinde belirlediğimiz bir değişkene değerini sonradan atanabilir.
17
Değişken_adı=input(‘kullanıcının göreceği mesajı yazın ’)
Disp komutu:
Disp komutu sayesinde script dosyasında elde ettiğimiz sonucu komut ekranında gösterilebilir.
Disp(değişken adı) yada disp(‘kullanıcının göreceği mesaj ’)
disp komutunda hem değişken hem de mesajı aynı anda gösterilemez. fprintf komutundan temel
ayrıldığı nokta budur.
Fprintf komutu:
fprintf komutu mesaj ve elde edilen verinin ekrana yazılması yada bu verilerin bir dosyaya
yazdırılması sırasında kullanabilir.Bu komut sayesinde elde edilen çıkış gerekli durumlarda daha sonra
erişmek için bir text dosyasına yazabilir.
fprintf(‘ …text…. %g….%g….%f…. ’,değişken ismi1,değişken ismi2,…..)
% g,f kısmı değişkenin yazım formatını gösteriyor.3 önemli gösterim aşağıdadır.
%f:üstlü gösterim (küçük harflerle)
%g:%f’li gösterimin kısası
%i:tamsayı olarak gösterim.
fprintf komutu vektörsel bir komuttur.Eğer komutun barındırdığı değişken bir vektör yada matris ise
komut kendini vektördeki elemanlar adedince tekrarlar.
fprintf komutu ile bir dosyaya veri kaydetme
Bir veriyi bir dosyaya kaydetmek için üç önemli adım vardır.
1)fopen komutu ile bir dosya açılır.
Bir dosyaya veriyi yazmadan önce o dosyayı açmamız gerekmektedir.
Dosya_değişkeni=fopen(‘dosya adı’,’dosya için gerekli izin’)
Dosya değişkeni açılan dosyanın matlab tarafından algılanmasını sağlar.
Dosya için gerekli izin;
‘r’:dosyayı sadece okumak için açar.
‘w’:dosyaya veri eklemek için açar.eğer dosya zaten mevcutsa içerisindeki veriler silinir.
‘a’:’w’ile aynıdır sadece dosyanın içindeki veri silinmez yeni veri eski veriye eklenir.
2)fprintf komutu ile açılmış dosyaya veriyi yazma
fprintf(dosya değişkeni,‘ …text…. %g….%g….%f…. ’,değişken ismi1,değişken ismi2,…..)
3)Açılmış dosyayı fclose komutu ile kapatmak:
fclose(dosya değişkeni)
18
Sorular:
1)
0 dan 100 km kadar olan aralıktaki kilometre değerlerini mile çeviren bir script dosyası
yazınız.Elde ettiğimiz verileri bir dosyaya kaydedelim.
vkm=0:5:100;
vmil=vkm./1.609;
x=fopen('mil_karsıtı.txt','w');
fprintf(x,'mil
kilometre \n');
tablo=[vmil;vkm];
fprintf('\n')
fprintf(x,'%8.2f
%8.2f \n',tablo);
fclose(x);
(%8.2f virgülden sonra 2
basamak gösterir.)
2) 0-30 derece arası sinüs değerleri için bir vektör oluşturun ve bu değerleri bir dosyaya
kaydedin.
aci=0:30;
radyan=aci.*pi./180;
degerler=sin(radyan);
tablo=[aci;degerler];
x=fopen('sinüs değerleri.txt','w');
fprintf(x,'açı değerleri sinüs değeri
fprintf(x,'%8.2f \n',tablo);
fclose(x);
');
Matlab’ta Grafik Çizimi:
Matlabta 2 boyutta ve 3 boyutta olmak üzere 2 türlü grafik çizimi vardır.
2 Boyutta Grafik
plot komutu ile matlabta 2 boyutta çizim mümkündür.
plot(vektör1,vektör 2,’çizgi belirteçleri’)
Çizgi belirteçlerinde; çizgi türünü,rengini ve işaretleme tipini belirlenir.Çizgi belirteçleri özellikleri
isteğe bağlıdır.Matlabta aynı pencerede birden fazla grafik çizilirse matlab otomatik olarak farklı
renkte ve şekilde grafikler çizer.
Çizgi belirteçleri:
Çizgi türü;
Çizgi türü
Belirteç türü
19
Solid
Dashed
Dotted
Dash-dot
Çizgi rengi;
-:
-.
Belli başlı renkler için tablo;
Çizgi rengi
Kırmızı
Yeşil
Mavi
Sarı
Siyah
Belirteç türü
r
g
b
y
K
İşaretleme tipi;
İşaretleme tipi aynı sayfadaki birden fazla grafik çizilirse grafikleri ayırt etmek için kullanılabilir.
İşaretleme tipi
Artı işareti
Yuvarlak
Çarpı
Belirteç
+
o
*
İşaretleme türü
Kare
Elmas
Nokta
Belirteç
s
d
.
Grafik çizimleri bazı örnekler:
>> x=1:15;
>> y=100*rand(1,15)
y=
81.4724 90.5792 12.6987 91.3376 63.2359 9.7540 27.8498 54.6882 95.7507 96.4889
15.7613 97.0593 95.7167 48.5376 80.0280
>> plot(x,y,'--ro')
20
100
90
80
70
60
50
40
30
20
10
0
0
5
10
15
>> x=[-3:0.05:5];
>> y=sin(-2*x).*cos(4*x);
>> plot(x,y)
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-3
-2
-1
0
1
2
3
4
5
Eğer x vektörünün artış oranını artarsa, elde edilmek istenen grafikten uzaklaşılır.
21
X=[-3:0.3:5];
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-3
-2
-1
0
1
2
3
4
5
Elde edilen grafikler, edit -> copy figure dan kopyalayarak istenilen yerde kullanılabilir.
fplot
komutu ile de grafikler çizilebilir.fplot komutu ile plot komutu arasındaki fark; fplot komutu
ile grafik çizerken,çizilecek grafiğin limitleri ve çizilecek grafiğin komut içinde tanımlanmasıdır.
fplot(‘fonksiyon’,limitler,çizgi belirteçleri)
Örnek olarak;
fplot(‘sin(-2*x).*cos(4*x)’,*-3 3])
Birden fazla grafiği aynı sayfa üzerine çizmek;
Matlabta aynı figürün üstüne birden fazla grafik çizmeninbirden fazla yolu vardır.Ancak yalnızca 2
yoldan bahsedilecektir.
1)plot komutunun içine birden fazla eğri yazılırsa komut aynı figürün içine birden fazla grafiği
yazacaktır.
2)hold on v e hold off komutlarını kullanarak birden fazla grafiği aynı figüre çizebiliriz.
Örnek
>> x=[-2:0.01:4];
>> y=3*x.^3-26*x+6;
>> yd=9*x.^2-26;
>> ydd=18*x;
>> plot(x,y,'-b',x,yd,'--r',x,ydd,':k')
%2. Yol
%bir script dosyası içinde aynı örnek
x=[-2:0.01:4];
y=3*x.^3-26*x+6;
22
yd=9*x.^2-26;
ydd=18*x;
plot(x,y,'-b')
hold on
plot(x,yd,'--r')
plot(x,ydd,':k')
hold off
120
100
80
60
40
20
0
-20
-40
-2
-1
0
1
2
3
4
Bir grafiğin özelliklerini değiştirme:
 xlabel ve ylabel komutu:
xlabel(‘yazı’)
ylabel(‘yazı’)
X ve y eksenlerine isim verir
 title komutu
title(‘yazı’)
Grafiğe bir başlık ekler.
 legend komutu
legend(‘yazı1’,’yazı2’,…..pos)
Grafiğe bir gösterge ekler.pos ise bu göstergenin yerini belirler(-1,4 arası bir sayı)
 text komutu
text(x,y,‘yazı’)
Grafiğe istediğimiz yazıyı eklememizi sağlar.x,y lerde yazının grafikteki yerini gösterir.
 axis komutu
axis([xmin,xmax,ymin,ymax])
Grafikteki x ve y değerlerinin maximun ve minimumunu ayarlar.

grid komutu
grid on
23
grid off
Grafiğe gridler ekler ve çıkarır.
Örnek:
%script dosyasına yazılmıştır.
x=[10:0.1:22];
y=95000./x.^2;
xd=[10:2:22];
yd=[950 640 460 340 250 180 140];
plot(x,y,'-');
xlabel('UZAKLIK (CM)')
ylabel('ŞİDDET (LUX)')
title('Uzaklığa Bağlı Olarak Işık Yoğunluğu')
axis([8 24 0 1200])
text(14,700,'Teoriyle Deneyin Karşılaştırılması')
hold on
plot(xd,yd,'--ro')
legend('Teori','Deney',0)
hold off
Uzaklığa Bağlı Olarak Işık Yoğunluğu
1200
Teori
Deney
1000
ŞİDDET (LUX)
800
Teoriyle Deneyin Karşılaştırılması
600
400
200
0
8
10
12
14
16
18
UZAKLIK (CM)
20
22
24
Matlabta başka türlü grafik çizimleri de mevcuttur. Ama onlardan bahsedilmeyecektir.
Farklı grafikleri aynı sayfaya ayrı olarak çizdirme:
subplot(x,y,z) şeklinde kullanılır.
Burada;
x = satır sayısı
24
y = sütun sayısı,
z = indeks numarası'dır.
Sorular:
1)Depremin Richter ölçeğine göre büyüklüğü;
E
B=log10
10 4,4
B:büyüklük E:Depremden salınan enerji
Enerjinin büyüklüğe göre grafiğini çiziniz.(Büyüklük değerini 3 ≤ 𝐵 ≤ 5 alınız.)
m=[4:0.01:5];
e=10.^(3/2.*m+4.4);
plot(m,e)
title('Deprem Büyüklüğüne Göre Enerji Salınımı')
grid on
Grafiğin çok küçük bir aralıkta çizilmesini nedeni artış oranının çok yüksek olmasındandır.
11
8
x 10
Deprem Büyüklüğüne Göre Enerji Salınımı
7
6
5
4
3
2
1
0
4
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
5
Matlabta Fonksiyon Dosyaları ve Program Yazma
Matlabta Fonksiyon Dosyaları:
y=f(x) tipindeki matematiksel ifadeleri matlabta birer fonksiyon dosyası içinde yazmak daha
kullanışlı bir ifade şekli olacaktır.Bu sayede; yapılacak işlemin birçok kez tekrarlanma zahmetine
gerek kalmaz .Fonksiyon dosyaları ile matlabtaki sin(x),sqrt(x),median(x) gibi komutlar
oluşturabilir.Oluşturulan komutlar gerekli olan yerlede kullanılabilir.
25
Matlabta fonksiyon dosyası açmak için script dosyaları ile aynı yol izlenir.Script dosyaları ile
aralarındaki farkları ilerleyen bölümlerde anlatılacaktır.(file->new->script).
Matlabta fonksiyon dosyalarını çalışma mantığı; kendilerine verilen girdileri bir işleme sokan
ve bu işlem sonucunda oluşan verileri de çıkışa vermektir.
Fonksiyon Dosyalarının Yapısı:
Fonksiyon dosyalarında;
o Fonksiyon tanımlama satırı
o Girdi ve çıktı değişkenleri
o Yardım satırı(isteğe bağlı)
o Fonksiyon gövdesi
olmalıdır.
Fonksiyon tanımlama satırı:
Fonksiyon tanımlama satırı her fonksiyon için olmalıdır.fonksiyon tanımlama satırında
fonksiyonun ismi,giriş ve çıkış değişkenlerinin sırası ve sayısı belirtilmelidir.
function *çıkış değişkenleri+=fonk_ismi(giriş değişkenleri)
Şeklinde fonksiyon tanımlama satırı yazılabilir.
Girdi ve çıktı değişkenleri:
Fonksiyonun girdi değişkenleri genelde en az bir tanedir.Eğer birden fazla değişken varsa;
değişkenler virgülle ayrılır.Eğer girdi değişkenleri vektörler yada matrislerse; fonksiyon işlemleri
lineer cebir kurallarına göre yapılmalıdırlar.Fonksiyon çıktı değişkenleri eğer yalnızca bir tane ise
bracket’*+’ kullanmaya gerek yoktur.
Yardım satırı:
Yardım satırı % işareti ile başlar.% işareti ile başlayınca ,matlab buradaki yazılmış herhangi bir
kodu işleme almaz.Yardım satırının amacı kullanıcıya fonksiyonla ilgili bilgiler vermektir.Kullanıcı
komut satırına help fonksiyon_adı yazdığında bu yardım satırı ekrana verilecektir.
Fonksiyon gövdesi:
Fonksiyon gövdesinden fonksiyona yaptırmak istediğimiz işleri tanımlarız.Fonksiyon dosyaları
kullanılmadan önce kaydedilmek zorundadır.Kayıt için file menüsünden save as seçeneği
kullanılabilir.Kayıt ismi için fonksiyon adı ile aynı isim tercih edilmelidir.
Örnek:
function y= etu (x)
%bu fonsiyon ile y=f(x)cinsinden bir ifadeyi fonksiyon kullanarak
%hesaplayacağız.fonksiyonun içine hem matris hemde skalar bir ifade
%alabiliriz.
y=(x.^2.*2.^(x))./(2.*x);
Komut satırına
>> x=[-1 1 2 3 4]
26
x=
-1
1
2
3
4
>> etu(x)
ans =
-0.2500 1.0000 4.0000 12.0000 32.0000
>> help etu
bu fonsiyon ile y=f(x)cinsinden bir ifadeyi fonksiyon kullanarak
hesaplayacağız.fonksiyonun içine hem matris hemde skalar bir ifade
alacağız.
Fonksiyon dosyası ile script arasındaki benzerlikler ve farklar:
 Her iki dosya türüde .m dosya formatında kaydedilir.
 Fonksiyon dosyası ilk satırında tanımlama satırının içerir.
 Fonksiyon dosyası bir girdi alır ve onun değerini çıktı olarak geri verir.
Şimdiki örnekte hem script hem de fonksiyon dosyalarını kullanılacaktır.
Script dosyasının ismini matlatabki komut satırına yazarsak komutlar çalışmaya başlayacaktır.
Örnek
Fonksiyon dosyası
Function x=FtoC(s1)
%bu fonksiyon fahrenayt değerini santigrat dereceye çevirir.
x=5*(s1-32)./9;
Script dosyası
s1=input('fahrenatın ilk değerini giriniz:');
s2=input('diğer fahrenayt değerini giriniz');
delta=FtoC(s2)-FtoC(s1);
alpha=input('değişim oranını giriniz
');
a1=input('ilk kenar değerini giriniz');
b1=input('2. kenar değerini giriniz');
a2=a1+a1*alpha*delta;
b2=b1+b1*alpha*delta;
alandegisim=b2*a2-a1*b1;
fprintf('bu verilere göre alan değişimi %f',alandegisim);
Fonksiyonlarla ilgili komutlar:
İnline fonksiyonu:
Çok büyük boyutlu programlamada bir fonksiyon dosyası oluşturmadan basit programlar
oluşturmak için kullanılır.
İsim=inline(‘matematiksel ifadeler’)
Şeklinde ifade edilir.
27
Eğer inline komutunun içinde birden fazla değişken var ise
İsim=inline(‘matematiksel ifadeler’,’değişken1’,’değişken2’,..)
Yukarıdaki ifade de değişkenlerin sırasını yazma nedenimizi örnekte açıklayalım.
d=inline('sqrt(rA^2+rB^2-2*rA*rB*cos(aciB-aciA))','rA','aciA','rB','aciB')
d=
Inline function:
d(rA,aciA,rB,aciB) = sqrt(rA^2+rB^2-2*rA*rB*cos(aciB-aciA))
>> x=d(2,pi/6,5,3*pi/4)
x=
5.8461
Feval komutu:
feval komutu ile matlabtaki bir fonksiyonun istediğimiz değerini hesaplatılabilir.Eğer fonksiyon
birden fazla değişken içeriyorsa girdiler virgüllerle ayrılır.feval komutuyla elde ettiğimiz değeri bir
değişkene de atayabiliriz.
Değişken=feval(‘fonksiyon ismi’,girdi1,girdi2…)
>> feval('tan',pi/4)
ans =
1.0000
>> a=feval('etu',4)
(yukarda yazdığımız etu fonksiyonu)
a=
32
2)Matlabta Programlama
Matlab bir programın akışını düzenlemek için birçok özelliğe sahiptir.Koşul ifadeleri için if ve switch
komutları,bir komut dizinini bir çok kez çalıştırmak içinde for ve switch komutları vardır.
Koşul ve mantıksal operatörler:
Koşul operatörü
<
>
<=
>=
==
~=
Açıklama
Küçüktür
Büyüktür
Küçük eşittir
Büyük eşittir
Eşittir
Eşit değildir
28
>> 7<8
ans =
1
>> a=(2<=3)+(3==60/20)*(6>5)
a=
2
>> A=[18 22 32 21 0 5 6]
A=
18 22 32 21
0
5
6
>> B=[1 3 35 28 -8 7 5]
B=
1
3 35 28 -8
7
5
>> A==B
ans =
0
0
0
0
0
0
0
0
0
1
0
1
1
1
1
1
1
1
0
1
1
>> A>=B
ans =
1
1
>> A~=B
ans =
1
1
>> c=A-B<3
c=
0
0
1
29
Mantıksal
operatör
İsmi
açıklama
A&B
Ve
A|B
Veya
~A
Değil
Eğer 2side doğru ise 1
sonucunu verir.Diğer
durumlarda 0
Sadece 2 sininde sıfır
olduğu durumda 0
verir. Diğer durumlar
da 1
A işleminin tersini alır
Eğer A operatörü sıfırdan farklı bir sayı ise doğru, eğer sıfır ise yanlış verir.
>> 3&8
ans =
1
>> ~0
ans =
1
>> 38*((18&0)-(~0)+(12|11))
ans =
0
>> 0|0
ans =
0
İşlem önceliği:
1. Parantezler (iç içe parantezlerde en içteki parantezden başlayarak)
2. Üstsel işlemler
3. Mantıksal değil(~)
4. Bölme ve Çarpma
5. Toplama ve Çıkarma
6. Koşul operatörleri
7. Mantıksal ve
8. Mantıksal veya
Fonksiyon
and(a,b)
or(a,b)
not(a)
Açıklama
a&b ile aynı
a|b ile aynı
~a ile aynı
30
xor(a,b)
Eğer 2 değişken birbirinden farklı ise 1 verir
all(a)
Eğer vektördeki bütün elemanlar sıfırdan farklı
ise 1 verir.Eğer matris ise kullanılan satırları
vektör olarak alır
any(a)
Vektördeki en az bir eleman sıfırdan farklı ise 1
verir.Matris için satırları vektör olarak alır
find(a)
Vektördeki elemanlardan sıfırdan farklı
olanların yerini belirtir.
find(a>x)
Vektör elemanlarının x ten büyük olanlarının
yerini belirtir.
Örnek:
Bir şehirdeki nisan ayı sıcaklık değerleri 2 6 18 1 20 16 11 13 5 10 21 12 11
11 14 15 9 8 22 1 19 20 18 2 6 7 15 3 16 (sıcaklık değerlerini
round(22*rand(1,30)) ile oluşturuldu)
a)sıcaklığın 10 dan büyük olduğu günler hangileridir?
b)sıcaklığı 8 ile 12 arasında olduğu günler hangileridir?
c)sıcaklığın 15 olduğu gün sayısı kaç tanedir?
>> a=round(22*rand(1,30))
a=
Columns 1 through 24
2 6 18
20 18
1 20 16 11 13
5 10 21 12 11
5 11 14 15
Columns 25 through 30
2 6 7 15 3 16
>> x=find(a>10) (a şıkkının çözümü)
x=
3 5 6 7 8 11 12 13 15 16 17 20 22 23 24 28 30
>> y=find((a>=8)&(a<=12)) (b şıkkının çözümü)
y=
7 10 12 13 15 18 19
31
9
8 22
1 19
5
>> z=(a==15);
>> sum(z)
ans =
2
Koşul ifadeleri
Koşul ifadeleri; bir komut grubunun çalıştırılıp çalıştırılmayacağına programın karar vermesini
sağlayan ifadelerdir.Koşul ifadeleri olarak if ile switch-case komutları kullanılır.
if komutu
if koşul ifadesi
elseif koşul ifadesi
……..
……..
……..
else
end
şeklindedir.
Switch-case komutunu
switch seçilecek ifade
case değer1
case değer2
…….
…….
…….
otherwise
end
şeklindedir.
Döngüler:
for komutu
for a=b:c:d
………
……..
.......
end
(b=a ‘nın ilk değeri,c= artış miktarı,d=a’nın son değeri)
Şeklindedir.
32
while komutu
while durum ifadesi
…….
…….
…….
End
Şeklindedir.
Örnekler
1) Para birimlerini çeviren bir program yazınız.
1 tl=1.566 dolar=2.035 euro=2.42 is(İngiliz sterlini)=1.55 ad(Avustralya doları)
% 1 tl=1.566 dolar=2.035 euro=2.42 is(İngiliz sterlini)=1.55 ad(Avustralya
doları)
% bu tip bir soruda ilk başta alınan değeri biline bir değere çeviririz.
paramik=input('çevirilecek para miktarını giriniz');
parabir=input('çevirilecek paranın şuanki birimini girin','s');
cparabir=input('çevrilecek birimi girin','s');
hata=0;
switch parabir
case 'tl'
a=paramik;
case 'dolar'
a=paramik*1.566;
case 'euro'
a=paramik*2.035;
case 'is'
a=paramik*2.43;
case 'ad'
a=paramik*1.55;
otherwise
hata=1;
end
switch cparabir
case 'tl'
b=a;
case 'dolar'
b=a/1.566;
case 'euro'
b=a/2.035;
case 'is'
b=a/2.42;
case 'ad'
b=a/1.55;
otherwise
hata=1;
end
if hata
disp('hatalı girdi')
else
fprintf('para= %g %s',b,cparabir)
end
33
2)Küpü 4000 de büyük ve 3 ile bölünebilen en küçük sayıyıyı bulan bir script dosyası yazınız.
%küpü 4000 den büyük ve 3 e bölünebilen program
x=1;
a=1;
while x==1
if ((a^3)>=4000)&(rem(a,3)==0)
disp('istenilen rakam:\n');
disp(a);
x=0;
else
disp('olmadı');
disp(a);
a=a+1;
end
end
3)
1.4t
0≤t≤10 sn
𝜋
v(x)=
14+5 sin(10 (𝑡 − 10))
10≤t≤25 sn
9
25≤t≤35 sn
9
5
9- (𝑡 − 35)
35≤t≤40 sn
Yukarda verilen verilere göre hızı ve ivmeyi hesaplayan 2 ayrı fonksiyon dosyası ve bu fonksiyonları
kullanıp bir grafik çizdiren bir script dosyası yazınız.
Hız fonksiyonu
function x=hiz(t)
%verilen süre içindeki hızı ölçer ve sonucu verilen denkleme göre verir
lt=length(t);
for in=1:lt
if t(in)>0& t(in)<=10
x(in)=1.4*t(in);
elseif t(in)>10&t(in)<=25
x(in)=14+5*sin(pi/10*(t(in)-10));
elseif t(in)>25&t(in)<=35
x(in)=9;
elseif t(in)>35&t(in)<=40
x(in)=9-9/5*(t(in)-35);
end
end
İvme fonksiyonu
function a=ivme(t)
lt=length(t);
for in=1:lt
34
if t(in)>0& t(in)<=10
a(in)=1.4;
elseif t(in)>10&t(in)<=25
a(in)=5*pi/10*cos(pi/10*(t(in)-10));
elseif t(in)>25&t(in)<=35
a(in)=0;
elseif t(in)>35&t(in)<=40
a(in)=-9/5;
end
end
Script dosyası
t=0:1:40
v=hiz(t)
subplot(2,1,1);
plot(t,v);
grid
xlabel('zaman');
ylabel('hız');
axis([0 40 0 20]);
a=ivme(t);
subplot(2,1,2);
plot(t,a);
grid
xlabel('zaman');
ylabel('ivme');
axis([0 40 -2 2]);
Grafik çıktısı
20
hız
15
10
5
0
0
5
10
15
20
zaman
25
30
35
40
0
5
10
15
20
zaman
25
30
35
40
2
ivme
1
0
-1
-2
35
4)
newyork=[31 26 30 33 33 39 41 41 34 33 45 42 36 39 37 45 43 36 41
37 32 32 35 42 38 33 40 37 36 51 50]
alaska=[37 24 28 25 21 28 46 37 36 20 24 31 34 40 43 36 34 41 42 35
38 36 35 33 42 42 37 26 20 25 31]
Yukarda iki bölgenin bir aydaki günlük sıcaklıkları verilmiştir.
a)Her iki bölgenin sıcaklık ortalamalarını bulunuz,
b)Her iki bölgede kaç gün ortalamanın altında çıkmıştır,
c)Alaskanın Newyorktan daha sıcak olduğu günler ve kaç gün olduğu,
d)2 bölgedeki sıcaklığın aynı dolduğu gün sayısı,
e)2 bölgedeki sıcaklıkların 32 F küçük olduğu günler ve toplam sayısı,
soruları için bir program yazınız.
format short;
stny=[31 26 30 33 33 39 41 41 34 33 45 42 36 39 37 45 43 36 41 ...
37 32 32 35 42 38 33 40 37 36 51 50];
tanc=[37 24 28 25 21 28 46 37 36 20 24 31 34 40 43 36 34 41 42 35 ...
38 36 35 33 42 42 37 26 20 25 31];
ortny=mean(tny);
ortanc=mean(tanc);
fprintf('newyork sehrindeki ortalama %f',ortny);
fprintf('\n anchorage sehrindeki ortalama %f',ortanc);
ortbny=find(tny<ortny);
sayibuyukny=length(ortbny);
fprintf('\n newyork sehrindeki ortalama altı %f',sayibuyukny);
ortbnanc=find(tanc<ortanc);
sayibuyukanc=length(ortbnanc);
fprintf('\n anchorage sehrindeki ortalama altı %f',sayibuyukanc);
lt=length(tny);
sayi=1;
for in=1:lt
if tanc(in)>tny(in)
x(sayi)=in;
sayi=sayi+1;
end
end
fprintf('\n');
disp('anchorage şehrinin sıcaklığının newyorktan büyük olduğu günler');
disp(x);
fprintf('\n');
disp(' sıcaklığın büyük olduğu toplam sayi ');
disp(sayi-1);
(sayı değişkenini 1 den başlattığımız için)
sayi=1;
x=0;
for in=1:lt
if tanc(in)==tny(in)
x(sayi)=in;
sayi=sayi+1;
end
end
fprintf('\n anchorage şehrinin sıcaklığının newyorka eşit olduğu
günler');
disp(x);
fprintf('\n');
36
disp(' sıcaklığın eşit olduğu toplam sayi ');
disp(sayi-1);
sayi=1;
x=0;
for in=1:lt
if tanc(in)<32
x(sayi)=in;
sayi=sayi+1;
end
end
fprintf('\n anchorage şehrinin sıcaklığının dondurucu olduğu vakıtler');
disp(x)
fprintf('\n');
disp(' donduruculuğun toplam sayısı ');
disp(sayi-1);
sayi=1;
x=0;
for in=1:lt
if tny(in)<32
x(sayi)=in;
sayi=sayi+1;
end
end
fprintf('\n newyork şehrinin sıcaklığının dondurucu olduğu vakıtler');
disp(x);
fprintf('\n');
disp(' sıcaklığın dondurucu olduğu sayi ');
disp(sayi-1);
3 Boyutlu Grafikler:
Matlab iki boyutta olduğu gibi üç boyutta da çizim komutlarına sahiptir.
1)Çizgi Grafikleri:
Çizgi grafikleri 3 boyuttaki notların birleştirilmesi ile çizilir.
plot3(x,y,z,’çizgi belirteçleri’)
Komutu ile çizilir.
Örnek
>> t = 0:pi/50:10*pi;
>> plot3(sin(t),cos(t),t);
37
40
30
20
10
0
1
0.5
1
0.5
0
0
-0.5
-0.5
-1
-1
>> t = 0:pi/50:10*pi;
>> plot3(sin(3.*t).*cos(t),sin(3.*t).*sin(t),t);
35
30
25
20
15
10
5
0
1
1
0.5
0.5
0
0
-0.5
-0.5
-1
-1
2)Mesh ve Yüzey Grafikleri:
Mesh ve yüzey grafiklerini çizerken z=f(x,y) tipindeki denklemleri kullanılır. Burada z; x ve y’ye bağlı
bir fonksiyondur.Bu tür grafikler 3 adımda tamamlanır. Birinci adımda fonksiyonun tanımlı olduğu
düzlem oluşturulur. İkinci adımda fonksiyonu bütün düzlemdeki değerleri hesaplanır. Üçüncü adımda
ise fonksiyon çizilir.
38
1.adım:
x=a:b;
y=c:d;
[X,Y]=meshgrid(x,y)
2.adım
Z=f(X,Y);
3.adım
mesh(X,Y,Z) (mesh grafiği için)
surf(X,Y,Z) (yüzey grafikleri için)
Örnek:
1)
(𝑥 2 . 𝑦 2 )
𝑧= 2
(𝑥 + 𝑦 2 )
>> x=0:0.1:5;
>> y=2:0.1:6;
>> *X,Y+=meshgrid(x,y) (1.adım yapılmıştır.)
>>Z=(X.^2.*Y.^2)./(X.^2+Y.^2) (2.adım yapılmıştır.)
>>mesh(X,Y,Z)
>>surf(X,Y,Z)
(GRAFİKLER KOD SIRASINA GÖREDİR.)
15
10
5
0
6
5
4
3
2
0
1
39
2
3
4
5
15
10
5
0
6
5
5
4
4
3
2
3
2
𝟐
1
0
𝟐
2) 𝟏. 𝟖−𝟏.𝟓 𝒙 +𝒚 sin(x).cos(0.5y) denkleminin grafiğini çizdiriniz.
%yukarıda anlattığımız adımları takip ederek problemi çözeceğiz.
%hem mesh hemde yüzey grafiklerini kullanacağız.
>> x=-3:0.25:3;
>> y=-3:0.25:3;
>> [X,Y]=meshgrid(x,y);
>> Z=1.8.^(-1.5*sqrt(X.^2+Y.^2)).*cos(0.5*Y).*sin(X);
>> mesh(X,Y,Z)
>> xlabel('x')
>> ylabel('y')
>> zlabel('z')
40
0.4
z
0.2
0
-0.2
-0.4
4
2
4
2
0
0
-2
y
-2
-4
-4
x
>> surf(X,Y,Z)
>> xlabel('x')
>> ylabel('y')
>> zlabel('z')
41
0.4
z
0.2
0
-0.2
-0.4
4
2
4
2
0
0
-2
y
-2
-4
-4
x
Matlab 3 boyutlu grafikler için fazlaca komuta sahiptir genel olarak aynı şekilleri kullanırlar fakat
aralarında az da olsa farklar vardır.
Komutlar :
Komutun adı
Mesh curtain
Mesh ve kontur
Yüzey ve kontur
Işıklandırılmış yüzey
Waterfall
3 boyut kontur
Komut
meshz(X,Y,Z)
meshc(X,Y,Z)
surfc(X,Y,Z)
surfl(X,Y,Z)
waterfall(X,Y,Z)
contour3(X,Y,Z,n)(buradaki
n kontur sayısını belirtir)
Örnekler :
1) q1=2.10−10 yükü (0,25,0,0) noktasında q2=3.10−10 yüküde (-0.25,0,0) noktasındadır.x-y
düzlemindeki -0.2≤x≤0.2 ve -0.2≤y≤0.2 noktalarındaki elektrik potansiyeli hesaplayınız.ve
çizdiriniz.( ∈= 8.85.10−12 )
𝑣=
42
1 𝑞
4𝜋 ∈ 𝑟
>> eps=8.85e-12;
>> q1=2e-10;
>> q2=3e-10;
>> x=-0.2:0.001:0.2;
>> y=-0.2:0.001:0.2;
>> [X,Y]=meshgrid(x,y);
>> r1=sqrt((X+0.25).^2+(Y).^2);
>> r2=sqrt((X-0.25).^2+(Y).^2);
>> V=1/(4*pi*eps).*(q1./r1+q2./r2);
>> mesh(X,Y,V)
Grafik ekleyemedim
2) Yuvarlak bir merdiven aşagıdaki gibi modellenmektedir.
𝑡
x = Rcos(2𝜋𝑛 )
ℎ
y = Rsin 2𝜋𝑛
𝑧=
𝑡
ℎ
𝑡
ℎ
Burada R merdivenin yarıçapı,h katın uzunluğu,n ise merdivenin her katta yaptığı dönüş
sayısıdır.Yapılmakta olan iki katlı bir bina iki merdivene sahiptir.Birinci merdivenin yarıçapı 1.5
m,dönüş sayısı ise 3’tür. İkinci merdivenin yarıçapı 4m dönüş sayısı ise 2 dir. İki merdiveni de
kapsayan bir şekil çiziniz.(0≤t≤5)
>> r1=1.5;
>> r2=4;
>> n1=3;
>> n2=2;
>> t=0:0.01:5;
>> h=3;
>> x1=r1*cos(2.*pi.*n1.*(t./h));
>> x2=r2*cos(2.*pi.*n2.*(t./h));
>> y1=r1*sin(2.*pi.*n1.*(t./h));
>> y2=r2*sin(2.*pi.*n2.*(t./h));
>> z1=t./h;
>> z2=t./h;
>> plot3(x1,y1,z1,x2,y2,z2)
Soru ile ilgili olarak ilk başta kontur kullanmak gerektiğini düşünebilirsiniz fakat kontur ile çizim için 2
bağımsız bir bağımlı değişken olmalıdır. Aynı özellik mesh ve yüzey çizimleri içinde geçerlidir.
43
2
z
1.5
1
0.5
0
4
2
4
2
0
0
-2
y
-2
-4
-4
x
3) 𝑧 = (𝑦 + 3)2 + 1.5𝑥 2 − 𝑥 2 𝑦 denklemini -3≤x≤3 ,-3≤y≤3 sınırlar içinde grafik içinde hem
yüzey hemde kontur olacak şekilde çiziniz.
>> x=-3:0.01:3;
>> y=-3:0.01:3;
>> [X,Y]=meshgrid(x,y);
>> Z=(Y+3).^2+1.5.*X.^2-X.^2.*Y;
>> surfc(X,Y,Z)
>> xlabel('X')
>> ylabel('Y')
>> zlabel('Z')
Fonksiyonlarda Sayısal Çözümleme(Numerik Analiz)
Tek değişkenli fonksiyonların çözümü:
F(x)=0 olacak biçimde fonksiyonların çözümü için
X=fzero(‘fonksiyon’,a) ( buradaki a değeri fonksiyonun x ekseni kestiği noktaya yakın bir noktadır)
>> fplot('x*exp(-x)-0.2',[0,8])
>> grid
44
0.4
0.35
0.3
0.25
0.2
0.15
0.1
0.05
0
0
1
2
3
4
5
6
7
8
>> x1=fzero('x*exp(-x)-0.2',0.7) (fonksiyonda 2 adet sıfıra yakın nokta olduğu için 2 adet nokta var)
>>x1 =
0.2592
>> x2=fzero('x*exp(-x)-0.2',2.8)
x2 =
2.5426

fzero komutu fonksiyon x eksenini kestiğinde cevap bulabilir.eğer fonksiyon ekseni kesmeden
teğet geçerse fzero komutu bir sonuç bulamaz.
>> fplot('x^3-12*x^2+40.25*x-36.5',[0,8])
>> grid
30
20
10
0
-10
-20
-30
-40
0
1
2
3
4
5
45
6
7
8
>> x1=fzero('x^3-12*x^2+40.25*x-36.5',0.7)
x1 =
1.4776
Maksimum ve minimum değerleri bulmak:
Bir fonksiyonun x1≤x≤x2 aralığındaki minimum ya da maksimum noktasını bulmak için
x=fminbnd(‘fonksiyon’,x1,x2) (fonksiyonun minimum değerini bulmak için)
Komutu kullanılır.
Fonksiyonun maksimum noktasını bulmak için fonksiyon -1 değeri ile çarpılarak minimum değeri
bulunur.
Fonksiyonun hem minimum (maksimum) değerini hem de o noktadaki değerini bulmak için
*x fval+=fminbnd(‘fonksiyon’,x1,x2)
>> [x fval]=fminbnd('x^3-12*x^2+40.25*x-36.5',0,8) (fonksiyonun minimun değerini bulduk)
x=
5.6073
fval =
-11.8043
>> [x fval]=fminbnd('-x*exp(-x)+0.2',0,8)
(fonk. -1 ile çarpıp maksimun değerini bulduk)
x=
1.0000
fval =
-0.1679
Fonksiyonun entegral değerini bulmak:
Matlab entegral almak için quad, quadl ve trapz adıyla 3 çeşit komuta sahiptir. quad, quadl
komutları fonksiyon verildiği zaman kullanılır. trapz komutunda ise eğer fonksiyon data noktaları gibi
verildiğinde kullanılır.
46
quad-quadl komutları
a=quad(‘fonksiyon’,a,b)
b=quadl(‘fonksiyon’,a,b)
şeklinde yazılır.



(a,b değerleri integralin sınırlarıdır.)
Fonksiyonun *a,b+ aralığında dikey asimtotu olmamalı.
f(x) fonksiyonu vektörel şekilde yazılmalıdır.elementlerle işlemler şeklinde yazılmalıdır.
2 komut arasındaki fark hesaplama yaparken kullandıkların metot farklılıklarıdır.quadl
metotu daha kesin sonuçlar verir.
quadl komutunun en son harfi küçük harfli ‘L’ dir.
Örnek:
8
(𝑥. 𝑒 −𝑥
0.8
+ 0.2)𝑑𝑥
0
İntegralinin değerini bulunuz.
>> quad('x.*exp(-x.^0.8)+0.2',0,8)
ans =
3.1604
>> quadl('x.*exp(-x.^0.8)+0.2',0,8)
ans =
3.1604
trapz komutu
a=trapz(x,y) (x,y ‘ler birer vektördirler.)
>>q =[32 36.96 46 51.84 120 109.04 88.56 79.04 74 51.52 44 38.64 32]
32.0000 36.9600 46.0000 51.8400 120.0000 109.0400 88.5600 79.0400 74.0000 51.5200
44.0000 38.6400 32.0000
>> d=[1 32 60 91 121 152 182 213 244 274 305 335 366]
d=
1 32 60 91 121 152 182 213 244 274 305 335 366
>> trapz(d,q)
47
ans =
2.3506e+004
>> a=trapz(d,q)
a=
2.3506e+004
Adi Diferansiyel Denklemler:
Adi diferansiyel denklemler
𝑑𝑦
𝑑𝑥
= 𝑓(𝑥, 𝑦)
Şeklindeki diferansiyel denklemlerdir. Bu denklemin çözümü y=f(x) tipinde bir çözümdür ve
diferansiyel denklemi sağlar.
Diferansiyel denklemi çözmek için gerekli olan adımlar:
1.
Diferansiyel denklemi standart formda yazılması gerekir.
𝑑𝑦
(𝑑𝑥 = 𝑓(𝑥, 𝑦) 𝑥0 ≤ 𝑥 ≤ 𝑥1
𝑦 = 𝑦0
𝑥 = 𝑥0 𝑑𝑎
2.
Bir fonksiyon dosyası oluşturulur.
function dydt=diffe(t,y)
dydt=…….
3.
Çözüm metodunu seçeriz.
Diferansiyel denklem çözüm metodu
ode45
ode23
ode113
ode15s
ode23s
ode23t
ode23tb
Çözüm metotlarını farklılığı kullandıkları metotlar ve problem zorluğuna göre seçime
dayanıyor.En zor problemleri çözme sıraları yazım sırasına göredir.
4.
Diferansiyel denklemi çözeriz.
*t,y+=çözüm_metodu(‘diferansiyel fonk’,xaralığı,y0)
Örnek
𝑑𝑦 𝑡 3 − 2𝑦
=
1 ≤ 𝑡 ≤ 3 𝑦 = 4.2 𝑡 = 1
𝑑𝑡
𝑡
48
Fonksiyon dosyası
function dydt=diffe(t,y)
dydt=(t^3-2*y)/t;
Denklemin çözümü
>> [t y]=ode23tb('diffe',[1:0.3:3],4.2)
t=
1.0000
1.3000
1.6000
1.9000
2.2000
2.5000
2.8000
y=
4.2000
2.8038
2.3786
2.4768
2.9533
3.7628
4.8988
2)
𝑑𝑦
= 0.2𝑥𝑦 + 0.5𝑦 2 0 ≤ 𝑥 ≤ 4 𝑦(0) = −0.5
𝑑𝑥
function dydx=dif(x,y)
dydx=(0.2*x*y+0.5*y^2);
x y]=ode45('dif',[0:0.4:4],-0.5)
x=
0
0.4000
0.8000
1.2000
1.6000
2.0000
2.4000
2.8000
3.2000
3.6000
49
4.0000
y=
-0.5000
-0.4617
-0.4426
-0.4391
-0.4495
-0.4734
-0.5117
-0.5658
-0.6379
-0.7305
-0.8460
>> plot(x,y)
>> ylabel('y')
>> xlabel('x')
-0.4
-0.45
-0.5
-0.55
y
-0.6
-0.65
-0.7
-0.75
-0.8
-0.85
0
0.5
1
1.5
2
x
2.5
50
3
3.5
4
Genel Sorular:
1) Kullanıcıdan alınan bir sayının asal mı değil mi olduğunu kontrol eden bir program yazınız.
x=input('bir sayı giriniz asal mı değil mi belirleyelim
');
a=2;
for i=1:floor(x/2)
if rem(x,a)==0&&(x~=2)
fprintf('girilen %g sayısı %g ile tam bölünüyor bu sayı asal değil\n',x,a)
break;
else
if a==round(x/2)||(x==2)
disp('bu sayı asal')
end
a=a+1;
end
end
2) a) Bir uçağın yavaşlama ivmesi a= −0.0035v 2 − 3=
𝑑𝑣
𝑑𝑡
dir.Uçağın yere değme hızı 300km/s ise
uçağın hız zaman grafiğini çizdiriniz.
Fonksiyon dosyası
function dvdt=soru(t,v)
dvdt=-0.0035*v^2-3;
Ana program
>> [t,v]=ode23tb('soru',[0:0.5:12],83.333);
>> plot(t,v)
>>grid
>> axis([0 13 0 100])
>> ylabel('v')
>> xlabel('t')
>> help title
(helpten yardım aldık her komut için aynı process geçerli)
TITLE Graph title.
TITLE('text') adds text at the top of the current axis.
TITLE('text','Property1',PropertyValue1,'Property2',PropertyValue2,...)
sets the values of the specified properties of the title.
TITLE(AX,...) adds the title to the specified axes.
H = TITLE(...) returns the handle to the text object used as the title.
See also xlabel, ylabel, zlabel, text.
Reference page in Help browser
doc title
>> title('hız zaman grafiği')
51
hız zaman grafiği
100
90
80
70
v
60
50
40
30
20
10
0
0
2
4
6
8
10
t
b) Aynı uçağın durana kadar gideceği mesafeyi hesaplayınız.
>> [t,v]=ode23tb('soru',[0:0.5:12],83.333);
>> trapz(t,v)
ans =
315.3819
3) Aşağıdaki denklem sistemini çözdürünüz.
3x+2y-9z=-65
-9x-5y+2z=16
6x+7y+3z=5
>> A=[2 3 4;-1 -3 -1;1 1.5 2];
>> B=[10;12;0];
>> A\B
Warning: Matrix is singular to working
precision.
ans =
Inf
-Inf
52
12
-Inf
(birbirinden lineer bağımsız denklemler olmadıkları için sonuç sonsuz çıktı.)
4)
𝑎=1+
𝑥 𝑥2 𝑥3
+ + …
1! 2! 3!
Taylor serisi açılımının 𝑒 𝑥 eşit olduğunu gösteren bir program yazınız.
toplam=0;
x=1;
for i=0:1:100
toplam =toplam+(x^i/factorial(i));
end
if toplam==exp(1)
disp('eşit')
else
disp('yanlış')
end
5) 𝑌 = 𝑋 𝑛 1≤n≤5 değerleri için -10≤x≤10 aralığında aynı figür üstüne çiziniz.
x=-10:0.01:10;
for i=1:1:5
y=x.^i;
subplot(3,2,i)
plot(x,y)
end
53
10
100
0
50
-10
-10
-5
0
5
10
0
-10
1000
10000
0
5000
-1000
-10
-5
0
5
10
-5
0
5
10
0
-10
-5
0
5
10
-5
0
5
10
5
1
x 10
0
-1
-10
Kaynakça



Amos Gilat Matlab an Introduction With Applications (Wiley)
Kuncicky David C. Matlab Programming (Pearson)
Doğan İbrahim A'dan Z'ye Matlab ile Çalışmak (Bileşim yayınları teknik kitaplar)
54
Download