matlab - gantep.edu.traoarslan/files/matlab_sunum2.pdf · için matlab bir metin hazırlayıcısı...
TRANSCRIPT
MATLAB
2.DERS
MATLAB’DE DİZİLER Dizi (array), en genel tanımı ile nümerik veya metinsel değerler topluluğudur. (veri yapısı – data structure) MATLAB’de herşey bir dizi olarak işleme konur ve dizi en temel veri elemanıdır.
Reel ile kompleks sayıları ifade eden çift kat veya nümerik diziler (double veya numeric array)
Metin ifade eden diziler, karakter dizileri (char array)
MATLAB’DE DİZİLER (devam)
Bir nümerik dizi, skaler, vektör veya matris olabilir ve tüm nümerik diziler double array formatındadır.
1x1 dizisi, bir skaler (scalar) gösterir. (a=3, b=-6.5)
mx1 veya 1xn dizisi, bir vektör (vector) gösterir.
mxn veya nxm dizisi,bir matris (matrix) gösterir.
Bu çerçevede 1x1 dizisi sabit matris veya tek elemanlı matris, nx1dizisi sütun matrisi ve 1xn dizisi ise satır matrisi olarak da düşünülebilir.
Bir dizinin eleman sayısı, satır ile sütun sayısının çarpımıdır.
MATLAB’DE DİZİLER (devam) 1 2
3 4
5 6 A= 3x2 matrix 6 eleman
b=[1 2 3 4] 1x4 array 4 eleman, satır vektörü
c=
1
3
5
3x1 array 3 eleman, sütun vetörü
A(2,2)=4 b(3)=3 c(1)=1
Satır # Sütun #
VEKTÖRLER 1xn veya mx1 şeklinde tek boyutlu dizi olan vektörleri oluşturmanın iki temel yolu vardır:
i) Direkt olarak ( […] ile)
Satır vektörleri: >> f = [f1 f2 f3 ... fn] veya
>> f = [f1,f2,f3, ...,fn]
Sütun vektörleri: >> f = [f1; f2; f3; ...; fn]
ii) Eşit aralıklı elemanlar kullanarak (: ile)
f = İlkDeğer : DeğişimMiktarı : SonDeğer
Değişim miktarı belirtilmezse İlkDeger’den sonra 1’er artım olacağını ifade eder.
ÖRNEK : a=1:10 veya b=1:5:25
MATRİSLER
Matrisleri oluşturmanın en temel yolu […] kullanmaktır. mxn boyutundaki bir matrisin genel formatı:
F = [F11 F12 ... F1n ; F21 F22 ... F2n ; ..... ; Fm1 Fm2 ... Fmn] veya
F = [F11,F12, ... ,F1n ; F21,F22, ... ,F2n; ..... ;Fm1, Fm2, ... , Fmn]
mxn
mn
2n
1n
m2
22
12
m1
21
11
F
...
...
F
F
.
.
.
....
....
F
.
.
F
F
F
...
...
F
F
F
DİZİ EDİTÖRÜ (ARRAY EDITOR)
Çalışma alanında (workspace) herhangi bir değişkenin üzerini çift tıklarsanız Microsoft Excel tablosuna (spreadsheet) benzer bir pencere açılır sizin için. Buna dizi editörü ya da array editor denir. Değiskeninizin elemanlarını bu pencere yardımıyla da modifiye edebilirsiniz.
FONKSİYONLAR Fonksiyonlar da bilgisayar programlarıdır.
Bilgisayarlar yardımıyla çözülmeye çalışılan problemler fonksiyonlar sayesinde yönetilmesi daha kolay, küçük parçacıklara bölünürler. Her fonksiyon:
Kendine özgü bir isme sahiptir.
Kendine, üzerinde işlem yapacağı bir argüman (parametre) ya da argümanlar (parametreler) alır.
GENELLİKLE geriye bir değer döndürür. (skaler, vektör ya da matris.)
Örnek : rand(n,m)
MATLAB’DE DİZİLER (devam) Hem vektörler hem de matrisler yardimci (utility) fonksiyonlar (zeros, ones ve rand) kullanılarak da oluşturulabilir: zeros(1,n) veya zeros(n,1) zeros(n) veya zeros(n,n) zeros(n,m) ones(1,n) veya ones(n,1) ones(n) veya ones(n,n) ones(n,m) rand(n,m) rand(n) veya rand(n,n) round(rand(n,m)) fix(rand(n,m)) (Nasıl bir çıktı ????)
MATLAB’DE RASTGELE SAYI ÜRETİMİ rand(n,m) fonksiyonu MATLAB’de nxm boyutunda ve elemanlari
rastgele sayilar olan bir matris olusturur. Olusturulan bu rastgele sayilar 0 ile 1 arasindadir ve duzgun (uniformly) dagilimlidir.
Rastgele sayilardan olusan bu matrisin tum elemanlarini k gibi bir sayi ile carparak sayilari 0 ile k araligina cekebiliriz.
Ondalik sayilardan olusmus bir matrisin elemanlarini yuvarlayip tam sayi yapmak icin round fonksiyonunu kullanabiliriz.
a=rand(1,10) ??
b=round(40*rand(5,3)) ?? c= 40*round(rand(5,3)) ??
d=round(10+40*rand(5,3)) ?? e=10+40*round(rand(5,3))??
f=round(50+250*rand(3,4)) ?? g=round(1000*rand(1)) ??
DİZİLERE UYGULANABİLEN BAZI FONKSİYONLAR length(a): a vektörünün eleman sayısı sum(a): a vektörünün elemanlarının toplamı max(a): a vektörünün maksimum elemani min(a): a vektörünün minimum elemani size(b): b matrisinin boyutu (satır ve sütun) size(b,1): b matrisinin satır sayisi size(b,2): b matrisinin sütun sayisi sum(b): b matrisinin sütun başına eleman toplamı (!!! Satır Vektörü!!!) sum(sum(b)): ?????????
• a(n): a vektorunun n. eleman değeri • b(n,:): b matrisinin sadece n. satırı • b(:,n): b matrisinin sadece n. sütunu • b’: b matrisinin transpozesi yani devriği
det(b): b matrisinin determinantı !!!! (Kare matrisler için)!!!! inv(b) : b matrisinin tersi !!!!(Kare matrisler için)!!!! diag(b): b matrisinin ana diagonel (çapraz) elemanları Elemanter işlemler eleman eleman işlem demektir ve . işleci kullanılır:
Çarpma: .* , Bölme: ./ , Üs alma: .^ Örnek : Bir matrisin tüm elemanlarının karesini alma (a^2=a*a) ????
UYGULAMA Soru: MATLAB’in size fonksiyonunu kullanarak bir a vektörünün boyutunu nasıl bulursunuz?
• Cevap: max(size(a)) = length(a)
MATLAB’DA PROGRAMLAMA Bilgisayar programlamasında genel olarak belirli kalıp ve kurallara uyulur. Bir bilgisayar yazılımının oluşturulmasında genel olarak aşağıda sıralanan prosedüre uyulur:
Problemin tanımı (Ne-Niçin)
Çözüm yönteminin ve adımlarının belirlenmesi (algoritma: akış şemaları veya pseudo-kod)
Kodlama (Programlama diline çevirme)
Sınama (Test) (Programı çalıştırma)
Güncelleştirme
MATLAB’DA PROGRAMLAMA MATLAB’da programlama en genel olarak iki yolla yapılır:
- Komut satırında (in-line) programlama
- m-dosyalarıyla (m-files) programlama
m-dosyalarının da iki türü vardır:
- Düzyazı (script) m-dosyaları
- Fonksiyon (function) m-dosyaları
m dosyaları oluşturabilmek için bir metin editörüne ihtiyaç vardır.
MATLAB’ da Programlama
M-dosyası (M-File)
Bir senaryo dosyası (script file) özel bir görevi yerine getirmek için
gerekli MATLAB komutlarının saklandığı bir metin programıdır. Başka bir
ifadeyle; bir hesaplamayı gerçekleştirmek için yazılacak bir çok komut dizisi,
komut penceresinden tek tek girmek yerine bir dosyada saklanır daha sonra bu
dosya çalıştırılarak bu komutlar icra edilir. Bu dosyaların MATLAB’in çalıştığı
dizinde (current directory) "dosya_adı.m" uzantısıyla saklanmaları gerekir.
DOSYA ADLARININ İÇİNDE TÜRKÇE KARAKTERLER VE BOŞLUKLAR
KULLANILAMAZ.
Senaryo dosyalarının ( M-dosyalarının ) oluşturulması ve yazılması
için MATLAB bir metin hazırlayıcısı (text editor) sunmaktadır. Bu senaryo
dosyaları Windows’da Notepad gibi herhangi bir metin hazırlayıcısında da
yazılabilirler. MATLAB metin hazırlayıcısı ya “current directory” penceresinde
bos bir alana sag tiklayip “New, M-File” ile ya da kısaca “File” menüsünden
“New, M-File” ibaresini seçerek etkin hale getirilebilir.
Değişken sayısının fazla olması durumunda
Akış diyagramlarının uygulanmasında
Programdaki değişikliklerin kolayca yapılmasında
Örnek: Dışarıdan klavye yoluyla girilen dairenin yarıçapına göre alanini ve çevresini
hesaplayan bir MATLAB programini “alanVeCevreHesapla.m” adinda bir M-
dosyasi icinde yaziniz ve komut penceresinden “alanVeCevreHesapla” komutunu
yazarak calistiriniz.
M-dosyalarının Gerekliliği:
clc;
clear;
r = input('Dairenin yarıçapını giriniz = ');
alan=pi*r^2;
cevre=2*pi*r;
alan,cevre
MATEMATİKSEL VE MANTIKSAL OPERATÖRLER Program dallandıran bir çok yapıda, işlemler, sonucun "doğru“ (TRUE) (1) veya
"yanlış“ (FALSE) (0) olması durumları ile kontrol edilir. MATLAB'de 'doğru' veya
'yanlış' ifadeleri ile sonuçlar üreten iki çeşit operatör vardır. Bunlar matematiksel ve
mantıksal operatörlerdir. (Bir onceki derste aritmetik operatorleri gormustuk.
Dolayisiyla MATLAB‟de su ana kadar 3 tip operator gormus olduk.)
Matematiksel Karşılaştırma Operatörleri Bu operatörler iki değişkenin değer bakımından karşılaştırmasını yaparlar ve üretilen
sonucun doğru (1) veya yanlış (0) durumuna göre sonuçlar üretirler.
Genel kullanımları a1 işlem a2 şeklindedir. Burada a1 ve a2, aritmetik değerler,
değişkenler veya karakter dizileri olabilir, "işlem" ise, sözkonusu matematiksel kıyaslama
operatörlerinden biri olabilir. Eğer a1 ve a2 arasındaki ilişki operatörün belirttiği şekilde
ise sonuç 1 değerini alır. Eğer operatörün belirttiği durumdan farklı bir durum söz
konusu ise sonuç 0 değerini alır.
== Eşittir
~= Eşit değildir
> Büyüktür
>= Büyük veya eşittir
< Küçüktür
<= Küçük veya eşittir
5==6 → 0
5~=6 → 1
5>6 → 0
5>=6 → 0
5<6 → 1
5<=6 → 1
Eşitlik durumlarında verilen işaret iki adet eşittir "==" işaretinden oluşur. Oysa değişken
atamalarında kullandığımız eşittir "=" bir tanedir. Bu ikisi birbirlerinden farklı
operatörlerdir. "==" operatörü, kıyaslama durumlarında kullanılır ve mantıksal bir
sonuç üretir. "Eşit ise", "eşit midir?" şeklindeki durumlarda kullanılır. "=" işareti ise, bir
değişkene bir değer atamada (atama operatoru) kullanılır, örneğin MATLAB komut
penceresinde; 3=5 yazdığımızda; program hata üretir. Oysa 3==5 yazdığımızda bu “ 3,
5'e eşit midir? " anlamına gelir, kıyaslama yanlıştır ve MATLAB bu durum için “0”
cevabını üretir. Yeni başlayanlar için bir karşılaştırma durumunda tek eşittir "=" işareti
kullanmak, sık yapılan bir hatadır.
>> 3==5
ans =
0
>> 3 = 5
??? 3=5
!
Error: The expression to the left of the equals sign
is not a valid target for an assignment.
>> x=0;
>> y=sin(pi);
şeklinde yapılan iki değişken atamasını takiben yapılan x==y
karşılaştırmasının sonucu olarak 1 cevabı beklenirken, 0 cevabı
alınır. MATLAB, bu iki değeri farklı olarak algılamıştır. Çünkü
MATLAB'da sin(pi) değeri 0'a eşit değildir, sin(pi), yuvarlamadaki
farklılıktan ötürü 1.2246e-016 değerine sahiptir ve 0'a eşit
değildir. Yani teorik olarak birbirine eşit iki değer, aslında farklı
sayılara tekabül etmektedir.
>>x=0;
>>y=sin(pi);
>>x==y
ans = 0
Sık yapılabilecek diğer bir hata da karşılaştırma operatörlerinin aritmetik
operatörlerden daha sonra değerlendirildikleri durumunu ihmal etmektir. Yani
parantezlerden yararlanılmadığı durumlarda bile aritmetik işlemler, öncelikle yapılır.
2+8 > 8+3
(2+8) > (8+3)
Bu iki durumda da MATLAB„in üreteceği cevap 0'dır.
Mantıksal Operatörler
Bu operatörler, bir veya iki mantıksal anlamı olan ve mantıksal bir sonuç üreten
operatörlerdir. Üç tane çiftli mantık operatörü vardır. Bunlar; "AND", "OR" ve "XOR" dur.
Diğer bir mantık operatörü tekli yapıya sahip olan "NOT" operatörüdür. Çiftli yapıdaki
operatörlerin genel kullanımı a işlem b şeklinde iken tekli bir operatör olan "NOT" genel kullanımı işlem a şeklindedir. Burada a ve b değişkenler iken işlem, aşağıdaki
mantık operatörlerinden biridir, a ile b'nin arasındaki ilişki, operatörün belirttiği şekilde
ise sonuç 1, eğer değilse sonuç 0 olur.
Operatörler Komut karşılığı İşlevleri
a&b AND VE
a|b OR VEYA
xor(a,b) XOR Özel Veya
~a NOT Değil
Örnek:
>> k=4; m=5;
>> (k>6) and (m<8) HATALI YAZIM
??? (k>6) and (m<8)
|
Error: Unexpected MATLAB expression
>> (k>6) & (m<8)
ans =
0
0<=x<9 ifadesinin
MATLAB‟deki karşılığı:
(0<=x) & (x<9)
A B A & B
0 0 0
0 1 0
1 0 0
1 1 1
MANTIKSAL OPERATORLERIN DOGRULUK TABLOLARI
A B A | B
0 0 0
0 1 1
1 0 1
1 1 1
A B xor(A,B)
0 0 0
0 1 1
1 0 1
1 1 0
0 1
1 0
~A A
While Loops
Kontrol
yapıları
IF Switch
For Loop
if Deyiminin Üç Farkli Kullanim Sekli vardır.
if Şart 1. işlem 2. işlem 3. işlem : end
Bir mantıksal ifadeyi kontrol ederek bunun sonucuna göre mümkün seçeneklerden
birini icra edebilen bir komuttur.
if Şartlı deyimi (Conditional Statement)
if Şart 1.işlem; else 2. işlem end
if Şart … elseif … … else … end
Şart dediğimiz şey bir karşılaştırma ifadesi (a>b gibi) ya da
bir mantıksal ifadedir (a&b gibi).
Örnek: Girilen (okutulan) x ve y değerlerine göre aşağıdaki sonuc değerini bulan bir MATLAB programıni bir M-dosyasi icine yazınız ve komut penceresinden dosya adi ile calistiriniz.
x>y ise sonuc= (x-y)
x=y ise sonuc=(x+y)7
x<y ise sonuc=x*y
clc;
clear;
x=input('x değeri=');
y=input('y değeri=');
if x>y
sonuc=sqrt(x-y)
elseif x==y
sonuc=(x+y)^7
else
sonuc=x*y
end
ÇÖZÜM:
Uygulama:
Dışarıdan girilen x değerlerine göre aşağıdaki fonksiyonun değerini
hesaplayan bir MATLAB programını bir M-dosyası içine yazınız ve komut
penceresinden dosya adı ile çalıştırınız.
4
10
2
x
5x3xtan(x)
)x(log
1)xln(xxF(x)
5432xxxxxF(x)
1 < = x < 10
10 < = x