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 [email protected] 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