Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
MAT 307-NÜMERIK ANALIZMATLAB UYGULAMALARI
Dr. Aysun Tezel Özturan
18 Aralık 2019
Içindekiler
Tesekkür iii
Ön Söz v
1 MATLAB’A GIRIS 1
2 Lineer Denklem Sistemleri 69
3 Sayısal Türev 73
4 Sayısal Integral 85
5 Kısmi Diferansiyel Denklemler 97
v
1 MATLAB’A GIRIS
Bilgisayarlar ve Programlama
Bilgisayarlar, verilen girdi degerlerini belirtilen yöntemlerle isleyerek isteni-len sonuçları üretirler. Islenecek veriler ve kullanılcak yöntemler bilgisayaraprogram ile bildirilir. Program girdi degerlerini kullanarak istenilen çıktı de-gerlerinin elde edilebilmesi için bilgisayara iletilen komutlar dizisidir. Egerprogramdaki çözüm yolu yanlıs ise bulunacak sonuçlar da yanlıs olur. Hangisayısal yöntemin problem için uygun olacagı belirlenmelidir. Problem çok ka-rısık ve uzun ise parçalara bölünür, her parça için ayrı bir program yazılırve yazılan programlar bagımsız olarak çalıstırılır. Eger parçalar dogru çalı-sıyorsa birlestirilir ve sonuca ulasılır. Bazı program dilleri Fortran, C, C++,MATLAB, MATHCAD, MAPLE, Mathematica vb. Bu bölümde MATLAB prog-ram uygulamalarını gösterecegiz.
Problemin çözümünde izlenen adımlar dizisine algoritma denir. Algoritma,bilgisayara ögretilen islem basamaklarıdır. Bilgisayarda bir problem çözülür-ken neredeki ve hangi giris degerleri kullanılacak, bunlar hangi yöntemlerleislenecek, ne tür sonuçlar üretilecek ve bu sonuçlar nerede gösterilecek, so-nuçlar saklanacak mı gibi adımların hepsinin öncelikli olarak belirlenmesigerekir. Algoritma hazırlandıktan sonra istenilen programlama dilinin komut-ları ile program kodlanır. Program yazılırken iki türlü hata yapılabilir.
1. Yazım hatası: Programlama dilinin kurallarına uygun komut yazılmadıgıdurumlarda ortaya çıkar.
2. Mantık hatası: Komutlar dogru yazılsa da denklem kodlamaları yanlıs ak-tarılırsa ortaya çıkar.
Bilgisayar programları ile gerçeklestirilen islemler 3 ana gruba ayrılır.
1. Aritmetik Islemler: Toplama, çıkarma, çarpma, bölme islemleri yapılır, is-lemlerin öncelik sıraları önemlidir. Ondalıklı sayılar için bilgisayar dilinde ′.′
isareti kullanılır.
2. Karsılastırma Islemleri: Iki büyüklükten hangisinin büyük ya da küçük ol-dugu iki degiskenin birbirine esit olup olmadıgı gibi konulara program kararverebilir.
3. Mantıksal Islemler: Temel mantık islemleri ve, veya, degil yapılabilir. Prog-ramlarda karsılastırma islemlerinde birden fazla kosulun belirli bir özellikte
1
MATLAB’A GIRIS
saglanması istenebilir. Mantıksal islem operatörleri islemlerin öncelik sıra-sına dikkat edilerek konur.
MATLAB, MATrix LABoratory sözcüklerinin ilk üç harfleri kullanılarak eldeedilir. MATLAB matematik ve özellikle matris esaslı bir paket programlamadilidir. MATLAB 1985’lerde gelistirilmeye baslanmıs bir programdır. MATLAByüksek seviyeli bir programla dilidir, aynı zamanda verilerin görsellestiril-mesi, veri analizi ve sayısal hesaplamalar için etkilesimli bir yazılım paketidir.Içerdigi ’toolbox’ (alet kutusu) adı verilen paket aracılıgıyla kontrol tasarımı,test ve ölçüm, finansal modelleme ve analiz, optimizasyon gibi bir çok alandakullanılmaktadır.
MATLAB tüm mühendislik alanlarında, sayısal hesaplamalarda, veri çözüm-lenmesinde ve grafik islemlerinde kolaylıkla kullanılabilen bir programlamadilidir. MATLAB’ın hazır fonksiyonları sayesinde Fortran ve diger program-lama dillerine göre daha az sayıda komutlarla çözüm üretilebilmektedir. MAT-LAB m-dosyaları olarak bilinen pek çok sayıda fonksiyon dosyalarından (altprogramlardan) ibarettir.
MATLAB temelde sayısal ve analitik olarak matematiksel fonksiyonların ifa-delerinin kullanıldıgı basta mühendislik alanında olmak üzere sayısal ana-liz yöntemlerini kullanan bilimlerde son yıllarda oldukça sık kullanılan birhazır yazılım paketidir. Özellikle yüksek performans gerektiren algoritma ha-zırlama ve gelistirme, sayısal analiz, benzetim, mühendislik problemlerininsayısal ve grafik çözüm tekniklerinde son derece etkindir.
MATLAB programında islemleri yapmak için temel iki yöntem vardır. Ilk ola-rak Komut penceresinde islemleri yapabiliriz veya bir M-dosyası açıp komut-ları oraya yazabiliriz. M-dosyaları MATLAB ortamında kullanılan komutlardırve veri analizini saglayan fonksiyonlardır. Bu fonksiyonlar her amaca yeterliolsa da sonuçlara daha hızlı ulasabilmek için kullanıcıya özel fonksiyonlaryani yeni M-dosyaları olusturulabilir. Çesitli yollarla bu M-dosyalarını ha-zırlanabilir. Ya bir komutlar dizisi sayesinde sonuca ulasılır ya da functionkelimesiyle baslayan bir fonksiyonel dosya olusturulur. Önemli olan istenilensonucu kısa zamanda verebilmesidir. M-dosyası olusturmak için ilk yol ’File’menüsünden ’New’ alt menüsü içeriklerinden M-file seçenegini seçmektir, buseçimle istenilen alan olusturulmus olur. Baska bir yol ise Command Windowda ’Edit’ yazarak olusturmaktır.
Ardından kullanıcı amacına uygun bir program ya da fonksiyon yazabilir.Simdi Komut penceresine yazılan bazı basit komutlarla hangi islemleri yapa-bilecegimizi görelim.
MATLAB ile yapılabilecek bazı islemler sunlardır.
1. Matematiksel Islemler: Gelismis özellikleri olan bir hesap makinesi, kar-masık hesapları ve matris islemlerini çok kısa sürelerde yapabilir.
2
MATLAB’A GIRIS
2. Sayısal Islemler: Integral, türev, cebirsel ve diferansiyel denklemler gibiproblemleri çok kısa sürelerde hesaplar.
3. Simgesel Islemler: Yine integral, türev veya diferansiyel denklemlerin çö-zümü simgesel alet kutusu (symbolic toolbox) kullanılarak kolayca yapıla-bilir. Sayısal islemlerden farkı burada problemler analitik olarak çözülür veproblemin tam sonucuna ulasılır.
4. Grafikler: Sayısal verilerin veya fonksiyonların çesitli grafikleri Grafik aletkutusu (Figure toolbox) kullanılarak iki veya üç boyutlu olarak kolayca çizilir.
5. Veri Analizi yapılabilir.
6. Benzetim (Simulasyon) ve Model Olusturma: Simulink alet kutusu (Si-mulink toolbox) kullanılarak çok karmasık problemlerin modelleri kolaycakurulup çözülebilir.
7. Optimizasyon: Verilen fonksiyonunun en büyük veya en küçük degerlerioptimizasyon alet kutusu ile bulunabilir.
8. Istatistiksel Hesaplamalar: Bunlar için istatistik alet kutusu (statistic to-olbox) vardır.
MATLAB penceresi 5 alt bölümden olusur. Kullanıcının istegine göre pence-reler azaltılabilir.
Çizim matlab penceresi fotografı
MATLAB’ın kendi kütüphanelerinde pek çok tanımlı fonksiyon vardır. Bufonksiyonlar kullanılarak veya kullanıcı tarafından olusturulan M-dosyalarıkullanılarak pek çok islem yapılabilir.
MATLAB’da komut penceresinde yapılan islemlerin kaydı içinn diary ko-mutu kullanılır.
>> diary matlab1>> 3+5ans = 8
yapıldıgında 3 + 5 = 8 islemi matlab1 dosyasına kaydedilir. Bu dosya Cur-rent Directory kısmına kaydedilir. Kayıttan çıkmak için diary off komutukullanılır.
>> diary matlab1>> 3+5ans = 8>> diary off
3
MATLAB’A GIRIS
yapıldıgında matlab1 dosyası kapatılmıs olur. Bundan sonra yapılacak is-lemler kayıt altına alınmaz.
Temel Matematiksel Islemler
Bu program yardımıyla birçok matematiksel islem kolayca yapılabilir.
>> 3^4ans =81>> sqrt(3)ans = 1.7321>> log(1)ans = 0>> sin(pi/2)ans =1
Matematiksel islemlerden önce asagıdaki komutlar kullanılırsa olusacak so-nucun gösterim formatı degistirilebilir.
format long: Sonucun 14 ondalık haneye kadar rakamları gösterilir.
>> format long>> pians =3.141592653589793
format short: Sonucun 4 ondalık haneye kadar rakamları gösterilir.
>> format short>> pians =3.1416
format long e: Sonucu 14 ondalıklı olarak e gösterimi ile gösterir.
>> format long e>> pians =3.141592653589793e+000
format short e: Sonucu 4 ondalıklı olarak e gösterimi ile gösterir.
>> format short e>> pians =3.1416e+000
4
MATLAB’A GIRIS
MATLAB’da islem önceligi önemli bir konudur. Islem önceligi su seklidedir:
1. Parantezler (içeriden dısarıya dogru)
2. Üs alma
3. Çarpma ve bölme (soldan saga)
4. Toplama ve çıkarma (soldan saga)
Bazı örneklerle islem önceligine bakalım.
>> (5*2)+3ans =13>> 5*(2+3)ans =25>> 5*2+3ans =13>> (8/2)-3ans =1>> 8/(2-3)ans =-8>> 8/2-3ans =1>> 2+6/10ans =2.6000>> 2+3^2ans =11
Temel trigonometrik fonksiyonlar: cos, sin, tan, sec, csc, cot
Trigonometrik fonksiyonların tersleri: acos, asin, atan, asec, acsc, acot
Üstel fonksiyon: exp(x), x reel sayı
Dogal logaritma fonksiyonu: log(x), x pozitif reel sayı
Mutlak deger fonksiyonu: abs(x), x reel sayı
Faktöriyel fonksiyonu: factorial(n), n pozitif tam sayı
Hiperbolik fonksiyonlar: sinh, cosh
Isaret fonksiyonu: sign, x pozitifse 1, sıfır ise 0, negatifse −1 degerini verir.
>> sign(-6)ans =-1
MATLAB da hazır fonksiyonları ile ilgili bilgi alınmak istenirse help komutukullanılır. Örnegin log komutu ile ilgili bilgi istiyorsak
5
MATLAB’A GIRIS
>> help logLOG Natural logarithm.LOG(X) is the natural logarithm of the elements of X.Complex results are produced if X is not positive.See also log1p, log2, log10, exp, logm, reallog.Overloaded methods:gf/logcodistributed/logfints/logReference page in Help browserdoc log
Degiskenler
Tüm yazılabilir karakterler (Türkçe karakterler dısında) degisken olarak ata-nabilir ve ’=’ olarak verilir.
>> x=5x = 5
Degisken isimleri büyük ve küçük harf ayrımına hassastır. X ve x degiskenleriayrı olarak tanımlanabilir.
>> x^2-3*x+8ans = 18>> cos(x)ans =0.2837
Yeni bir ifade için bir önceki degisken kullanılabilir. Her islem sonucu bellektesaklanır.
>> x=4;>> y=5*xy = 20>> x=x+5x =9
who, komutu kullanılan degisken isimlerini verir.
>> whoYour variables are:x y
6
MATLAB’A GIRIS
whos, komutu degiskenlerin boyut bilgisini verir.
>> whosName Size Bytes Class Attributesx 1x1 8 doubley 1x1 8 double
Bellekteki degiskenleri silmek için clear degisken adı seklinde komut kul-lanılır. Örnegin x degiskenini silmek istiyorsak clean x yazarız. Eger tümdegiskenler silinmek isteniyorsa clean all komutu kullanılır. Eger komutpenceresindeki tüm komutlar silinmek isteniyorsa ’clc’ komutu kullanılır.Ancak bu komutla sadece komut penceresi temizlenmis olur, hafızadaki de-giskenler silinmez.
MATLAB programında bazı degisken isimleri önceden tanımlanmıstır.
ans, Inf, pi, eps degisken isimleri tanımlıdır.
ans: MATLAB herhangi bir islemin sonucunu herhangi bir degisken atanma-mıssa sonucu ans isimli degiskene atar.
>> 7*8-6ans = 50>> ansans =50
Inf: Sonsuz için kullanılır. Örnegin 1/0 bölümü bize sonsuzu verir.
>> 1/0ans =Inf
pi: π sayısı için kullanılır.
>> pians =3.1416>> format long>> pians =3.141592653589793
eps: Sıfıra yakın bir sayı olarak kullanılan ε için kullanılır. Tanımlanmıs de-geri ε = 2.2204e− 016
>> epsans =2.2204e-016
7
MATLAB’A GIRIS
Nan: Herhangi bir sayıya esit olmayan ifadeler için kullanılır. (Not a number)Örnegin 0/0 bir belirsizliktir ve herhangi bir sayıya esit degildir.
>> 0/0ans =NaN
MATLAB programında % isaretinden sonra yazılan yazılar kod olarak algılan-maz. % isaretinden sonra açıklayıcı ifadeler yazılabilir.
>> x=5; %x degiskenine 5 degeri atanmıstır.
Iliskisel Operatörler
Operatör Anlamı Örnek> ...den küçük 5 < 8
> ...den büyük 9 > 3
≤ ...den küçük veya esit 5 ≤ 8
≥ ...den büyük veya esit 9 ≥ 3
== esit 9 == 9
∼= esit degil 3 ∼= 5
Eger sonuç dogru ise cevap 1 yanlıs ise cevap 0 olarak alınır.
>> 5<8ans =1>> 5>8ans =0>> 9==9ans =1
Mantıksal Operatörler
A ve B mantık önermeleri olmak üzere asagıdaki mantıksal operatörler ta-nımlıdır.
Operatör Simge Örnek& ve A & B| veya A|B
~ veya not degil ~ A
| (veya): Eger verilen kosullardan biri dogru ise sonuç dogru olur, hepsi yanlısise sonuç yanlıstır.
8
MATLAB’A GIRIS
& (ve): Eger verilen ifadelerin tamamı dogru ise sonuç dogru bir tanesi yanlısise tamamı yanlıstır.
~ (degil) Verilen kosulun tersi alınır. Yani dogru ise yanlıs, yanlıs ise dogruyapar.
>> a=1; b=2; c=3;>> a>b | c>bans =1
Burada a>b yanlıs, c>b dogru bir ifadedir. Arada veya oldugu için sonuçdogrudur.
>> a>b & c>bans =0
Aynı ifade & (ve) ile kullanıldıgında sonuç yanlıs olur.
>> not(a>b & c>b)ans =1
Aynı ifadenin önüne not degil operatörü getirildiginde önceki ifade yanlısoldugundan degili, dogru olmustur.
>> a>b | (a>b & c>b)ans =0
Üç ifade vardır, önce parantez içi sonuçlanır. Parantez içi yanlıstır, a>b ifade-side yanlıs oldugu için, veya operatör sonucu yanlıstır, yani sıfırdır.
Eger ikiden fazla kosul ifadesi parantez kullanılmadan birlestirilirse kosullarislem önceligine göre sıralanır. Islem sırası ~, & ve | seklindedir.
Vektör Olusturma
MATLAB programında vektör olusturma 3 yolla yapılabilir.
1. Dogrudan: köseli parantez kullanılır:
>> v=[1 7 -9 3]v =1 7 -9 3
Burada v satır vektörü olusturulmustur.
9
MATLAB’A GIRIS
>> v=[1;7;-9;3]v =17-93
Burada v sütun vektörü olusturulmustur.
2. Esit aralıklı elemanlar kullanarak:
: iki nokta üst üste isaretiyle vektör elemanları sabit miktarda artan veyaazalan degerler alarak vektör olusturulabilir.
>> v=1:4v =1 2 3 4
v vektörü 1 den baslayıp 4 e kadar tamsayıları verir. Genel olarak
v=a:h:b
burada h artıs miktarıdır, a ve b noktaları arasında h artıs miktarı ile noktalarolusturulur. Artıs miktarı h istenildigi gibi alınabilir, alınmazsa 1 birim olarakkabul edilir.
>> v=1:2:7v =1 3 5 7
v vektörü 1 den baslayıp 2 artıs miktarı ile 7 ye kadar olan sayılardan olus-mustur.
3. linspace veya logspace komutlarıyla:
Bu durumda baslangıç ve bitis noktaları arasında kaç nokta olacagı belirle-nir.
v=linspace(a,b,n)
burada n istenen nokta sayısıdır. Bu komutla v vektörünün elemanları ave b noktaları arasında esit aralıklı n noktadır. Eger n belirtilmezse a ve bnoktaları arasında esit aralıklı 100 nokta alınır.
>> v=linspace(1,2,5)v =1.0000 1.2500 1.5000 1.7500 2.0000
10
MATLAB’A GIRIS
v=logspace(a,b)
komutu ile 10a ve 10b arasında 50 tane logaritmik olarak esit aralıklı noktalarolusturur.
v=logspace(a,b,n)
komutu ile 10a ve 10b arasında n tane logaritmik olarak esit aralıklı noktalarolusturur.
4. Özel fonksiyonlar kullanarak: (rand, randn, ones, zeros)
rand: Bu komut ile 0 ile 1 arasında rasgele bir reel sayı üretir.
v=a+(b-a)*rand(m,n)
a ve b arasında esit olarak dagıtılmıs rasgele sayılardan olusan m× n matrisüretir. Satır vektöründe m = 1 sütun vektöründe n = 1 olur.
rand veya randn fonksiyonları bazı durumlarda yalnızca bir özelligi veya birseyi denemek ve durumunu gözlemek için rasgele sayılardan olusmus birmatris olusturmak için kullanılır. rand düzenli olarak dagılmıs randn isenormal olarak dagılmıs rasgele sayı üretir.
Örnegin; a = 2 ile b = 8 arasında rasgele sayılı 1×5 bir vektör üretmek istenirse
>> v=2+6*rand(1,5)v =6.8883 7.4348 2.7619 7.4803 5.7942
Vektörlerle ilgili özel islemler yapan hazır fonksiyonlar vardır.
>> v=[4 7 9 11 3 5 8]v =4 7 9 11 3 5 8>> min(v) %vektörün en küçük elemanını bulur.ans =3>> max(v) %vektörün en büyük elemanını bulur.ans =11>> mean(v) %elemanların ortalamasını bulurans =6.7143>> sum(v) %elemanların toplamını bulurans =47>> length(v) %vektörün uzunlugunu bulurans =7>> prod(v) %elemanların çarpımını bulurans =332640>> sort(v) %elemanları küçükten büyüge sıralarans =3 4 5 7 8 9 11
11
MATLAB’A GIRIS
Karmasık Sayılar
Genel formatı a+ ib, a− ib olan ifadelerdir.
>> 3-2ians = 3.0000 - 2.0000i
Karmasık sayıların tanımında complex fonksiyonu da kullanılabilir. Bu fonk-siyon karmasık sayının gerçel ve sanal kısımlarını verir.
>> x=3; y=4;>> complex(x,y)ans = 3.0000 + 4.0000i
Karmasık Sayı islemleri
abs: Mutlak deger alır (Genlik bilgisi).
angle: Faz açısı.
conj: Karmasık eslenik.
imag: Karmasık sanal kısım.
real: Karmasık gerçel kısım.
Temel Istatistiksel Islemler
Özellikle gürültü gibi stokastik veriler üzerinde yapılacak analizler ve deger-lendirilmeler için istatistiksel yöntemleri MATLAB da kullanmak mümkün-dür. Bilinen en temel komutlar;
max: Veri kümesindeki en büyük degeri bulur.
min: Veri kümesindeki en küçük degeri bulur.
length: Küme içinde kaç eleman oldugunu verir.
sum: Kümenin içindeki elemanların toplamını verir.
prod: Verilerin çarpımını hesaplar.
median: Verilerin ortanca degerini hesaplar.
std: Standart sapma.
mean: Ortalama deger ya da aritmetik ortalama.
geomean: Geometrik ortalama.
harmmean: Harmonik ortalama.
sort: Küme elemanlarını azalan sırada hazırlar.
12
MATLAB’A GIRIS
Yuvarlatma Islemleri
fix(x): x’in sıfıra dogru en yakın tamsayısını verir.
>> fix(3.44)ans =3
floor(x): x’ ten küçük veya esit en yakın tam sayıya dogru yuvarlatır.
>> floor(5.21)ans =5
ceil(x): x’ten büyük veya esit en yakın tam sayıya dogru yuvarlatır.
>> ceil(5.21)ans =6
round(x): x’e en yakın tamsayıya yuvarlatır.
>> round(2.49)ans =2>> round(2.5)ans =3
Matrisler
Matris olusturmak için köseli parantez kullanılır ve ; ile satırlar ayrılır.
>> A=[1 2 1 0;-2 1 0 3;0 -1 2 1 ]A =1 2 1 0-2 1 0 30 -1 2 1
Sonuç verecek olan bir komut satırı sonuna ; konulursa komut penceresindeo komutun olusturdugu degiskenin degeri yazılı olarak görünmez.
>> B=[1 -1 0; 2 0 1];
Matrisin transpozu ’ ile alınır.
13
MATLAB’A GIRIS
>> A=[1 2 1 0;-2 1 0 3;0 -1 2 1 ];>> A’ans =1 -2 02 1 -11 0 20 3 1
n bir skaler olmak üzere A^n , A matrisinin n kere çarpımını ifade eder. Bununiçin A kare matris olmalıdır.
>> A=[1 2;-1 3];>> A^3ans =-9 22-11 13
Matrislerle Islemler
Toplama Islemi: A ve B matrisleri m × n matrisler ise matris toplamı elemaneleman yapılır.
>> A=[2 5;8 9];>> B=[4 7;2 5];>> A+Bans =6 1210 14
Çıkarma Islemi: A ve B matrisleri m× n matrisler ise matriste çıkarma islemieleman eleman yapılır.
>> A=[2 5;8 9];>> B=[4 7;2 5];>> A-Bans =-2 -26 4
Çarpma Islemi: A matrisi m× n ve B matrisi n× p olsun.
14
MATLAB’A GIRIS
>> A=[2 5;8 9];>> B=[4 7;2 5];>> A*Bans =18 3950 101
Matrislerde asagıdaki komutlar kullanılarak istenilen elemanlara veya altblok matrislere ulasılabilir.
(a) A(i,j) gösterimi i. satır j. sütun elemanını gösterir.
(b) A(i:j) gösterimi ilk sütundan baslayarak i. eleman ile j. eleman arasın-daki elemanları [A(i) A(i+1)... A(j)] seklinde bir vektörü verir.
(c) A(:,j) gösterimi A matirisinin j. sütununu verir.
(d) A(:, i:j) gösterimi [A(:,i);A(:,i+1);...;A(:,j)] seklinde i. sü-tundan j. sütuna kadar sütunlardan olusan bir alt matrisi verir.
(e) A(i,:) gösterimi A matirisinin i. satırını verir.
(f) A(i:j,:) gösterimi [A(i,:);A(i+1,:);...;A(j,:)] seklinde i. satır-dan j. satıra kadar satırlardan olusan bir alt matrisi verir.
>> A=[3 5 1 -2 7;4 7 5 6 3;2 1 7 8 2]A =3 5 1 -2 74 7 5 6 32 1 7 8 2>> A(2,3)ans =5>> A(1:6)ans =3 4 2 5 7 1% A matrisinin 1. elemandan 6. elemana kadar olan elemanlar verir.>> A(3,:)ans =2 1 7 8 2>> A(2:3,:)ans =4 7 5 6 32 1 7 8 2>> A(:,3)
15
MATLAB’A GIRIS
ans =157>> A(:,2:3)ans =5 17 51 7
find komutu: Bu komut ile verilen bir kosulu saglayan elemanların yerlerigösterilir.
>> A=[-2 3 4 4;0 5 -1 6;6 8 0 1]A =-2 3 4 40 5 -1 66 8 0 1>> k=find(A==0)k =29
Yani A matrisinin 0 olan elemanları 2 ve 9. elemanlarıdır. find komutu Amatrisini sütun vektörü gibi alır ve A matrisinin elemanları asagıdaki gibinumaralandırılmıs olur.
1 4 7 102 5 8 113 6 9 12
>> A=[-2 3 4 4;0 5 -1 6;6 8 0 1]A =-2 3 4 40 5 -1 66 8 0 1>> n=find(A<=0)n =128
16
MATLAB’A GIRIS
9>> A(n)ans =-20-10
A matrisinin pozitif olmayan elemanlarının bulundugu yerler bulunmustur,A(n) komutuyla ise elemanların degerlerini verir.
>> m=find(A’==0)m =511
Burada A’ oldugundan elemanlar satır olarak yerlestirilmistir.
Dizilerin Eleman Eleman Islemleri
a = [3 7 − 3 4], b = [1 4 − 2 − 2] dizileri verilsin. Eleman eleman çarpıma.*b seklinde gösterilir. Burada . eleman-eleman islemi göstermektedir. Budurumda a nın her bir elemanı sırasıyla b dizisinin karsılık gelen her birelemanı ile çarpılır.
>> a=[3 7 -3 4];>> b=[1 4 -2 -2];>> a.*bans =3 28 6 -8
Saga Bölme: a./b komutu ile a nın her bir elemanı sırasıyla b dizisinin kar-sılık gelen her bir elemanı ile bölünür.
>> a=[3 7 -3 4];>> b=[1 4 -2 -2];>> a./bans =3.0000 1.7500 1.5000 -2.0000
Sola Bölme: a.\b komutu ile b nın her bir elemanı sırasıyla a dizisinin kar-sılık gelen her bir elemanı ile bölünür.
>> a=[3 7 -3 4];>> b=[1 4 -2 -2];>> a.\bans =0.3333 0.5714 0.6667 -0.5000
17
MATLAB’A GIRIS
Üs alma: a.^b komutu ile a nın her bir elemanı sırasıyla b dizisindeki karsılıkgelen elemanların üssüne yükseltilir.
>> a=[3 7 -3 4];>> b=[1 4 -2 -2];>> a.^bans =1.0e+003 *0.0030 2.4010 0.0001 0.0001
Bu islemler kullanılarak fonksiyon degerleri istenilen aralıkta hesaplanabilir.Örnegin
>> x=0:0.1:10;>> y=2*x.^2+3*x+5;
komutlarıyla y = 2x2 + 3x+ 5 fonksiyonunun [0, 10] aralıgında x degiskenindeadım uzunlugu 0.1 alınarak hesaplanmıs olur.
Nokta Çarpımı
MATLAB dilinde vektörlerle yapılan islemler çarpma ’.’, nokta çarpım ’.*’,Bölme ’./’ veya ’.\’, Üst alma ’.^’ olarak kullanılır. Yani nokta isaretli is-lemler elemanter islem yapılacagını gösterir. n bir skaler olmak üzere A.^n,A matrisindeki her bir elemanın n. kuvvetinin alınacagını ifade eder. Vektör-lerin nokta çarpımında, karsılıklı her eleman çarpılır ve birikmis toplam eldeedilir. Nokta çarpım simetriktir aynı sonuç alınır.
>> A=[1 2;-1 3];>> A.^3ans =1 8-1 27>> v=[1;-1;3];>> w=[1;2;-1];>> v.*wans =1-2-3>> dot(v,w)ans =-4
Bir vektörün boyu ‖v‖ =√v.v
18
MATLAB’A GIRIS
>> v=[1;-1;3];>> vlength=sqrt(dot(v,v))vlength = 3.3166
Vektörün boyu için norm komutu da kullanılabilir.
>> norm(v)ans =3.3166
Iki vektör arasındaki açı θ su seklide bulunabilir. v.w = ‖v‖‖w‖ cos θ oldugun-dan θ = arccos
(v.w‖v‖‖w‖
)olur.
>> v=[1;-1;3];>> w=[1;2;-1];>> theta=acos(dot(v,w)/(norm(v)*norm(w)))theta =2.0856>> theta=theta*180/pitheta = 119.4962 (Radyan çıkan sonucun derece karsılıgı)
MATLAB programında matrislerle ilgili pek çok islem yapılabilir. Bunlardanbazıları determinant bulma, ters matris bulma, matrisi alt ve üst üçgenlerseklinde çarpanlara ayırma, matrisin özdegerlerini ve özvektörlerini bulmavb. Asagıda bu islemler için komutlar verilmistir.
det(A): A, n× n matrisinin determinantını bulur.
inv(A): A n × n matrisinin eger tersi varsa tersini bulur. A−1 komutu dakullanılabilir.
[L,U]=lu(A): A matrisini A=L*U olacak sekilde çarpanlara ayırır. Burada Lalt üçgen matris, U üst üçgen matristir.
eig(A): A matrisinin özdegerlerini bulur (Özdegerler det(A− λI)(x) = 0 denk-leminin çözümleridir). [V,D]=eig(A) seklinde kullanılırsa D kösegen matri-sin kösegen elemanları özdeger, V matrisinin sütunları özvektörleri verir. YaniX*V=V*D veya V−1*X*V=D esitlikleri saglanır.
diag(A): Bir matrisin kösegenindeki elemanları verir.
Simdi örnek üzerinden hazır fonksiyonların kullanımını görelim.
>> A=[1 1 1;2 2 2;1 -1 3];>> det(A)ans =0>> [L,U]=lu(A)
19
MATLAB’A GIRIS
L =0.5000 0 1.00001.0000 0 00.5000 1.0000 0U =2 2 20 -2 20 0 0>> eig(A)ans =-0.00003.0000 + 1.0000i3.0000 - 1.0000i>> [v,d]=eig(A)v =-0.8165 -0.4082 - 0.0000i -0.4082 + 0.0000i0.4082 -0.8165 -0.81650.4082 -0.0000 - 0.4082i -0.0000 + 0.4082id =-0.0000 0 00 3.0000 + 1.0000i 00 0 3.0000 - 1.0000i>> diag(A)ans =123
Eger yukarıda verilen A matrisinin tersini bulmak istersek, A matrisinin tersiolmadıgı için
>> inv(A)Warning: Matrix is singular to working precision.ans =Inf Inf InfInf Inf InfInf Inf Inf
ile karsılasılır.
>> A=[1 1 1;2 1 2;1 -1 3];>> inv(A)
20
MATLAB’A GIRIS
ans =-2.5000 2.0000 -0.50002.0000 -1.0000 01.5000 -1.0000 0.5000
Sonucun saglanması için tersi ile kendisinin çarpımı birim matrisi vermelidir.Yani A*A−1=A−1*A=In esitligi saglanmalıdır. Burada In, n×n birim matrisdir.
Bir matrisin tüm karesel alt matrislerinden, determinantı sıfırdan farklı olanen yüksek boyutlusunun boyutuna A matrisinin rankı denir. size komutu Amatrisinin boyutlarını verir, satır ve sütun sayısını verir.
>> A=[1 1 1;2 2 2;1 -1 3]A =1 1 12 2 21 -1 3>> rank(A)ans =2>> size(A)ans = 3 3
MATLAB programında bazı özel matrisler ve vektörler tanımlanmıstır.
zeros(m,n): Bu komut elemanları sıfır olan boyutu m × n olan bir matrisolusturur.
>> zeros(2,3)ans =0 0 00 0 0
ones(m,n): Bu komut elemanları bir olan boyutu m×n olan bir matris olus-turur.
>> ones(3,1)ans =111
eye(n): Bu komut boyutu n× n olan birim matris olusturur.
21
MATLAB’A GIRIS
>> eye(3)ans =1 0 00 1 00 0 1
MATLAB’ da özel matrisler olan pek çok elemanı sıfır olan matrisler sparsekomutu ile olusturulabilir.
Örnek 1.0.1 S(1, 2) = 10, S(3, 3) = 11 ve S(5, 4) = 12 ve diger elemanları sıfırolan 5× 4 lük bir S matrisi olusturalım.
>> i=[1,3,5];>> j=[2,3,4];>> v=[10 11 12];>> S=sparse(i,j,v)S =(1,2) 10(3,3) 11(5,4) 12>> T=full(S)T =0 10 0 00 0 0 00 0 11 00 0 0 00 0 0 12
Örnek 1.0.2 Verilen n degeri için asagıdaki seyrek (sparse) matrisi olusturanbir kod yazalım. Bu matrise üç kösegenli matris denir.
B =
1 n−2 2 n− 1
−3 3 n− 2. . . . . . . . .
−n+ 1 n− 1 1−n n
22
MATLAB’A GIRIS
Kod asagıdaki gibi yazılabilir:
>> n=5;>> l=-(2:n+1)’; d=(1:n)’; u=((n+1):-1:2)’;>> B=spdiags([l d u],-1:1,n,n);>> full(B)ans =1 5 0 0 0-2 2 4 0 00 -3 3 3 00 0 -4 4 20 0 0 -5 5
Grafik Çizimi
MATLAB programında
• iki boyutlu grafikler: plot, ezplot, fplot, semilogx, semilogy,
loglog, plotyy
• dilim, bar grafikleri: bar, barh, pie
• üç boyutlu grafikler: plot3, ezplot3, pie3, mesh, surface
komutları ile çizilebilir. MATLAB ile istenilen çizgi türünde, renkte veya se-kilde grafik çizilebilir. Asagıdaki tabloda kullanılan çizgi türü, sekil ve renklerverilmistir. hold on komutu yazıldıktan sonra çizilen tüm grafikler aynı pen-
Renk Isaret Çizgiy sarı ∗ yıldız : noktam magenta s kare .- nokta süreklic pembe d elmas - süreklir kırmızı v üçgen asagı – kesiklig yesil ^ üçgen yukarıb mavi < üçgen solak siyah > üçgen saga
cerede çizilir. hold off komutu yazıldıktan sonra bu özellik kaldırılır. Çizi-len grafige baslık title, x-ekseni etiketi xlabel, y-ekseni etiketi ylabel veaçıklayıcı bilgi legend komutlarıyla eklenir. grid komutu ile grafige ızgaraçizgileri eklenir. Kaldırmak için grid off komutu kullanılır. Varolan çizilmisgrafikleri kaldırmak için clf komutu kullanılır.
23
MATLAB’A GIRIS
Örnek 1.0.3
y=sin x fonksiyonunun grafigini [0,2π] aralıgında çizelim. Ilk olarak adımuzunlugunu h=0.5 alalım.
>> x=0:0.5:2*pi;>> y=sin(x);>> plot(x,y)>> title(’y=sin x, h=0.5’)>> xlabel(’x ekseni’)>> ylabel(’y ekseni’)>> legend(’sinüs grafigi’)>> grid
Sekil 1.1 de grafik çizilmistir. Buradan da görüldügü gibi bu h degeri büyük-tür.
0 1 2 3 4 5 6
x ekseni
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
y ek
seni
y=sin x, h=0.5
Sekil 1.1: y = sinx fonksiyonunun grafigi, h = 0.5
Simdi adım uzunlugunu h = 0.1 alalım ve yeniden grafigi çizelim.
>> x=0:0.1:2*pi;>> y=sin(x);>> plot(x,y)>> title(’y=sin x, h=0.1’)>> grid on
24
MATLAB’A GIRIS
0 1 2 3 4 5 6 7
x ekseni
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
y ek
seni
y=sin x, h=0.1
Sekil 1.2: y = sinx fonksiyonunun grafigi, h = 0.1
Asagıda Sekil 1.2’de grafik verilmistir.Matrislerde gördügümüz find komutu ile grafikte istenen degerler isaretle-nebilir. Sekil 1.3 de bir örnek çizilmistir.
>> x=0:0.1:2*pi;>> y=sin(x);>> plot(x,y,’:’)>> k=find(y>0.5)k =Columns 1 through 117 8 9 10 11 12 13 14 15 16 17Columns 12 through 2118 19 20 21 22 23 24 25 26 27>> hold on>> plot(x(k),y(k),’o’)>> grid on>> title(’y=sin x grafigi, y>0.5 noktaları’)
subplot komutu ile birden fazla grafik aynı ekranda çizilebilir. subplot ko-mutu ile grafik penceresi istenen grafik penceresine bölünebilir ve her grafikpenceresine istenen grafik çizilebilir.subplot(M,N,P) seklinde kullanılır. Grafik penceresi pencerelere bölünür.Daha sonra sırasıyla plot komutuyla grafikler çizilir.
25
MATLAB’A GIRIS
0 1 2 3 4 5 6 7-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Sekil 1.3: y = sinx fonksiyonunun grafigi, y > 0.5 olan noktalar
Pencereler M tane satır, N tane sütun olur ve grafik P ninci pencereye çizilir.Birinci pencere sol üst kösededir.
Örnek 1.0.4
y=x^2, y=-x, y=x^3 ve y=ex fonksiyonlarını [-10,10] aralıgı için aynı pen-cereye çizelim. Örnek çizim Sekil 1.4’de verilmistir.
>> x=-10:.1:10;>> y1=x.^2;>> y2=-x;>> y3=x.^3;>> y4=exp(x);>> subplot(2,2,1); plot(x,y1);>> title(’y=x^2’);>> subplot(2,2,2); plot(x,y2);>> title(’y=-x’);>> subplot(2,2,3); plot(x,y3);>> title(’y=x^3’);>> subplot(2,2,4); plot(x,y4);>> title(’y=e^x’);
26
MATLAB’A GIRIS
-10 -5 0 5 100
50
100y=x2
-10 -5 0 5 10-10
-5
0
5
10y=-x
-10 -5 0 5 10-1000
-500
0
500
1000y=x3
-10 -5 0 5 100
1
2
3#104 y=ex
Sekil 1.4: Subplot komutu
semilogx, semilogy komutları: plot komutundan farklı olarak (plot ko-mutunda eksenler dogrusaldır), bu komutlarda eksenlerden biri logaritmikölçege göre çizilir. semilogx komutu ile x ekseni, semilogy komutu ile y ek-seni logaritmik ölçege göre çizilir. Bunun dısında kullanımı plot komutu ileaynıdır. Asagıdaki komut dizisi ile elde edilen çizim Sekil 1.5’de gösterilmistir.
>> x=1:100;>> y=x.^2;>> subplot(1,2,1); semilogx(y);>> title(’y=x^2;x-ekseni logaritmik’)>> subplot(1,2,2); semilogy(y);>> title(’y=x^2;y-ekseni logaritmik’)
loglog komutu: Grafigin x ve y ekseninde logaritmik olarak gösterildigi gra-fik türüdür. Kullanımı plot ile aynıdır. Tek fark eksen degerlerinin logaritmikartısıdır.
plotyy komutu: Iki farklı fonksiyonun çizimi için kullanılabilir. Kullanımıplotyy(x1,y1,x2,y2,’fonk1’,’fonk2’) seklindedir.
>> x=1:10;>> y1=x.^2+1;>> y2=x.^5+x.^3+1;
27
MATLAB’A GIRIS
100 101 1020
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000y=x2;x-ekseni logaritmik
0 50 100100
101
102
103
104y=x2;y-ekseni logaritmik
Sekil 1.5: Semilog komutu
>> plotyy(x,y1,x,y2)>> legend(’y1=x^2+1’,’y2=x^5+x^3+1’)>> title(’plotyy komutu’)
Sekil 1.6’de soldaki grafik y1 fonksiyonunun, sagdaki grafik y2 fonksiyonu-nun grafigidir. plotyy komutu yerine hold on komutu da kullanılabilir.
Fonksiyon Tanımlama ve Grafikleri
Bir fonksiyonun önceden tanımlanıp sonra grafiginin çizildigi grafik seklidir.Fonksiyonu saglayan noktaların bulunmasına gerek yoktur.fplot komutu: Kullanım sekli fplot(fonksiyon, limitler, ’çizgi türü’)seklindedir. Fonksiyon dört sekilde tanımlanabilir. Örnek olarak sin(x+1)fonksiyonunun dört farklı sekilde tanımlanmasına bakalım.1. fplot(@(x) sin(x+1),... olarak tanımlanabilir. Örnegin sin(x+1) fonk-siyonunun grafigini [2π,10π] aralıgında fplot komutu ile çizdirelim.
>> fplot(@(x)sin(x+1),[2*pi 10*pi])>> title(’y=sin(x+1)’)
Sekil 1.7 de grafik çizilmistir.2. Fonksiyon için M-dosyası olusturulur. Bunun için MATLAB ana pancere-sinde File menüsünden New veya New Function File seçilir, bu sekildeEditör açılmıs olur. Açılan sayfaya asagıdaki kod yazılır:
28
MATLAB’A GIRIS
1 2 3 4 5 6 7 8 9 100
20
40
60
80
100
120plotyy komutu
0
2
4
6
8
10
12#104
y1=x2+1
y2=x5+x3+1
Sekil 1.6: plotyy komutu
10 15 20 25 30-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1y=sin(x+1)
Sekil 1.7: fplot komutu
function f=fonk(x)f=sin(x+1)
29
MATLAB’A GIRIS
Burada function komutu ile çıktısı f olan ve girdisi x olan fonksiyon olus-turulmus olur. Fonksiyonun ismi fonk olarak verilmistir. f çıktısının tanımısin(x+1) olarak yapıldıgı için istenilen fonksiyon olusturulmus olur. Bu M-dosyası fonk olarak MATLAB programının oldugu klasöre kaydedilir.
a) f=@fonk; fplot(f,...) olarak kullanılabilir. Örnegin
>> f=@fonk;>> fplot(f,[2*pi 10*pi]);
b) fplot(’fonk’,...) olarak kullanılabilir.
>> fplot(’fonk’,[2*pi 10*pi])
3. Fonksiyon inline komutu ile tanımlanabilir.
fonk=inline(’sin(x+1)’)fplot(fonk,...)
olarak grafik çizilir. Örnegin
>> fonk=inline(’sin(x+1)’)fonk =Inline function:fonk(x) = sin(x+1)>> fplot(fonk, [2*pi 10*pi])
4. fplot(’sin(x+1)’,...) seklinde grafik çizilir. Örnegin
>> fplot(’sin(x+1)’,[2*pi 10*pi])
ezplot komutu: Verilen fonksiyonu varsayılan aralık olan −2 ∗ pi < x < 2 ∗ piiçin çizdirir. ezplot(fonksiyon, [min max]) komutu ile verilen fonksiyonverilen aralıkta min<x<max için çizdirir.
ezplot(fonksiyon, [xmin xmax ymin ymax]) kapalı olarak verilen fonk-siyon verilen aralıklar için çizdirir. x degerleri xmin<x<xmax ve y degerleriymin<y<ymax için çizilir. Örnegin x^2+y^2=1 kapalı olarak tanımlanmıs fonk-siyonun grafigini çizelim. Sekil 1.8 de grafik çizilmistir.
>> ezplot(’x.^2+y.^2-1’,[-2 2 -2 2])>> grid on>> title(’x^2+y^2-1=0’)
30
MATLAB’A GIRIS
Sekil 1.8: ezplot komutu
Sekil 1.9: bar komutu
31
MATLAB’A GIRIS
Çubuk Grafikleri: bar, barh komutları kullanılır. Sekil 1.9 de çubuk grafi-gine örnek verilmistir.
>> y=[75, 91, 105, 123,131, 150, 179, 203, 226, 249, 281];>> figure; bar(y);
barh komutu ile yatay çubuklar çizilir.Dilim Grafikleri: pie komutu ile çizilir. pie(x), pie(x, Ayri) olarak kul-lanılır. Örnegin
>> X=[2 3 4 5 6];>> pie(X);
Bitisik olarak dilim grafigi çizer.
>> X=[2 3 4 5 6];>> Ayri=[0 1 0 0 1];>> pie(X, Ayri)
1 olanlar ayrık, 0 olanlar bitisik olarak çizilir. Sekil 1.10 de dilim grafigi çizil-mistir.
Sekil 1.10: pie komutu
pie(X,{’D1’,’D2’,’D3’,’D4’,’D5’}) olarak yazılırsa dilimlere isimlendirmeyapılmıstır. MATLAB programında üç boyutlu olarak da çizilebilir.pie3(X), pie3(X,Ayri), pie3(X,isimler) seklinde üç boyutlu dilim gra-fikleri çizilebilir. Sekil 1.11 de üç boyutlu dilim grafigi çizilmistir.
32
MATLAB’A GIRIS
Sekil 1.11: pie3 komutu
>> pie3([14 18 23 8 3 5 2], [0 0 0 0 0 1 0])
Üç Boyutlu Grafikler:mesh(Z), mesh(X,Y,Z) olarak kullanılabilir. Öncelikle X,Y degerleri olustu-rulur. Sonra karsılık gelen Z degerleri olusturulur.
Örnek 1.0.5 f(x, y) = e(−0.1(x2+y2)) cos(x2 + y2) fonksiyonunun grafigini
[x,y]=[-5,5]x[-5,5] degerleri için çizelim.
>> [X,Y]=meshgrid(-5:0.1:5);>> Z=exp(-1/10*(X.^2+Y.^2)).*cos(X.^2+Y.^2);>> mesh(Z)>> title(’f(x,y)=e^{-0.1(x^2+y^2)}cos(x^2+y^2)’)
Sekil 1.12 da fonksiyonun grafigi verilmistir. contour komutu ile yüzeyinseviye (es yükselti) egrileri çizilir.
figure[X,Y]=meshgrid(-2:0.05:2);f=-X.*Y.*exp(-2*(X.^2+Y.^2));[C,h]=contour(X,Y,f);clabel(C,h)title(’f(x,y)=-xye^{-2(x^2+y^2)} fonksiyonunun seviye egrileri’)grid on
33
MATLAB’A GIRIS
Sekil 1.12: mesh komutu
Sekil 1.13: contour komutu
34
MATLAB’A GIRIS
Sekil 1.13 de fonksiyonun seviye egrileri çizilmistir.
figure komutu ile yeni bir grafik penceresi açılır.
Yüzey Grafikleri: surface komutu ile çizilebilir. f(x, y) = y sinx− x cos y fonk-siyonu ile belirlenen yüzeyin grafigini örnek olarak çizelim.
>> [X,Y]=meshgrid(-2*pi:0.1:2*pi);>> Z=Y.*sin(X)-X.*cos(Y);>> surf(Z)>> title(’f(x,y)=ysinx-xcosy’)
Sekil 1.14 de yüzeyin grafigi çizilmistir.
Sekil 1.14: surf komutu
Üç Boyutlu Çizgi Grafikleri: plot3, ezplot3 komutlarıyla çizilir.
plot3 komutu: Kullanımı plot ile aynıdır.
Örnek 1.0.6
>> x=0:.01:10*pi;>> y=cos(x);>> z=sin(x);>> plot3(x,y,z)>> grid on>> xlabel(’x’); ylabel(’y=cosx’);zlabel(’z=sinx’)
35
MATLAB’A GIRIS
Sekil 1.15: plot3 komutu
Sekil 1.15 de çizgi grafigi çizilmistir.
ezplot3 komutu:
ezplot(fonk_x,fonk_y,fonk_z)ezplot(fonk_x,fonk_y,fonk_z, [tmin, tmax])ezplot(fonk_x,fonk_y,fonk_z, animate)
animate ifadesi ile çizgi grafigi üzerinde hareket eden parlak bir yıldız sek-linde animasyon grafige eklenir. Tanımlanan fonksiyonların hepsi aynı degis-kene baglı olmalıdır.
>> ezplot3(’cos(t)’,’sin(t)’,’t’,[0 10*pi],’animate’)
Sekil 1.16 da animasyonlu çizgi grafigi çizilmistir.
Polinomlar
p : R→ R derecesi n olan polinom
p(x) = anxn + an−1x
n−1 + · · ·+ a1x+ a0
seklinde tanımlıdır. Burada ai ∈ R, i = 0, · · · , n. MATLAB programında poli-nomlar katsayıların azalan sırada sıralandıgı birer satır vektörü olarak gös-terilir. Örnegin p=[8 0 4 -2 0 1 0 10] satır vektörü
36
MATLAB’A GIRIS
Sekil 1.16: ezplot3 komutu
p(x) = 8x7 + 4x5 − 2x4 + x2 + 10
polinomu için kullanılır. Polinom islemleri için pek çok hazır fonksiyon vardır.
polyval komutu: p(x) = 8x3 + 4x2 − 2x − 3 polinomunun x = 2 noktasındaaldıgı degeri hesaplatalım.
>> p=[8 4 -2 -3]p =8 4 -2 -3>> x=2;>> b=polyval(p,x)b =73
Aynı polinomun x = [2 4 1 1] noktalarındaki degerlerini bulalım.
>> p=[8 4 -2 -3];>> x=[2 4 1 1];>> b=polyval(p,x)b =73 565 7 7
Aynı polinomun matris seklinde verilmis x degerlerinde hesaplayalım.
37
MATLAB’A GIRIS
>> p=[8 4 -2 -3];>> x=[1 2 3 4;1 4 7 8]x =1 2 3 41 4 7 8>> b=polyval(p,x)b =7 73 243 5657 565 2923 4333
Aynı polinomu x = [1, 5] aralıgında hesaplatalım.
>> p=[8 4 -2 -3];>> x=linspace(1,5,10);>> b=polyval(p,x);>> plot(x,b,’k-’)>> grid on
Sekil 1.17 de polinomun grafigi çizilmistir.
Sekil 1.17: polyval komutu
roots komutu: p(x) = 0 yapan noktaları yani polinomun köklerini bulur.p(x) = x3 + 4x2 − 3x− 7 polinomunun köklerini bulalım.
38
MATLAB’A GIRIS
>> p=[1 4 -3 -7];>> r=roots(p)r =-4.31941.4427-1.1233
poly(roots) komutu kökleri roots satır vektöründe verilen polinomu olus-turur.
>> roots=[3 5];>> p=poly(roots)p =1 -8 15
Yani kökleri 3 ve 5 olan polinom p(x) = x2 − 8x + 15 olarak bulunmus olur.Polinomlarda çarpma islemine bakalım. p(x) = 4x3 − 4x2 + 5 polinomunu 9 ileçarpalım.
>> p=[4 -4 5];>> pp=9*ppp =36 -36 45
Simdi iki polinomun çarpımına bakalım. conv komutu ile polinomlarda çarpmaislemi yapılır. Örnegin p1(x) = 3x3 + 7x2 + 2x+ 4 ve p2(x) = x2 + x+ 1 polinom-larının çarpımlarını yapalım.
>> p1=[3 7 2 4];>> p2=[1 1 1];>> pp=conv(p1,p2)pp =3 10 12 13 6 4
Yani çarpım polinomu pp(x) = 3x5 + 10x4 + 12x3 + 13x2 + 6x+ 4 olarak bulunur.
deconv komutu ile polinomların bölümü yapılır. [d,r]=deconv(p1,p2) ko-mutu ile p1 polinomu p2 polinomuna bölündügünde bölüm d kalan r olur.p1 = 5x3 + 3x2 + 2x+ 1, p2(x) = x2 + 2x+ 1 ise p1/p2 bölümünü yapalım.
>> p1=[5 3 2 1];>> p2=[1 2 1];>> [d,r]=deconv(p1,p2)d =5 -7r =0 0 11 8
39
MATLAB’A GIRIS
Yani bölüm d(x) = 5x− 7 kalan r(x) = 11x+ 8 olur.
polyder komutu: Polinomun türevini bulur. p(x) = x4 + 5x3 + 4x2 + 3 olsun,birinci türevini bulalım.
>> p=[1 5 4 0 3];>> pd=polyder(p)pd =4 15 8 0
Yani türev p′(x) = 4x3 + 15x2 + 8x olur.
residue komutu ile P (x) polinomunun Q(x) polinomuna bölümünü basitkesirlere ayırır. [r,p,k]=residue(P,Q) komutu ile basit kesirlere ayrılmayapılır, burada r pay katsayılarını, p bu katsayılara karsılık gelen payda kök-lerini, k ise bölümden kalanı gösterir. Benzer sekilde [P,Q]=residue(r,p,k)komutu ile basit kesirlerden olusan polinom bölmesi elde edilir.
Interpolasyon, Ekstrapolasyon ve Regresyon
Tablo halinde verilen sayısal verilerin ara degerini bulmaya interpolasyon, dısdegerlerini bulmaya ekstrapolasyon denir. Gerek interpolasyon gerekse ekst-rapolasyon yapmada en uygun yol o degerlerden geçen en uygun polinomundenklemini bulmak ve onu kullanmaktır. Tablo halinde verilen degerlerdengeçen en uygun polinomu bulma islemine ise regresyon denir.
interp1 komutu: x ve y iki vektör için y_i=interp1(x,y,x_i) verilen xvektörlerindeki x_i ara degerine karsılık gelen y_i degerini verir.
y_i=interp1(x,y,x_i,’metod’) komutunda metod: lineer, spline veya kü-bik seklinde olabilir. interp1 komutu aynı zamanda ekstrapolasyon içindekullanılabilir.
Örnek olarak asagıdaki verilere bakalım.
x=[3 5 8 12], y=[45 67 92 150] olsun. x=13 iken y nin degerini yakla-sık olarak spline eksrapolasyonu ile bulalım.
>> x=[3 5 8 12];>> y=[45 67 92 150];>> y13=interp1(x,y,13,’spline’)y13 =175.1905
Regresyon: Tablo halinde verilen degerlerden geçen en uygun polinomu bulmaislemidir. MATLAB’da verilere egri uydurma islemi polyfit komutu kullanı-larak yapılır.
40
MATLAB’A GIRIS
polyfit komutu: Verilen degerlere uyan polinomu bulur. polyfit(x,y,n)seklinde kullanılır. Burada x ve y vektörleri n ise polinomun derecesidir. Egern=1 seçilirse polinom lineer, n=2 seçilirse kuadratik (ikinci dereceden) poli-nom olur. Egri uydurmada sahip olunan veri uzunlugu n ile tanımlandıgındaegri uydurumunda kullanılacak polinomun maksimum derecesi n-1 olun-caya kadar arttırılabilir.
Örnek 1.0.7
x=1:8;y=[0.5 0.8 0.95 1.2 1.5 1.7] verilsin. n=1 dereceli polinom, yanidogru ile yaklasım yapalım. Polinomu ve verileri aynı grafige çizelim.
>> x=1:6;>> y=[0.5 0.8 0.95 1.2 1.5 1.7];>> p=polyfit(x,y,1)p =0.2386 0.2733>> f=poly2str(p,’x’)f =0.23857 x + 0.27333>> xx=1:0.01:6;>> yy=polyval(p,xx);>> plot(x,y,’s’,xx,yy,’r-’)>> plot(x,y,’s’,xx,yy,’r-’)>> title(’Polinom interpolasyonu’)>> grid on
Sekil 1.18 de n=1 dereceli polinom (dogru) ve veriler kare seklinde çizil-mistir. Simdi x=1:7, y=[1 3.5 5 5.5 5.7 6.2 6.5] olsun, verilere uyan1.,2.,3. ve 4. dereceden polinom uydurma yapalım ve grafiklerini çizelim.
>> x=1:7;>> y=[1 3.5 5 5.5 5.7 6.2 6.5];>> p1=polyfit(x,y,1); %1. dereceden polinom>> xx=0:0.1:10;>> y1=polyval(p1,xx);>> subplot(2,2,1);plot(x,y,’s’,xx,y1,’-’); grid on>> title(’1. derece’);>> p2=polyfit(x,y,2); %2. dereceden polinom>> y2=polyval(p2,xx);>> subplot(2,2,2);plot(x,y,’s’,xx,y2,’:’); grid on>> title(’2. derece’);>> p3=polyfit(x,y,3); %3. dereceden polinom>> y3=polyval(p3,xx);
41
MATLAB’A GIRIS
Sekil 1.18: polyfit komutu
>> subplot(2,2,3);plot(x,y,’s’,xx,y3,’--’); grid on>> title(’3. derece’);>> p4=polyfit(x,y,4); %4. dereceden polinom>> y4=polyval(p4,xx);>> subplot(2,2,4);plot(x,y,’s’,xx,y4,’.-’); grid on>> title(’4. derece’);
Egri uydurmada kullanılacak olan polinomun verilere uygunlugu derecesi rile tanımlanan regresyon katsayısı ile ortaya konur. Elde edilen regres-yon katsayısı 0 < r ≤ 1 aralıgında bir deger alması istenir. Eger bu degerr ≈ 0 ise uydurulan fonksiyonun iyi olmadıgı, r ≈ 1 ise uydurulan fonksiyon-nun iyi oldugu anlasılır. Regresyon katsayısının hesabı için öncelikle ölçümsonucundan elde edilen sayısal degerlerin aritmetik ortalaması bulunur.
y =1
n
n∑i=1
yi
Sonra ölçüm degerleri ve uydurulan fonksiyona ait hata hesabı için asagıda-kiler bulunur:
δy =
n∑i=1
[yi − y]2, ve δf =
n∑i=1
[f(xi)− y]2
42
MATLAB’A GIRIS
Sekil 1.19: polyfit komutu kullanımı
Elde edilen bu degerlere göre regresyon katsayısı
r =δfδy
seklinde bulunur.
Iki boyutlu interpolasyon: griddata ve interp2 komutları kullanılır.
z_i=griddata(x,y,z,x_i,y_i) veya z_i=interp2(x,y,z,x_i,y_i) sek-linde kullanılır.
Örnegin rüzgar hızı v=[4 6 12 15] (m/s), Günes radyasyon enerjisi
I=[15 20 35 21] (w/m^2); Üretilen enerji E=[18 20 35 29] olsun. Rüz-gar hızı 10 m/s günes radyasyonu 25 w/m^2 iken üretilen enerji E bulalım.
>> v=[4 6 12 15]; I=[15 20 35 21]; E=[18 20 35 29];>> E10_25=griddata(v,I,E,10,25)E10_25 =26.8605
polyint komutu: Polinomun integralini alır. Örnegin p(x) = 9x2 − 2x− 3 poli-nomunun integralini bulalım.
>> p=[9 -2 -3];>> pint=polyint(p)pint =3 -1 -3 0
43
MATLAB’A GIRIS
Yani polinomun integrali∫
(9x2 − 2x− 3)dx = 3x3 − x2 − 3x olarak bulunur.
Sembolik Hesaplamalar
MATLAB ortamında sayısal deger yerine harfli ifadelerin kullanıldıgı matema-tiksel islemlere sembolik islemler denir. Sembolik hesaplamalar için Sembolikaraç kutusunda pek çok fonksiyon vardır.
Sembolik degisken tanımlamak için syms komutu kullanılır. Kullanımı
syms degisken1 degisken2...degisken3
seklindedir.
Sembolik sayı olusturalım ve kayan nokta gösterimi ile karsılastıralım.
sym(1/3)1/3ans =1/3ans =0.3333
Sembolik sayı rasyonel sayıyı tam olarak verir, kayan nokta gösterimi ise yak-lasık sayı verilmektedir. Sembolik sayılar ile hesaplamalar tam sonucu verir.Bunu görmek için sinπ degerini sembolik ve sayısal olarak hesaplayalım.
sin(sym(pi))sin(pi)ans =0ans =1.2246e-16
Sembolik hesaplama tam sonucu vermistir. Sayısal hesaplama ise yaklasıkolarak sonucu vermistir.
x ve y sembolik degiskenlerini olusturalım.
syms xy = sym(’y’)
Iki komutta aynı sekilde çalısır. Birden fazla sembolik degisken olusturalım.
syms a b c
44
MATLAB’A GIRIS
komutu ile a,b,c sembolik degiskenleri olusturulur. Sembolik degiskenlera1,...,a20 olusturmak için
A = sym(’a’, [1 20])A =[ a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,...a11, a12, a13, a14, a15, a16, a17, a18, a19, a20]
komutu kullanılır.
Sembolik fonksiyon olusturalım.
syms x yf(x, y) = x^3*y^3f(x, y) =x^3*y^3
Sembolik fonksiyon olusturulduktan sonra türevini alabilir, integralini bula-bilir, degerler verebilirsiniz. Örnegin x degiskenine göre birinci türevini bul-mak için
d1x=diff(f)d1x=3*x^2*y^3
bulunur. Örnegin y degiskenine göre ikinci türevini bulmak için
d2fy = diff(f, y, 2)d2fy(x, y) = 6*x^3*y
f(x,y) fonksiyonunu x=y+1 için hesaplayalım.
f(y + 1, y)ans = y^3*(y + 1)^3
Birden fazla degisken oldugunda belirtilmediginde MATLAB, x degiskeninegöre türev alır.
syms x nf=x^ndiff(f)ans=n*x^(n-1)
sin2 x fonksiyonunun türevini bulmak için
45
MATLAB’A GIRIS
syms xf = sin(x)^2;diff(f)ans =2*cos(x)*sin(x)
yazılır. Kısmi türev almak için
syms x yf = sin(x)^2 + cos(y)^2;diff(f)ans =2*cos(x)*sin(x)
Aynı fonksiyonun y degiskenine göre türevini almak için
syms x yf = sin(x)^2 + cos(y)^2;diff(f, y)ans =-2*cos(y)*sin(y)
y degiskenine göre ikinci türevini bulmak için
syms x yf = sin(x)^2 + cos(y)^2;diff(f, y, 2)ans =2*sin(y)^2 - 2*cos(y)^2
yazılır. Bu sonuçlar diff(diff(f,y)) komutu ile de bulunur. Karısık türevibulmak için
syms x yf = sin(x)^2 + cos(y)^2;diff(diff(f, y), x)ans =0
bulunur. Jakobyen matrisi hesabı için jacobian komutu kullanılır.
46
MATLAB’A GIRIS
syms x yf=x^2+y^2;g=x^3+y^3;J=jacobian([f;g],[x;y])J =[ 2*x, 2*y][ 3*x^2, 3*y^2]
Integral bulmak için int komutu kullanılır.∫
sin2 xdx integralini bulalım.
syms xf = sin(x)^2;int(f)ans =x/2 - sin(2*x)/4
Eger birden fazla sembolik degisken var ise, MATLAB ilk olarak x degiskeninegöre integral alır.
syms x y nf = x^n + y^n;int(f)ans =x*y^n + (x*x^n)/(n + 1)
Aynı fonksiyonun y degiskenine göre integralini almak için asagıdaki kodyazılır.
syms x y nf = x^n + y^n;int(f, y)ans =x^n*y + (y*y^n)/(n + 1)
syms uf=1/(1+u^2);int(f)ans= atan(u)
syms yf=y^(-1)int(f)ans= log(y)
47
MATLAB’A GIRIS
∫ ba f(x)dx belirli integralini bulmak için int(f,a,b) komutu kullanılır.
syms xf=x;int(f,0,1)ans=1/2
bulunur.
syms xint(sin(2*x),0,pi/2)ans=1
bulunur.
Katlı integral bulmak için int komutu iki kere kullanılır.∫ 10
∫ 20 (x + y)dxdy
integralini bulalım.
syms x yf=x+yint(int(f,x,0,2),y,0,1))ans= 3
Sembolik degiskenler kullanılarak denklem çözümü yapılabilir.
syms xsolve(x^3 - 6*x^2 == 6 - 11*x)ans =123
Eger sag taraf belirtilmezse MATLAB sag tarafı sıfır olarak alır.
syms xsolve(x^3 - 6*x^2 + 11*x - 6)ans =123
Birden fazla degisken içeren denklemlerde, hangi degisken için denkleminçözülecegi belirtilmelidir.
48
MATLAB’A GIRIS
syms x ysolve(6*x^2 - 6*x^2*y + x*y^2 - x*y + y^3 - y^2 == 0, y)ans =12*x-3*x
Eger belirtilmezse MATLAB x degiskenine göre denklemi çözer. Birden fazladenklem çözülebilir.
syms x y z[x, y, z] = solve(z == 4*x, x == y, z == x^2 + y^2)x =02y =02z =08
Sembolik degiskenler simplify komutu ile sadelestirme yapılabilir.
phi = (1 + sqrt(sym(5)))/2;f = phi^2 - phi - 1returnsf =(5^(1/2)/2 + 1/2)^2 - 5^(1/2)/2 - 3/2simplify(f)ans=0
Benzer sekilde expand komutu ile parantez içleri çarpılıp polinom bulunabi-lir.
syms xf = (x ^2- 1)*(x^4 + x^3 + x^2 + x + 1)*(x^4 - x^3 + x^2 - x + 1);expand(f)ans =x^10 - 1
factor komutu ile polinomun kökleri bulunur.
49
MATLAB’A GIRIS
syms xg = x^3 + 6*x^2 + 11*x + 6;factor(g)ans = [ x + 3, x + 2, x + 1]
subs komutu ile sembolik degisken yerine istenen deger konulabilir.
syms xf = 2*x^2 - 3*x + 1;subs(f, 1/3)ans =2/9
Birden fazla degisken var ise hangi degisken yerine konulacagı belirtilmelidir.
syms x yf = x^2*y + 5*x*sqrt(y);subs(f, x, 3)ans =9*y + 15*y^(1/2)
Birden fazla degisken için deger koyabiliriz.
syms x yf = x^3+y^3;subs(f, {x,y}, {3,3})ans =54
Bir matrisi bir fonksiyona yazılabilir.
syms xf = x^3 - 15*x^2 - 24*x + 350;A = [1 2 3; 4 5 6];subs(f,A)ans =[ 312, 250, 170][ 78, -20, -118]
Sembolik matris olusturulabilir.
50
MATLAB’A GIRIS
syms a b cA = [a b c; c a b; b c a]A =[ a, b, c][ c, a, b][ b, c, a]
A matrisinin (2, 1) elemanını alpha ve b degiskeni olan yerlere beta degiskeniyazalım.
alpha = sym(’alpha’);beta = sym(’beta’);A(2,1) = beta;A = subs(A,b,alpha)A =[ a, alpha, c][ beta, a, alpha][ alpha, c, a]
Sembolik fonksiyonların çiziminde fplot, fplot3, ezpolar, fsurf,
fcontour ve fmesh komutları kullanılır.
f(x) = x3 − 6x2 + 11x− 6 fonksiyonunun grafigi Sekil 1.20 verilmistir.
syms xf = x^3 - 6*x^2 + 11*x - 6;fplot(f)xlabel(’x’)ylabel(’y’)title(texlabel(f))grid on
Polar koordinatlarda grafik çizmek için ezpolar komutu kullanılır. Sekil 1.21de bir örnek verilmistir.
syms tezpolar(sin(6*t))
Kapalı fonksiyon çizimi ezplot komutu ile yapılır. Sekil 1.22 te bir örnekverilmistir.
syms x yeqn = (x^2 + y^2)^4 == (x^2 - y^2)^2;ezplot(eqn, [-1 1])
51
MATLAB’A GIRIS
Sekil 1.20: Sembolik fonksiyon
Sekil 1.21: Polar koordinatlar
52
MATLAB’A GIRIS
Sekil 1.22: Kapalı fonksiyon
Bir fonksiyonda, matriste veya ifadede bulunan sembolik degiskenleri bul-mak için symvar komutu kullanılır.
syms a b n t xf = x^n;g = sin(a*t + b);symvar(f)ans =[ n, x]
Bir fonksiyonun istenilen noktada limit hesabı limit komutu ile yapılır.limx→1 x
2 limitini hesaplayalım.
syms xlimit(x^2, 1)ans =1
Örnegin limx→2x−2x2−4 limitini bulalım.
syms xlimit((x-2)/(x^2-4), 2)ans =1/4
53
MATLAB’A GIRIS
Bir fonksiyonun türevi f ′(x) = limh→0f(x+h)−f(x)
h olarak tanımlanır.
(cosx)′ = − sinx oldugu limit esitliginden dogrulayalım.
syms h n xlimit((cos(x+h) - cos(x))/h, h, 0)ans =-sin(x)
limit((1 + x/n)^n, n, inf)ans = exp(x)
Tek taraflı limit hesabı soldan limit için limit(f,a,’left’), sagdan limitiçin limit(f,a,’right’) seklinde kullanılır. f(x) = x
|x| fonksiyonunun sıfırnoktasındaki sagdan ve soldan limitlerine bakalım.
syms xlimit(x/abs(x), x, 0, ’left’)ans = -1
Sagdan limit bulalım.
syms xlimit(x/abs(x), x, 0, ’right’)ans = 1
Bu durumda f(x) = x|x| fonksiyonunun sıfır noktasındaki limiti yoktur.
syms xlimit(x/abs(x), x, 0)ans = NaN
taylor komutu ile Taylor serisi bulunabilir. f(x) fonksiyonu türevlenebilirbir fonksiyon olsun. x = a etrafında Taylor serisi
f(x) =
∞∑n=0
(x− a)nf (n)(a)
n!
olarak tanımlıdır. Burada f (n), f(x) fonksiyonunun n. mertebeden türevidir.
syms xf = 1/(5 + 4*cos(x));T = taylor(f, ’Order’, 8)
54
MATLAB’A GIRIS
returnT =(49*x^6)/131220 + (5*x^4)/1458 + (2*x^2)/81 + 1/9pretty(T)6 4 249 x 5 x 2 x 1------ + ---- + ---- + -131220 1458 81 9
f(x) = ex sinx fonksiyonu için x = 2 etrafında Taylor serisinin ilk 12 terimi ileelde edilen Taylor polinom yaklasımı ile gerçek fonksiyonunun grafigini aynıpencerede çizelim. Sekil 1.23 te Taylor polinomu ve fonksiyon çizilmistir.
syms xg = exp(x*sin(x));t = taylor(g, ’ExpansionPoint’, 2, ’Order’, 12);t = simplify(t);xd = 1:0.05:3;yd = subs(g,x,xd);fplot(t, [1, 3])hold onplot(xd, yd, ’r-.’)title(’Taylor yaklasımı ve gerçek fonksiyon’)legend(’Taylor yaklasımı’,’Fonksiyon’)grid on
MATLAB’da Programlama
Programlama isleminde en önemli süreç tasarım bölümüdür, buna algoritmaolusturma denir. Dogru algoritmayı kurmak gereklidir. Programın algoritmasıhazırlandıktan sonra bir programlama dili (FORTRAN, C, C++, Pascal, Basicgibi) kullanılarak kodlama yani program yazma islemine geçilir. MATLAB ko-mut penceresinde ve özellikle MATLAB editöründe programlar yazılır.
M-dosyaları satır sayısı fazla karmasık programlarda komut penceresi ve ko-mut geçmisi yeterli olmaz. Bu durumlarda komutlar m-uzantılı dosyalarayazdırılır ve tekrar tekrar kullanılabilir. Yeni bir M-dosyası olusturmak içinFile menüsünden New oradan M-file seçilir. Yazılacak kodlar yazılır vedosya dosya_adı.m seklinde kaydedilir. Daha sonra komut penceresindendosya adı yazılarak Enter tusuna basılarak çalıstırılır. Dosyanın çalıstırıla-bilmesi için dosyanın aktif MATLAB klasöründe olması gerekir. Dosya için-deki komutlar komut penceresinde görülmez. Sadece islem sonuçları görülür.
Eger komutların komut penceresinde gösterilmesi isteniyorsa echo komutukullanılır. echo on yazılırsa komutlar görülür, echo off yazılırsa görülmez.
55
MATLAB’A GIRIS
Sekil 1.23: Taylor polinomu
MATLAB programında iki tür M-dosyası ousturulabilir: 1. Düz yazı dosyası(script file), 2. Fonksiyon dosyası (function file)
1. Düzyazı Dosyaları: Komut penceresine yazılabilecek komutlar dogrudanM-dosyasına yazılarak olusturulur. Böylece kullanılan komutlar saklanabilirve tekrar tekrar kullanılabilir.
2. Fonksiyon Dosyaları: Düzyazı dosyalarından farklı olarak fonksiyon dosya-ları girdi degerleri alıp çıktı degerler üretebilirler. Fonksiyon dosyaları olus-turulurken komutlar yazılmadan önce M-dosyasının bir fonksiyon dosyasıoldugunu MATLAB’ta function fonksiyon_adı: Hiçbir girdi degeri almazve çıktı üretmez. Düz yazı dosyası ile aynı islevi görür.
function fonksiyon_adı(a): Fonksiyon bir tane girdi a degeri alır.
function fonksiyon_adı(a,b,c): Fonksiyon üç tane girdi degeri alır.
function x=fonksiyon_adı(a,b,c): Girdi degerleri olarak (a,b,c) deger-lerini alınmıstır, çıktı degeri ise sadece x üretir.
function [x,y,z]=fonksiyon_adı(a,b,c): Girdi degerleri olarak (a,b,c)degerlerini alınmıstır, üç tane çıktı üretilir, x,y,z üretir.
Fonksiyonun türüne göre girdi ve çıktı sayıları belirlenir. Burada önemli olandosya adı ile fonksiyon-adı ile gösterilen fonksiyon adının aynı olmasıdır.
Fonksiyon türüne göre komut penceresinde kullanımıda degisir. Ilk tür içinsadece fonksiyon adını yazmak yeterlidir.
56
MATLAB’A GIRIS
>>fonksiyon_adı
Ikinci kullanımda ise fonksiyon girdi degerleri aldıgından, bu degerlerin pa-rantez içinde fonksiyon adından sonra verilmesi gerekir.
>>fonksiyon_adı(a-degeri)
Üçüncü kullanımda üç tane girdi degeri oldugu için
>>fonksiyon_adı(a-degeri,b-degeri,c-degeri)
Dördüncü kullanımda bir çıktı degeri oldugundan fonksiyonun çıktısını birdegiskene atanır.
>>x=fonksiyon_adı(a-degeri,b-degeri,c-degeri)
En son kullanımda üç çıktı degeri oldugundan fonksiyonun her çıktısı birdegiskene atanır.
>>[x,y,z]=fonksiyon_adı(a-degeri,b-degeri,c-degeri)
Fonksiyon Olusturma:
File menüsünden New oradan M-file seçilir. MATLAB Editör programı açı-lır.
Örnek 1.0.8
Yarıçapı ve yüksekligi verilen silindirin hacmini bulan bir program yazımınabakalım.
%Bu program yarıçapı r ve yüksekligi h olan bir silindirinhacmini hesaplar.r=input(’Silindir yarıçapını giriniz (cm): ’);h=input(’Silindir yüksekligini giriniz (cm): ’);%Program çalıstırıldıgında r ve h’nin degerlerini sorar.V=pi*r^2*h; %Burada hacim hesaplanır.fprintf(’Silindirin hacmi:%gcm3\n’, V)%Burada virgülden sonra yazılan V, metinde gösterilen %g ile gösterilenyere yazılır. \n komutu metnin yeni bir satıra yazılmasını saglar.
57
MATLAB’A GIRIS
Bu dosyayı silindir.m olarak kaydedelim. Programı MATLAB Editörde F5tusuna basarak veya komut penceresinde silindir.m yazarak çalıstırılabi-lir. Yarıçapı r=6 yüksekligi h=9 cm olan silindirin hacmini bulalım.
>> silindir.mSilindir yarıçapını giriniz (cm): 6Silindir yüksekligini giriniz (cm): 9Silindirin hacmi:1017.88cm3
Programda bir degisiklik yapmak için-Komut penceresinde Edit silindir.m veya-MATLAB Editör kullanılarakyapılabilir. Bir sonraki adımda silindirin hacmini hesaplayan fonksiyon dos-yası yazımını görelim. Fonksiyon için function V=silindirhacim(r,h) kul-lanılır. Burada silindirhacim fonksiyonun adı, V çıktı degeri, (r,h) deger-leri girdi degerleridir.File menüsünden New oradan M-file seçilir. MATLAB Editör programı açı-lır.
function V=silindirhacim(r,h)
% Bu fonksiyon yarıçapı r(cm) ve yüksekligi h(cm) olan bir silindirin
hacmini hesaplar.% Kullanımı:% Hacim=silindirhacim(r,h)
V=pi*r^2*h;
Fonksiyonu çalıstırmak için komut penceresine gelinir.
>> Hacim=silindirhacim(1,5) %yarıçapı 1cm, yüksekligi 5cm olan
silindirin hacmiHacim =15.7080
Fonksiyon ile ilgili bilgiye help komutu ile ulasılabilir.
>> help silindirhacimBu fonksiyon yarıçapı r(cm) ve yüksekligi h(cm) olan bir silindirin
hacmini hesaplar.Kullanımı:Hacim=silindirhacim(r,h)
58
MATLAB’A GIRIS
silindirhacim kendi basına çalıstırılırsa sonuç ans degiskenine atanır.
>> silindirhacim(1,5)ans =15.7080
Kosul Ifadeleri
MATLAB’da if, elseif, else ve switch kosul ifadeleri kullanılır.
if deyimi
if (kosul veya kosullar)kod bloguend
Eger if deyiminden sonra parantez içinde verilen kosulu veya kosullar sagla-nıyorsa kod blogu ile gösterilen islemler end ifadesi gelene kadar yapılır. Egersaglanmıyorsa dogrudan end deyiminden sonraki satıra gidilir.
end ile MATLAB’a if ifadesinin bittigi ile bildirilir. Eger if ifadesinin kosulbölümüne sonucu sıfır yapacak (mantıksal ve iliskisel opretörler kullanılarakyapılan) ifade yazılırsa, if deyimi ile end arasında kalan islemler yapılmaz.Eger sounucu bir olan bir kosul ifadesi yazılacak olursa, if ile end arasındakalan tüm islemler yapılır.
>> a=3; b=4;>> if (a<b)a=a+1;end>> aa =4
a<b saglandıgı için (a<b ifadesinin sonucu bir) a=a+1 islemi yapılmıs, a de-giskeninin degeri 1 birim arttırılmıstır. end ifadesinden sonra a degerine ba-kılmıs ve degerin 1 arttıgı görülmüstür.
>> a=3; b=4;>> if (a==b)a=a+1;end>> aa =3
59
MATLAB’A GIRIS
Yanlıs bir kosul ifadesi oldugundan (a==b ifadesinin sonucu sıfır) a degerindebir degisiklik yapılmamıstır. Kosul ifadeleri yazılırken her türlü ifade kullanı-labilir. Kosul ifadeleri tanımlanırken bazen bir tek kosul yeterli olmayabilir.Iki veya daha fazla kosulu bir arada kullanmak gerekebilir. Bunun için man-tıksal operatörler | (veya), & (ve), ~ (degil) operatörleri kullanılır.
Örnek 1.0.9 Bir ögrencinin sınavları 69, 87 ve 83 olarak verilmistir. Ögrencinindönem sonu aldıgı puan=0.3∗(sınav 1+sınav 2)+0.4∗final olarak hesaplanıyorsave harf notları
A: 100− 90 B: 80− 89 C : 70− 79 D : 60− 69 F: < 60
seklinde veriliyorsa, ögrenci hangi harf notunu alır? Bunun için gereken prog-ramı yazalım.
>> not1=69; not2=87; final=83;>> puan=0.3*(not1+not2)+0.4*finalpuan =80>> if (puan>=90)not=’A’end>> if (puan>=80 & puan<90)not=’B’endnot =B>> if (puan>=70 & puan<80)not=’C’end>> if (puan>=60 & puan<70)not=’D’end>> if (puan<90)end>> if (puan<60)not=’F’end>> notnot =B
Ögrencinin puanı 80 oldugu için notu B olur.
else if deyimi: Ardarda yazılan if deyimlerinde, MATLAB her deyimini ayrıayrı inceler. Yukarıdaki örnekte MATLAB kullanılan bes tane if deyimini deinceler. Halbuki not degerine ikinci if deyiminde ulasılmıstır.
60
MATLAB’A GIRIS
Yani sonradan incelenen üç if gereksizdir ve kodun çalısma süresini uzatır.Bu nedenle MATLAB’da elseif isimli baska bir deyim tanımlanmıstır. Bukomut if deyiminin devamında kullanılır.
if (kosul veya kosullar)komutlar 1elseif (kosul veya kosullar)komutlar 2...elseif (kosul veya kosullar)komutlar nend
Eger if deyimi içindeki ifade dogru ise komutlar 1 islemleri yapılır ve ende gidilir. Dogru degilse birinci elseif deyimine gidilir. Eger birinci elseifkosulları dogru ise komutlar 2 deki islemler yapılır ve end e gidilir, dogrudegilse ikinci elseif deyimine gidilir. Eger ikinci elseif deyimindeki kosul-lar dogru ise komutlar 3 islemleri yapılır ve end e gidilir, degilse üçüncüelseif deyimine gidilir, bu sekilde devam edilir. Yani herhangi bir if veyaelseif deyimleri içinde aranan kosul saglanırsa komutlar uygulanır ve kalanelseif deyimlerine bakılmadan dogrudan end e gidilir. Böylece bakılmasınagerek kalmayan kısımlar atlanmıs olur ve kısa sürede sonuca varılır. Örnek1.0.9 not sorusunu elseif deyimi ile tekrar çözelim.
>> not1=69; not2=87; final=83;>> puan=0.3*(not1+not2)+0.4*final;>> if (puan>=90)not=’A’;elseif (puan>=80)not=’B’;elseif (puan>=70)not=’C’;elseif (puan>=60)not=’D’;elseif (puan<60)not=’F’;end>> notnot =B
61
MATLAB’A GIRIS
if deyimindeki sart saglanmadıgı için birinci elseif deyimine gidilir, buradapuan<90 birinci kosul yanlıstır ve puan=80 oldugu için not=’B’ olur ve ende gidilir.
else deyimi
if (kosul veya kosullar)komutlar 1elseif (kosul veya kosullar)komutlar 2...elsekomutlarend
Burada else ile yukarıdaki kosullar saglanmıyorsa komutlar ile verilen is-lemler yapılır.
>> not1=69; not2=87; final=83;>> puan=0.3*(not1+not2)+0.4*final;>> if (puan>=90)not=’A’;elseif (puan>=80 & puan<90)not=’B’;elseif (puan>=70 & puan<80)not=’C’;elseif (puan>=60 & puan<70)not=’D’;elsenot=’F’;end>> notnot =B
Burada kullanılan else ile yukarıdaki kosullar saglanmıyorsa, diger bir ifadeile puan<60 ise, notun F olur.
switch deyimi
Sadece esit kosulunun arandıgı kosul ifadeleri için kullanılır.
62
MATLAB’A GIRIS
switch ifadecase kosul 1komutlar 1case {kosul 2.1, kosul 2.2}komutlar 2otherwisekomutlar 3end
Ifade yerine bir degisken veya fonksiyon yazılabilir. kosul 1 yerine bir sayıveya ifade yazılabilir. ’A’, ’ABCD’ gibi string ifadeleri tırnak içinde yazılır.Birden fazla kosul yazılabilir, küme parantezi kullanılır. Eger ifade=kosul 1ise komutlar 1 yapılır. Iki kosul oldugunda ifade=kosul 2.1 veya
ifade=kosul 2.2 ise komutlar 2 yapılır. Sondaki otherwise deyimi elseile benzerdir. Yukarıdaki case deyimiyle verilen sartlar saglanmazsa komutlar 3yapılır.
Ödevlerin notları su seklide sınıflandırılmıs olsun.
10 : mükemmel 9−8 : çok iyi 7−6 : iyi 5−4 : idare eder 3−2 : kötü 1 : çok kötü
>> Not=7;>> switch Notcase 10disp(’mükemmel’)case {9,8}disp(’çok iyi’)case {7,6}disp(’iyi’)case {5,4}disp(’idare eder’)case {3,2}disp(’kötü’)otherwisedisp(’çok kötü’)endiyi
Ögrencinin notu 7 oldugu için iyi olarak sonuç çıkmıstır. Kosul saglandıgın-dan itibaren diger case deyimleri atlanarak dogrudan end e gidilir.
63
MATLAB’A GIRIS
Döngü Ifadeleri
Aynı kod parçasının farklı degerler için tekrar tekrar icra edilmesine döngüdenir. Iki sekilde olabilir.
1. Daha önce belirlenen sabit bir sayı kadar (for döngüleri) tekrar edilendöngü
2. Belli bir kosul saglandıgı sürece (while döngüleri) devam eden döngü
for döngüsü
Kullanım sekli
for x=baslangıç:bitiskomutlarend
Komutlar ile gösterilen islemleri, x vektörünün her elemanı için gerçekles-tirilir. Örnegin x=1:10 için komutlar ile tanımlanan islemler x=1,2,...,10olmak üzere 10 kez tekrar edilir.
for x=baslangıç:artıs:bitiskomutlarend
Örnegin x=1:0.5:10 için x=1,1.5,2,...,9.5,10 olmak üzere 19 kez tekrarettirilir.
for x=[x1,x2,x3,...,xn]komutlarend
Komutlar x vektörünün her elemanı için tekrar ettirilir. x vektörü istenirseönceden tanımlanabilir.
x=baslangıç:bitisfor xkomutlarend
Örnegin 1’den 10’a kadar olan sayıların karelerini for döngüsü ile bulalım.
64
MATLAB’A GIRIS
>> for i=1:10x(i)=i^2;end>> xx =1 4 9 16 25 36 49 64 81 100
Örnek 1.0.10 Ögrencilerin aldıkları notlar asagıdaki gibi verilsin. Harf notla-rını for döngüsü kullanarak hesaplatalım.
Ogr. 1: 87 Ogr. 2: 68 Ogr. 3: 98 Ogr. 4: 75 Ogr. 5: 82 Ogr. 6: 58
>> Puan=[87 68 98 75 82 58];>> Isim=[’1’;’2’;’3’;’4’;’5’;’6’];>> for x=1:6if (Puan(x)>=90)Not(x)=’A’;elseif (Puan(x)>=80)Not(x)=’B’;elseif (Puan(x)>=70)Not(x)=’C’;elseif (Puan(x)>=60)Not(x)=’D’;elseNot(x)=’F’;endend
Sonuçları gösterelim
>> for i=1:6disp([Isim(i),’---->’ Not(i)])end1---->B2---->D3---->A4---->C5---->B6---->F
for döngüsü kullanarak iki matrisin çarpımı islemini yapalım.
65
MATLAB’A GIRIS
Örnek 1.0.11 A =
1 2 0 12 1 3 20 1 4 1
3×4
, B =
1 2 10 1 20 0 21 3 2
4×3
matrisleri verilsin.
C = A∗B matrisini for döngüsü ile yapalım. Burada C matrisi 3×3 boyutundabir matristir.
>> A=[1 2 0 1;2 1 3 2;0 1 4 1];>> B=[1 2 1;0 1 2;0 0 2;1 3 2];>> for i=1:3for j=1:3C(i,j)=A(i,1)*B(1,j)+A(i,2)*B(2,j)+A(i,3)*B(3,j)+A(i,4)*B(4,j);endend>> CC =2 7 74 11 141 4 12
Burada iki tane for döngüsü vardır ve birinci for döngüsü için
i=1→j=1,j=2,j=3i=2→j=1,j=2,j=3i=3→j=1,j=2,j=3islemleri yapılır. Aynı islem MATLAB’da
>> C=A*BC =2 7 74 11 141 4 12
seklinde yapılabilir.
while döngüsü
Verilen kosul dogru oldugu sürece kodların tekrarlandıgı döngüdür.
while kosul veya kosullarkomutlarend
66
MATLAB’A GIRIS
>> x=1;>> while x<10disp(x^2)x=x+1;end149162536496481
Burada x = 1 olarak atanmıstır. while döngüsü kurularak x < 10 oldugusürece while ile end arasında verilen islemler tekrarlanır. Her tekrar için x2
ifadesi ekrana yazdırılmıs ve x degeri 1 arttırılmıstır. end deyimine gelindi-ginde ise tekrar while döngüsüne gelinir ve yeni x degeri x + 1 için x < 10kosuluna bakılır. Eger dogru ise tekrar while döngüsüne girilir ve islemleryapılır, yanlıs ise end gelinir. En son olarak 92 = 81 yazdırılmıstır. Çünkü 81yazdırıldıktan sonra x bir artmıs ve degeri 10 olmustur. end komutuna ge-lince tekrar while komutuna gidilmis ve x < 10 kosuluna bakılmıstır. x = 10oldugu için kosul yanlıs olmustur ve döngüye son verilmistir.
Örnek 1.0.12
sinx =∞∑n=0
(−1)nx2n+1
(2n+ 1)!
toplamını x = π2 için mutlak hata 10−10 dan küçük olacak sekilde hesaplayı-
nız. sin π2 gerçek degeri ile seri toplamı sonucunda bulunan farkı hesaplayınız.
Isleme son vermek için |1− sinx| > 10−10 kosulu kontrol edilir.
>> n=0;>> tsinx=0;>> while abs((1-tsinx))>10^(-10)tsinx=tsinx+(-1)^n*((pi/2)^(2*n+1)/(factorial(2*n+1)));n=n+1endn =1n =2n =3
67
MATLAB’A GIRIS
n =4n =5n =6n =7n =8>> tsinxtsinx =1.0000
Elde edilen sonuç sin π2 = 1 gerçek degeridir.
68
2 Lineer Denklem Sistemleri
MATLAB’da matrislerle olan islemlere örnekler verelim. Ax = b biçimindekilineer denklem sisteminin çözümüne bakalım. Burada A, nxn matris, x, ntane bilinmeyen içeren nx1 boyutunda olan vektör, b, nx1 sabitlerden olusanvektördür.
MATLAB’da Ax = b denklem sisteminin çözümü
x=A\b, A−1b: eger A matrisinin tersi varsa, mldivide komutlarıyla bulunabi-lir.
Örnek:
A =
1 2 34 5 63 2 2
, b =
140
olsun.
(a) 3(ATA)2 matrisini
(b) A matrisinin tersini (inverse)
(c) A matrisinin determinantını
(d) 5A−1 − 4A2 +A matrisini
(e) A matrisinin 1,2 ve sonsuz normlarını
(f) A matrisinin sonsuz normuna göre kosul sayısını (condition number)
(g) A matrisinin rankını
(h) A matrisinin LU ayrıstırmasını (LU decomposition)
(i) A matrisinin özdeger (eigenvalues) ve özvektörlerini (eigenvectors)
(j) Ax = b dogrusal denklem sisteminin çözümünü bulunuz.
Komut penceresinde
>> A=[1 2 3;4 5 6;3 2 2];b=[1;4;0];B=3*(A’*A)^2C=inv(A)
69
Lineer Denklem Sistemleri
detA=det(A)D=5*C-4*A^2+Anorm1=norm(A,1)norm2=norm(A,2)norm3=norm(A,inf)kosulsayisi=cond(A,inf)rankA=rank(A)[L,U,P]=lu(A)[ozvektor ozdeger]=eig(A)x=A\bB =7647 8916 107858916 10419 1261210785 12612 15270C =0.666666666666666 -0.666666666666666 1.000000000000000-3.333333333333333 2.333333333333333 -2.0000000000000002.333333333333333 -1.333333333333333 1.000000000000000detA =-3D =1.0e+02 *-0.676666666666667 -0.733333333333333 -0.760000000000000-1.806666666666667 -1.633333333333334 -2.200000000000000-0.533333333333333 -0.846666666666667 -0.930000000000000norm1 = 11norm2 = 10.265561913128545norm3 = 15kosulsayisi = 1.150000000000000e+02rankA = 3L =1.000000000000000 0 00.750000000000000 1.000000000000000 00.250000000000000 -0.428571428571429 1.000000000000000U =4.000000000000000 5.000000000000000 6.0000000000000000 -1.750000000000000 -2.5000000000000000 0 0.428571428571429P =0 1 00 0 11 0 0
70
Lineer Denklem Sistemleri
ozvektor =-0.345532192256901 -0.655699955691986 0.266734808903318-0.858376046154199 -0.253702663755918 -0.832514876152186-0.379207156449906 0.711120613193486 0.485563098582069ozdeger =9.260803553539535 0 00 -1.479726432728954 00 0 0.218922879189408x =
-2.0000000000000016.000000000000000
-3.000000000000000
Örnek: Verilen dogrusal denkleminin çözümünü MATLAB ile bulunuz.
x1 − x2 + 3x3 = 2−2x1 + x2 + x3 = 4
4x1 − 4x2 + 12x3 = 8
>> A=[1 -1 3;-2 1 1;4 -4 12];b= [2;4;8];x=A\b
Ag=[A b]rref(Ag)Warning: Matrix is singular to working precision.
x =NaNNaNNaNAg =1 -1 3 2-2 1 1 44 -4 12 8ans =1 0 -4 -60 1 -7 -80 0 0 0
Uyarı vermesinin sebebi katsayılar matrisinin tersinin olmamasıdır. Bu du-rumda sistemin ya çözümü yoktur ya da sonsuz çözümü vardır. Bunu ayırt
71
Lineer Denklem Sistemleri
edebilmek için ilaveli matrisin ([A b] augmented matrix) matrisin indirgen-mis satır eselon formuna (reduced row echelon form-rref komutu ile) bakılır.Elde edilen indirgenmis eselon forma bakılarak sistemin sonsuz çözümü ol-dugu görülmektedir. Sonsuz çözüm kümesi: S = {t ∈ R | (−6 + 4t,−8 + 7t, t)}
72
3 Sayısal Türev
MATLAB türev için diff isimli bir komut içerir.diff(x) komutu verilen x vektör ise, bitisik iki deger arasındaki farklarınolusturdugu bir vektör olusturur. Sonuç vektörünün eleman sayısı x?inkindenbir azdır. Örnegin, Matlab komut penceresinde
>> x=[1 4 2 4 9 11];>> diff(x)ans = 3 -2 2 5 2
Sayısal Türev Örnekleri:1. Bu örnekte bir cismin konum fonksiyonu verilmis. Yaklasık hız ve ivmehesaplanır, gerçek hız ve ivme ile aynı grafige çizilmistir.
>> konum=inline(’4*t.^3-10*t.^2-t+5’);t=0:0.5:100;x=konum(t);v=diff(x)./diff(t); %hız hesaplandı geri farka göretv=t(2:end); %geri farkta 1. t de türev yoka=diff(v)./diff(tv); %ivme hesaplandıta=tv(2:end);plot(t,x,’:’,tv,v,’--’,ta,a,’g’) %Gerçek hız ve ivme degerleri ile kıyaslama %En büyük mutlak hatayı bulmahiz=inline(’12*t.^2-20*t-1’);ghiz=hiz(tv); %gerçek hiz degerlerihata_hiz=ghiz-v;max(abs(hata_hiz)) %hızdaki en büyük mutlak hata hesaplandıplot(tv,ghiz,’r’,tv,v,’o’) %gerçek hız ve sayısal hız aynı grafige çizildians = 594
Sekil 3.1 gerçek hız ve yaklasık hız degerleri zoom yapılarak gösterilmistir.Gerçek hız degerleri daire ile çizilen noktalardır. Devam edilip ivme degerlerielde edilir.
ivme=inline(’24*t-20’);givme=ivme(ta);hata_ivme=givme-a;max(abs(hata_ivme)) %ivmedeki en büyük mutlak hata hesaplandıplot(ta,givme,’r’,ta,a,’o’) %Gerçek ivme ve sayısal ivme aynı grafige çizildi
73
Sayısal Türev
42 44 46 48 50 52 54
2
2.2
2.4
2.6
2.8
3
3.2
3.4
3.6
#104 Gercek hiz ve yaklasik hiz
Sekil 3.1: Gercek hiz ve yaklasik hiz
74
Sayısal Türev
Sekil 3.2 gerçek ivme ve yaklasık ivme degerleri zoom yaılarak verilmistir.Gerçek ivme degerleri daire ile çizilen noktalardır.
2. Bu örnekte bir fonksiyonun [0,4] aralıgındaki geri fark ile hesaplanmıstürevi ve gerçek türevi aynı grafige çizildi.
x=0:.01:4;y=5*cos(10*x)+x.^3-2*x.^2-6*x+10;sturev=diff(y)./diff(x);xd=x(2:end);plot(xd,sturev,’r’)hold ongturev=-50*sin(10*xd)+3*xd.^2-4*xd-6;plot(xd,gturev)hata=gturev-sturev;max(abs(hata))
Sekil 3.3 de gerçek hız ve yaklasık hız degerleri gösterilmistir. Kırmızı renkteçizilen grafik sayısal türev degerleridir. Grafige zoom yapıldıgında Sekil 3.4deki gibi fark daha açık görülür.
3. Bu örnekte verilen x ve karsılık gelen y degerlerine uyan 2. Derece polinombulundu. Polinomun ve verilerin grafigi aynı grafige çizildi. Daha sonra po-linomun türevi ve yaklasık türev degerleri ileri fark kullanılarak aynı grafigeçizildi.
x=0:.1:1;y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];p=polyfit(x,y,2) %2. derece polinomun katsayılarıxi=linspace(0,1,100);yi=polyval(p,xi); %polinomun degerleri xi noktalarında hesaplandıplot(x,y,’o’,xi,yi,’--’)
Polinomun ve verilen x-y degerleinin grafigi
pd=polyder(p) %polinomun türevi alındı türev polinomunun katsayılarıdyp=polyval(pd,x); %türevi x noktalarında hesaplandıdy=diff(y)./diff(x);xd=x(1:end-1); %ileri fark yaklasımı ile türev grafikplot(xd,dy,x,dyp,’:’)
4. Bu örnekte sin x fonksiyonunun [0, 2π] arasındaki türevi önce geri farkile hesaplandı gerçek türev ve sayısal türev grafigi çizdirildi. Sonra merkezifarkla hesaplandı ve gerçek türev ve sayısal türev degerleri grafige çizdirildi.Ayrıca en büyük mutlak hatalar hesaplandı.
75
Sayısal Türev
56 58 60 62 64 66 68
1250
1300
1350
1400
1450
1500
1550
1600
Sekil 3.2: Gercek ivme ve yaklasik ivme
76
Sayısal Türev
0 0.5 1 1.5 2 2.5 3 3.5 4-60
-40
-20
0
20
40
60
80
Sekil 3.3: Gercek hiz ve yaklasik hiz
77
Sayısal Türev
1 1.1 1.2 1.3 1.4 1.5 1.6 1.7
5
10
15
20
25
30
Sekil 3.4: Gercek hiz ve yaklasik hiz grafigi zoom
78
Sayısal Türev
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-2
0
2
4
6
8
10
12
Sekil 3.5: Verilen noktalar ve polinomun grafigi
79
Sayısal Türev
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-5
0
5
10
15
20
25
30
Sekil 3.6: Polinomun türevi ve gerçek türev
80
Sayısal Türev
x=linspace(0,2*pi); \%0, 2pi arasında 100 noktay=sin(x);dy=diff(y)/(x(2)-x(1)); \%burada h esit h=x(2)-x(1) alınabilirxd=x(2:end); \%geri farkty=cos(x); \%gerçek türevgerturev=cos(xd);plot(xd,dy,’g’,xd,gerturev,’r’) \%kırmızı olan gerçek türev yesil olan yaklasık türevmax(abs(cos(xd)-dy))ans =0.0317
Sekil 3.7 de gerçek türev ve yaklasık türev degerleri verilmistir.
Merkezi fark ve gerçek türevin grafigi
tmerkezi=(y(3:end)-y(1:end-2))/(x(3)-x(1)); %merkezi fark yaklasımıxm=x(2:end-1);gerturevxm=cos(xm);plot(xm,tmerkezi,xm, gerturevxm,’r’) %kırmızı olan gerçek türevmax(abs(cos(xm)-tmerkezi))ans = 6.7086e-004
Sekil 3.8 de merkezi fark ile hesaplanmıs yaklasık türev ve gerçek türev gra-figi verilmistir. Hata çok küçük oldugu için grafikler nerdeyse üst üstedir.
5. Bu örnekte verilen fonksiyonun merkezi fark ile yaklasık türev degerlerihesaplandı. Gerçek türev degerleri ile aynı grafige çizildi.
x=0:.01:0.8;y=0.2+25*x-200*x.^2+675*x.^3-900*x.^4+400*x.^5;saymerkez=(y(3:end)-y(1:end-2))/(x(3)-x(1));xm=x(2:end-1);gerturev=25-400*xm+3*675*xm.^2-4*900*xm.^3+5*400*xm.^4;plot(xm,saymerkez,’o’,xm,gerturev)
Sekil 3.9 de yaklasık türev ve gerçek türev degerleri verilmistir.
81
Sayısal Türev
0 1 2 3 4 5 6 7-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Sekil 3.7: Gerçek türev ve yaklasık türev
82
Sayısal Türev
0 1 2 3 4 5 6 7-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Sekil 3.8: Merkezi fark ile yaklasık türev ve gerçek türev
83
Sayısal Türev
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8-25
-20
-15
-10
-5
0
5
10
15
20
25
Sekil 3.9: Yaklasık türev ve gerçek türev
84
4 Sayısal Integral
Eger integrali alınacak fonksiyonun antitürev fonksiyonu varsa ancak ger-çek integral degeri bulunabilir. Antitürev fonksiyonu yoksa (türevi integralialınacak olan fonksiyon olan bir fonksiyon), integral analitik olarak hesapla-namaz. Ilk olarak sembolik degisken olusturulur. Fonksiyon yazılır.
Örnek olarak ∫ π
0sinxdx
integralinin gerçek degerini bulalım.
>> syms x>> f=sin(x)>> int(f,0,pi)
ans =2
Gerçek integral degeri 2 olarak bulunmustur.
Eger fonksiyon integrallenemiyorsa (antitürev fonksiyonu yoksa, örnegin ex2, cosx2
gibi), sayısal integral yöntemleri ile yaklasık integral degeri bulunabilir.
Yamuk kuralı
Yamugun ingilizcesi ’trapezoid’ kelimesidir. MATLAB’da yamuk kuralı içinMATLAB’ın hazır fonksiyonu trapz fonksiyonu tanımlanmıstır.
Genel kullanımı:
trapz(x,f): f fonksiyonunun integralini yamuk kuralı ile hesaplar. Buradax degerleri olusturulur. Karsılık gelen f degerleri olusturulur. x ve f vektör-lerinin boyutları aynı olmalıdır.
Örnek: ∫ π
0sinxdx
integralini n = 10, 100, 1000 aralık için yamuk kuralı ile hesaplayalım. Gerçekintegral degeri 2’dir. Bagıl hata yüzdelerini bulalım.
85
Sayısal Integral
>> format long>> x1=linspace(0,pi,10);>> f1=sin(x1);>> A1=trapz(x1,f1)>> Iger=2;>> b1=(abs(Iger-A1)/abs(Iger))*100
A1 = 1.979650811216484b1 = 1.017459439175827
>> x2=linspace(0,pi,100);>> f2=sin(x2);>> A2=trapz(x2,f2)>> b2=(abs(Iger-A2)/abs(Iger))*100
A2 = 1.999832163893993b2 = 0.008391805300367
>> x3=linspace(0,pi,1000);>> f3=sin(x3);>> A3=trapz(x3,f3)>> b3=(abs(Iger-A3)/abs(Iger))*100
A3 = 1.999998351770852b3 = 8.241145739162903e-005
Görüldügü gibi aralık sayısı arttıkça bagıl hata yüzdeleri düsmüstür.
Örnek: ∫ 10
1(ex − x)dx
integralini farklı sayıda aralık kullanarak Yamuk kuralı ile hesaplatalım. Ba-gıl hata yüzdesini bulalım.
>> format long% 10 nokta kullanarak>> x=1:10; %toplam 10 nokta>> f=exp(x)-x;>> A1= trapz(x,f)
A1 = 2.377968180701373e+004%Daha fazla nokta kullanarak>> x=1:0.1:10; %toplam 91 nokta>> f=exp(x)-x;>> A2=trapz(x,f)
A2 =2.199259757778003e+004%Daha fazla nokta kullanarak>> x=1:0.01:10; %toplam 901 nokta
86
Sayısal Integral
>> f=exp(x)-x;>> A3= trapz(x,f)
A3 = 2.197443104390165e+004
Integralin analitik degeri:
>> syms x;>> f2 =exp(x) - x;>> int(f2,1,10)
ans =exp(10) - exp(1) - 99/2>> Igercek=double(ans)
Igercek =2.197424751297826e+04%Bagıl Hatala Yüzdeleri>> bagil_hata1=(abs(Igercek-A1)/abs(Igercek))*100
bagil_hata1 = 8.216137062118561 %10 nokta kullanılarak>> bagil_hata2=(abs(Igercek-A2)/abs(Igercek))*100
bagil_hata2 = 0.083507136209958 %91 nokta kullanılarak>> bagil_hata3=(abs(Igercek-A3)/abs(Igercek))*100
bagil_hata3 =8.352091387057165e-004 %901 nokta kullanılarak
Sonuç: daha fazla nokta kullanıldıgında hata azalmaktadır.
Simdi Yamuk kuralı için kendi fonksiyonumuzu yazalım.
Yamuk kuralı için MATLAB fonksiyonu
function I=Trap(f,a,b,n)% f fonksiyonunun [a,b] aralıgında integralini n alt aralık kullanarak yamuk kuralı ile %hesaplar.%f inline olarak tanımlanmıs fonksiyon olmalıdır.% I=Trap(@f,a,b,n)h=(b-a)/n;S=f(a);for i=1:n-1x(i)=a+h*i;S=S+2*f(x(i));endS=S+f(b);I=h*S/2;
Örnek: ∫ 2
1
1
xdx
integralini yukarıda yazılan ’Trap’ fonksiyonunu kullanarak n = 2, 4, 8 aralıkiçin hesaplayınız. Yamuk kuralı ile hesaplatalım.
[a, b] = [1, 2] ve f(x) = 1/x olur.
87
Sayısal Integral
>> format long>> I2=Trap(@(x) 1./x,1,2,2) %n=2 aralık için
I2 = 0.708333333333333>> I4=Trap(@(x) 1./x,1,2,4) %n=4 aralık için
I4 = 0.697023809523809>> I8=Trap(@(x) 1./x,1,2,8) %n=8 aralık için
I8 =0.694121850371850
veya
Öncelikle fonksiyon dosyası olusturulur. MATLAB Editöründe
function f1=func1(x)f1=1./x;
dosyası olusturulur ve ’func1.m’ olarak kaydedilir. MATLAB komut pencere-sinde
>> format long>> I2y= Trap(@func1,1,2,2) %n=2 aralık için
I2y=0.708333333333333>> I4y= Trap(@func1,1,2,4) %n=4 aralık için
I4y = 0.697023809523809>> I8y= Trap(@func1,1,2,8) %n=8 aralık için
I8y = 0.694121850371850 %aynı sonuçları verdi>> syms x>> Igercek=int(1/x,1,2) %gerçek integral degeri
Igercek = log(2)>> Igercek=eval(Igercek) %’eval’ komutu sembolik degiskeni hesapladı
Igercek = 0.693147180559945% n=2, n=4, n=8 aralık için mutlak hatalar:
>> mutlak_hata1=abs(Igercek-I2) %n=2 aralık için mutlak hatamutlak_hata1 = 0.015186152773388
>> mutlak_hata2=abs(Igercek-I4) %n=4 aralık için mutlak hatamutlak_hata2 =0.003876628963864
>> mutlak_hata8=abs(Igercek-I8) %n=8 aralık için mutlak hatamutlak_hata8 =9.746698119050823e-004
Sonuç: aralık sayısı arttıkça hata azaldı.
Aynı aralık sayıları ile MATLAB’ın hazır fonksiyonu trapz(x,y) komutu ilebulursak
88
Sayısal Integral
>> h=(2-1)/2;>> x=1:h:2;>> y=1./x;>> IT2=trapz(x,y)
IT2 =0.708333333333333 %n=2 aralık için
>> h=(2-1)/4;>> x=1:h:2;>> y=1./x;>> IT4= trapz(x,y)
IT4 =0.697023809523809 %n=4 aralık için
>> h=(2-1)/8;>> x=1:h:2;>> y=1./x;>> IT8=trapz(x,y)
IT8 =0.694121850371850 %n=8 aralık için
Yamuk kuralı için MATLAB’ın hazır fonksiyonu ve kendi yazdıgımız fonksiyo-nun sonuçlarının karsılastırması
>> fark1= I2-IT2fark1= 0
>> fark2=I4-IT4fark2=0
>> fark3= I8-IT8fark3=1.110223024625157e-016
>> I8I8 = 0.694121850371850
>> IT8IT8 = 0.694121850371850
Aynı sonuçlara ulasılmıstır.
Simpson Kuralı: quad, quadl ve quadgk komutları
quad komutu uyarlamalı Simpson kuralı ile integrali bulan MATLAB’ın hazırfonksiyonudur.
quad(’f’,a,b): f fonksiyonunun [a, b] aralıgındaki integralini Simpson yön-temi ile hesaplar.
89
Sayısal Integral
quad(’f’,a,b,tolerans): Tolerans mutlak hata degerinin alabilecegi enfazla degeri gösterir. Bu deger büyüdükçe sonuçtaki hata da artar. Küçül-dükçe komutun islem süresi artar. Bu deger girilmezse, otomatik olarak1.0e− 6 (yani 10−6 ) olarak alınır.
quadl komutu uyarlamalı Lobatto kareleme yöntemini kullanır.
quadl(’f’,a,b) : f fonksiyonunun [a, b] aralıgındaki integralini uyarlamalıLobatto yöntemi ile hesaplar.
quadl(’f’,a,b,tolerans): Tolerans mutlak hata degerinin alabilecegi enfazla degeri gösterir. Bu deger büyüdükçe sonuçtaki hata da artar. Küçül-dükçe komutun islem süresi artar. Bu deger girilmezse, otomatik olarak1.0e− 6 (yani 10−6 ) olarak alınır.
quadgk komutu Gauss-Kronrod yöntemi ile hesaplar.
quadgk(’f’,a,b) : f fonksiyonunun [a, b] aralıgındaki integralini Gauss-Kronrodyöntemi ile hesaplar. Aralıklar bölümüne sonsuz eklenebilir.
quadgk(’f’,a,b,’AbsTol’,tolerans): Tolerans mutlak hata degerinin ala-bilecegi en fazla degeri gösterir. Bu deger büyüdükçe sonuçtaki hata da artar.Küçüldükçe komutun islem süresi artar. Bu deger girilmezse, otomatik ola-rak 1.0e− 6 (yani 10−6 ) olarak alınır.
Komutlar için fonksiyonlar farklı sekillerde tanımlanabilir:
1. Fonksiyon dogrudan tek tırnakla komutun içinde kullanılabilir quad(’sin(x)’,0,pi)
2. Fonksiyon önceden ’inline’ komutu ile tanımlanabilir.
f=inline(’x+2’)quad(f,a,b)
3. Daha önceden tanımladıgınız m fonksiyon dosyası olarak kaydedilen fonk-siyon kullanılabilir. quad(g,a,b)
4. Fonksiyon @(x) kullanarak tanımlanabilir. quad(@(x) x.^2+1,a,b)
Örnek: ∫ π
0sinxdx
integralini Simpson kuralı ile hesaplatalım. Bagıl hata yüzdesini bulalım.
>> Is=quad(’sin(x)’,0,pi)>> bs=(abs(Iger-Is)/abs(Iger))*100
Is = 1.999999996398431bs = 1.800784521499566e-007
90
Sayısal Integral
Tolerans degeri verelim. Bagıl hata yüzdesini bulalım.
>> Is2=quad(’sin(x)’,0,pi,1e-11)Is2 = 1.999999999999987
>> bs2=(abs(Iger-Is2)/abs(Iger))*100bs2 = 6.772360450213455e-013
Bagıl hata yüzdesini bulalım.
Örnek: ∫ 10
1
x2
exdx
integralini Simpson kuralı ile hesaplatalım.
>> format long>> Q1=quad(’x.^2./exp(x)’,1,10)
Q1=1.833858417871337>> Q2=quad(’x.^2./exp(x)’,1,10,1.0e-10) %tolerans degeri 10^(-10) alındı.
Q2 =1.833858414426085>> f=inline(’x.^2./exp(x)’)
f = Inline function:f(x) = x.^2./exp(x)
>> Q3=quad(f,1,10)Q3 =1.833858417871337
m fonksiyon dosyası
function y=g(x)y=x.^2./exp(x);
Komut penceresinde
>> Q4=quad(@g,1,10,1.0e-10)Q4 =1.833858414426085
Eger integralin limitlerinde sonsuz varsa o zaman quadgk kullanılır.
Örnek: ∫ ∞1
x2
exdx
integralini hesaplatalım.
91
Sayısal Integral
>> Qg1=quadgk(@(x) x.^2./exp(x),1,inf)Qg1= = 1.839397205857212
>> Qg2=quadgk(@(x) x.^2./exp(x),1,inf,’AbsTol’,1.0e-10)Qg2 = 1.839397205857212
Örnek: ∫ ∞−∞
e−x2dx
integralini hesaplatalım.
>> I=quadgk(@(x) exp(-x.^2),-inf,inf)I =1.772453850780313
Örnek: ∫ 2
1e−x
2dx
integralini hesaplatalım. Bu integral analitik olarak hesaplanamaz, e−x2
fonk-siyonunun antitürevi yoktur.
>> Ql1=quadl(’exp(-x.^2)’,1,2)Ql1 = 0.13525721565932
Simpson’s 1/3 kuralı için MATLAB fonksiyonu
function I=Simp(f,a,b,n)% f fonksiyonunun [a,b] aralıgında integralini Simpson?s 1/3 kuralı ile n aralık sayısı için (n %çift sayı olmalıdır) hesaplar.%f fonksiyonu inline veya m-dosyası olabilir.
h=(b-a)/n;x(1)=a;S=f(a);for i=1:nx(i+1)=a+h*i; %x1,x2,?,xn noktaları, indis 1’den basladıend
for i=2:2:n %çift indisler toplama eklendiS=S+4*f(x(i));endfor i=3:2:n-1 %tek indisler toplama eklendiS=S+2*f(x(i));endS=S+f(b);I=h*S/3;
92
Sayısal Integral
Örnek: ∫ 2
0e−x
2dx
integralini yukarda yazılan Simp fonksiyonunu kullanarak n = 6, n = 8, n = 10aralık için hesaplayınız. Aynı integrali MATLAB’ın hazır fonksiyonları quad vequadl ile hesaplayınız.
Burada [a, b] = [0, 2] ve f(x) = exp(−x.2) olur.
>> f=inline(’exp(-x.^2)’);>> I6=Simp(f,0,2,6) %n=6 aralık için
I6 = 0.882031574954721>> I8=Simp(f,0,2,8) %n=8 aralık için
I8 = 0.882065510401331>> I10=Simp(f,0,2,10) %n=10 aralık için
I10 = 0.882074876854494>> Q=quad(f,0,2) %quad komutu ile
Q = 0.882081194911110
Farkları hesaplama
>> f1=Q-I6f1 = 4.961995638885774e-005
>> f2=Q-I8f2 = 1.568450977851299e-005
>> f3=Q-I10f3 = 6.318056615883805e-006
>> I24=Simp(f,0,2,24) %n=24 aralık içinI24 = 0.882081194422939
>> f4=Q-I24f4 = 4.881710591320143e-010
Aralık sayısı arttıkça fark azaldı.
>> Ql=quadl(f,0,2) %quadl komutu ileQl = 0.882082140308872
>> f4=Ql-I24f4 = 9.458859328015379e-007
Gauss Kareleme Yöntemi MATLAB fonksiyonu
93
Sayısal Integral
function I=GaussQuad(f,a,b,k)% f fonksiyonunun [a,b] aralıgındaki integralini Gauss kareleme yöntemi ile k (k=2,3,4,5) %nokta kullanarak bulur.
t=[-0.5773502692 -0.7745966692 -0.8611363116 -0.9061798459;0.5773502692 0 -0.3399810436 -0.5384693101;0 0.7745966692 0.3399810436 0;0 0 0.8611363116 0.5384693101;0 0 0 0.9061798459];
c=[1 0.5555555556 0.3478548451 0.2369268850;1 0.8888888889 0.6521451549 0.4786286705;0 0.5555555556 0.6521451549 0.5688888889;0 0 0.3478548451 0.4786286705;0 0 0 0.2369268850];
x(1:k)=0.5*((b-a).*t(1:k,k-1)+b+a);%Integral sınırlarının [a,b] den [-1,1]’e dönüstürülmesiy=feval(f,x);cc(1:k)=c(1:k,k-1);integ=y*cc’;I=integ*(b-a)/2;
Örnek: ∫ 2
0e−x
2dx
integralini Gauss kareleme yöntemi ile k = 2, k = 3, k = 5 nokta kullanarakhesaplayınız. Integralin gerçek degerini bulunuz.
>> f=inline(’exp(-x.^2)’);>> I2=GaussQuad(f,0,2,2) %k=2 nokta kullanarak
I2 = 0.919486116645532>> Igercek=int(’exp(-x^2)’,0,2)
Igercek =1/2*erf(2)*pi^(1/2) %integralin gerçek degeri>> Igercek=eval(Igercek)
ans = 0.882081390762422>> I3=GaussQuad(f,0,2,3) %k=3 nokta kullanarak
I3 =0.878864570919364>> I5=GaussQuad(f,0,2,5) %k=5 nokta kullanarak
I5 =0.882078017608442%mutlak hatalar>> mutlak_hata1=abs(Igercek-I2)
mutlak_hata1 =0.037404725883111>> mutlak_hata2=abs(Igercek-I3)
94
Sayısal Integral
mutlak_hata2 = 0.003216819843057>> mutlak_hata3=abs(Igercek-I5)
mutlak_hata3 =3.373153979469024e-006
Gauss kareleme yönteminde daha fazla nokta kullanıldıgında hata azaldı.Çift Katlı Integral’dblquad’ komutu sayısal olarak çift katlı integrali dikdörtgen üzerinde he-saplar.Genel kullanımı:q = dblquad(fun,xmin,xmax,ymin,ymax)
q = dblquad(fun,xmin,xmax,ymin,ymax,tol)
q = dblquad(fun,xmin,xmax,ymin,ymax,tol,method)
q = dblquad(fun,xmin,xmax,ymin,ymax) : quad fonksiyonu kullanarakxmin <= x <= xmax, ymin <= y <= ymax dikdörtgeni üzerinde fun(x,y) fonk-siyonunun çift integralini hesaplarq = dblquad(fun,xmin,xmax,ymin,ymax,tolerans) tolerans degeri giri-lir, girilmediginde varsayılan tolerans degeri 1e− 06 yani 10−6 olarak alınır.Örnek: ∫ 2π
π
∫ π
0y sinx+ x cos ydxdy
çift katlı integralini hesaplayalım.1. yol:
Q1=dblquad(@(x,y) y*sin(x)+x*cos(y),0,pi,pi,2*pi)Q1 =29.608813157600196
2.yol:Öncelikle fonksiyon dosyası olusturulur:
function z = cift_int_orn(x, y)z = y*sin(x)+x*cos(y);
Komut penceresinde
Q2 = dblquad(@cift_int_orn,0,pi,pi,2*pi)Q2 = -9.869604377254573
Örnek: Dikdörtgen seklindeki bir plakanın ısısı
T (x, y) = 2xy + 2x− x2 − 2y2 + 72
fonksiyonu ile verilmistir. Eger plakanın uzunlugu 8 m ve genisligi 6 m iseortalama ısıyı MATLAB ile hesaplayınız.
>> ort_isi=dblquad(@(x,y) 2*x*y+2*x-x.^2-2*y.^2+72,0,8,0,6 )ort_isi = 2816
95
5 Kısmi Diferansiyel Denklemler
1. Dalga Denklemi Hiperbolik denklem
utt = c2uxx, 0 ≤ x ≤ l, 0 ≤ t ≤ T
Sınır kosullarıu(0, t) = f1(t), u(1, t) = f2(t), 0 ≤ t ≤ T
Baslangıç kosulları
u(x, 0) = g1(x),∂u
∂t(x, 0) = g2(x), 0 ≤ x ≤ l
Girdi olarak:
l = 1, T = 2, c = 1, f1(t) = 0, f2(t) = 0, g1(x) = x(1− x), g2(x) = 0
n: x-eksenindeki nokta sayısı = 10,
m: t-eksenindeki nokta sayısı = 10,
%waveornek.ml=1;t=2;n=10;n1=n+1;m=20;m1=m+1;h=1/n;f=t/m;c=1.0;x(1)=0;
for i=2:n1x(i)=x(1)+(i-1)*h;endt(1)=0;for i=2:m1
97
Kısmi Diferansiyel Denklemler
t(i)=t(1)+(i-1)*f;endfor i=1:n1y(i,1)=feval(’f1’,x(i));dy(i,1)=0;end
y(1,1:m1)=0;y(n1,1:m1)=0;p=(c*f/h)^2;p2=p/2;p22=2*(1-p);y(2,2)=(1-p)*y(2,1)+p2*y(3,1)+f*dy(2,1);y(3:n-1,2)=p2*y(2:n-2,1)+(1-p)*y(3:n-1,1)+p2*y(4:n,1)+f*dy(3:n-1,1);y(n,2)=p2*y(n-1,1)+(1-p)*y(n,1)+f*dy(n,1);y(2,3)=p22*y(2,2)+p*y(3,2)-y(2,1);y(3:n-1,3)=p*y(2:n-2,2)+p22*y(3:n-1,2)+p*y(4:n,2)+y(3:n-1,1);y(n,3)=p*y(n-1,2)+p22*y(n,2)-y(n,1);
for j=4:m1y(2,j)=p22*y(2,j-1)+p*y(3,j-1)-y(2,j-2);y(3:n-1,j)=p*y(2:n-2,j-1)+p22*y(3:n-1,j-1)+p*y(4:n,j-1)-y(3:n-1,j-2);y(n,j)=p*y(n-1,j-1)+p22*y(n,j-1)-y(n,j-2);end
disp(’Solution of hyperbolic equation’);disp(’ ’);disp(’x-axis: yatay, delta_x=0.1; t-axis:dikey, delta_t=0.1 ’);disp(’ ’);disp(’Column 1 through 6’);disp(y(1:n1, 1:6));disp(’Column 7 through 12’);disp(y(1:n1, 7:12));disp(’Column 13 through 18’);disp(y(1:n1, 13:18));disp(’Column 18 through 21’);disp(y(1:n1, 18:21));mesh(t,x,y)xlabel(’x’);ylabel(’t’);zlabel(’y’);title(’Hyperbolic curve for y=sin(pi*x)’);
98
Kısmi Diferansiyel Denklemler
function y=f1(x)y=sin(pi*x);
>>wave>> waveSolution of hyperbolic equation
x-axis: yatay, delta_x=0.1; t-axis:dikey, delta_t=0.1
Column 1 through 60 0 0 0 0 0
0.3090 0.2939 0.2500 1.3572 1.7135 1.90210.5878 0.5590 1.6511 1.9635 3.2593 3.61800.8090 0.7694 2.2725 3.5532 3.8680 4.97980.9511 0.9045 2.6715 4.1771 5.2737 5.23611.0000 0.9511 2.8090 4.3920 5.5451 6.15540.9511 0.9045 2.6715 4.1771 5.2737 5.23610.8090 0.7694 2.2725 3.5532 3.8680 4.97980.5878 0.5590 1.6511 1.9635 3.2593 3.61800.3090 0.2939 0.2500 1.3572 1.7135 1.9021
0 0 0 0 0 0
Column 7 through 120 0 0 0 0 0
1.9045 1.7205 1.3680 0.8817 -0.3090 -0.29393.6226 3.2725 2.6022 1.0590 0.5878 -0.55904.9861 4.5043 2.9635 2.3083 0.8090 -0.76945.8615 4.6771 4.2104 2.7135 0.9511 -0.90454.9271 5.5676 4.4271 2.8532 1.0000 -0.95115.8615 4.6771 4.2104 2.7135 0.9511 -0.90454.9861 4.5043 2.9635 2.3083 0.8090 -0.76943.6226 3.2725 2.6022 1.0590 0.5878 -0.55901.9045 1.7205 1.3680 0.8817 -0.3090 -0.2939
0 0 0 0 0 0
Column 13 through 180 0 0 0 0 0
-0.2500 -1.3572 -1.7135 -1.9021 -1.9045 -1.7205-1.6511 -1.9635 -3.2593 -3.6180 -3.6226 -3.2725-2.2725 -3.5532 -3.8680 -4.9798 -4.9861 -4.5043-2.6715 -4.1771 -5.2737 -5.2361 -5.8615 -4.6771
99
Kısmi Diferansiyel Denklemler
-2.8090 -4.3920 -5.5451 -6.1554 -4.9271 -5.5676-2.6715 -4.1771 -5.2737 -5.2361 -5.8615 -4.6771-2.2725 -3.5532 -3.8680 -4.9798 -4.9861 -4.5043-1.6511 -1.9635 -3.2593 -3.6180 -3.6226 -3.2725-0.2500 -1.3572 -1.7135 -1.9021 -1.9045 -1.72050 0 0 0 0 0
Column 18 through 210 0 0 0
-1.7205 -1.3680 -0.8817 0.3090-3.2725 -2.6022 -1.0590 -0.5878-4.5043 -2.9635 -2.3083 -0.8090-4.6771 -4.2104 -2.7135 -0.9511-5.5676 -4.4271 -2.8532 -1.0000-4.6771 -4.2104 -2.7135 -0.9511-4.5043 -2.9635 -2.3083 -0.8090-3.2725 -2.6022 -1.0590 -0.5878-1.7205 -1.3680 -0.8817 0.3090
0 0 0 0
çalıstırıldıgında sonuçlar ve Sekil 5.1 elde edilir.
2. Isı Denklemi
ut = cuxx, 0 < x < 1, t > 0
Baslangıç ısısıu(x, 0) = f(x), 0 < x < 1
olsun. Sınır kosulları
u(0, t) = g0(t), u(1, t) = g1(t), t > 0
olsun. Burada c = 1, f(x) = 70◦C, g0(t) = 50◦C, g1(t) = 20◦C,∆x = 0.1,∆t = 0.025olsun.
function [u,A]=Heat(t,x,time,length)
n=time/t;m=length/x;u=zeros(m+1, n+1);
for i=1: n+1
100
Kısmi Diferansiyel Denklemler
-101
-5
2
0y
Hyperbolic curve for y=sin(pi*x)
1.5
5
t
0.5
x
10
10.5
0 0
Sekil 5.1: Dalga denklemi
101
Kısmi Diferansiyel Denklemler
u(1,i)=50;u(m+1,i)=20;end
s=0.1*t/(x)^2;
for k=2:mu(k,1)=70;end
A=zeros(m-1,m-1);for i=1:m-1for j=1:m-1if j==iA(i,j)=1+2*s;elseif j==i+1A(i,j)=-s;elseif j==i-1A(i,j)=-s;endendend
AA=inv(A);
w=zeros(m-1,n+1);for i=1:m-1for j=1:n+1w(i,j)=u(i+1,j);endend
for j=2:n+1w(1,j-1)=w(1,j-1)+s*50;w(m-1,j-1)=w(m-1,j-1)+s*20;w(:,j)=AA*w(:,j-1);w(1,j-1)=w(1,j-1)-s*50;w(m-1,j-1)=w(m-1,j-1)-s*20;end
for i=2:mfor j=1:n+1
102
Kısmi Diferansiyel Denklemler
u(i,j)=w(i-1,j);endend
u=u’;
>> >> t=0.025;>> time=1.5;>> x=0.1;>> length=1.0;>> [u,A]=Heat(t,x,time,length)
u =
50.0000 70.0000 70.0000 70.0000 70.0000 70.0000 70.0000 70.0000 70.0000 70.0000 20.000050.0000 66.5685 69.4112 69.8988 69.9814 69.9896 69.9562 69.7474 68.5281 61.4214 20.000050.0000 64.1421 68.5784 69.6834 69.9270 69.9528 69.8314 69.2112 66.4465 55.3553 20.000050.0000 62.3742 67.6767 69.3727 69.8257 69.8740 69.6068 68.4409 64.1938 50.9358 20.000050.0000 61.0480 66.7912 68.9925 69.6728 69.7412 69.2788 67.5043 61.9834 47.6211 20.000050.0000 60.0252 65.9594 68.5661 69.4675 69.5478 68.8544 66.4637 59.9106 45.0659 20.000050.0000 59.2159 65.1942 68.1118 69.2122 69.2916 68.3463 65.3684 58.0094 43.0455 20.000050.0000 58.5600 64.4965 67.6425 68.9110 68.9744 67.7690 64.2544 56.2838 41.4109 20.000050.0000 58.0169 63.8616 67.1667 68.5685 68.6006 67.1372 63.1464 54.7238 40.0613 20.000050.0000 57.5584 63.2825 66.6899 68.1900 68.1761 66.4642 62.0606 53.3137 38.9265 20.000050.0000 57.1642 62.7515 66.2152 67.7805 67.7078 65.7619 61.0068 52.0365 37.9571 20.000050.0000 56.8197 62.2618 65.7446 67.3449 67.2027 65.0401 59.9905 50.8756 37.1173 20.000050.0000 56.5143 61.8067 65.2788 66.8877 66.6676 64.3071 59.0142 49.8163 36.3809 20.000050.0000 56.2396 61.3807 64.8181 66.4129 66.1088 63.5693 58.0786 48.8453 35.7282 20.000050.0000 55.9896 60.9792 64.3627 65.9244 65.5319 62.8320 57.1829 47.9514 35.1440 20.000050.0000 55.7594 60.5981 63.9124 65.4253 64.9420 62.0993 56.3260 47.1247 34.6168 20.000050.0000 55.5453 60.2341 63.4670 64.9186 64.3435 61.3745 55.5059 46.3570 34.1374 20.000050.0000 55.3443 59.8846 63.0266 64.4069 63.7401 60.6598 54.7208 45.6412 33.6984 20.000050.0000 55.1541 59.5472 62.5910 63.8923 63.1350 59.9571 53.9686 44.9713 33.2942 20.000050.0000 54.9728 59.2203 62.1601 63.3766 62.5307 59.2678 53.2473 44.3420 32.9198 20.000050.0000 54.7989 58.9024 61.7341 62.8617 61.9295 58.5926 52.5552 43.7491 32.5714 20.000050.0000 54.6313 58.5923 61.3129 62.3488 61.3332 57.9323 51.8903 43.1887 32.2457 20.000050.0000 54.4691 58.2892 60.8967 61.8392 60.7432 57.2873 51.2510 42.6577 31.9401 20.000050.0000 54.3114 57.9922 60.4855 61.3338 60.1607 56.6576 50.6358 42.1531 31.6522 20.000050.0000 54.1578 57.7010 60.0794 60.8336 59.5866 56.0434 50.0432 41.6727 31.3803 20.000050.0000 54.0077 57.4151 59.6786 60.3391 59.0217 55.4445 49.4719 41.2142 31.1225 20.000050.0000 53.8608 57.1341 59.2833 59.8510 58.4664 54.8609 48.9207 40.7759 30.8777 20.000050.0000 53.7168 56.8578 58.8934 59.3698 57.9213 54.2922 48.3885 40.3561 30.6445 20.0000
103
Kısmi Diferansiyel Denklemler
50.0000 53.5756 56.5860 58.5093 58.8958 57.3866 53.7383 47.8743 39.9534 30.4219 20.000050.0000 53.4368 56.3186 58.1308 58.4294 56.8624 53.1988 47.3771 39.5666 30.2090 20.000050.0000 53.3005 56.0555 57.7583 57.9708 56.3490 52.6734 46.8961 39.1946 30.0051 20.000050.0000 53.1664 55.7967 57.3917 57.5202 55.8463 52.1617 46.4304 38.8364 29.8095 20.000050.0000 53.0346 55.5421 57.0311 57.0777 55.3544 51.6634 45.9793 38.4911 29.6215 20.000050.0000 52.9050 55.2917 56.6766 56.6434 54.8732 51.1782 45.5422 38.1579 29.4406 20.000050.0000 52.7776 55.0454 56.3282 56.2174 54.4026 50.7056 45.1184 37.8360 29.2664 20.000050.0000 52.6523 54.8033 55.9860 55.7997 53.9426 50.2454 44.7074 37.5250 29.0985 20.000050.0000 52.5291 54.5654 55.6499 55.3903 53.4930 49.7972 44.3085 37.2241 28.9363 20.000050.0000 52.4080 54.3316 55.3201 54.9891 53.0536 49.3606 43.9212 36.9329 28.7797 20.000050.0000 52.2890 54.1020 54.9964 54.5962 52.6243 48.9353 43.5452 36.6508 28.6283 20.000050.0000 52.1721 53.8765 54.6789 54.2115 52.2050 48.5210 43.1799 36.3775 28.4818 20.000050.0000 52.0572 53.6551 54.3676 53.8348 51.7953 48.1174 42.8249 36.1125 28.3399 20.000050.0000 51.9445 53.4379 54.0624 53.4661 51.3953 47.7241 42.4798 35.8554 28.2025 20.000050.0000 51.8338 53.2248 53.7633 53.1054 51.0046 47.3409 42.1444 35.6059 28.0693 20.000050.0000 51.7251 53.0157 53.4702 52.7525 50.6230 46.9674 41.8181 35.3636 27.9401 20.000050.0000 51.6186 52.8108 53.1832 52.4073 50.2505 46.6035 41.5007 35.1283 27.8148 20.000050.0000 51.5140 52.6099 52.9020 52.0696 49.8867 46.2488 41.1919 34.8997 27.6932 20.000050.0000 51.4115 52.4130 52.6268 51.7395 49.5316 45.9030 40.8913 34.6775 27.5750 20.000050.0000 51.3110 52.2200 52.3573 51.4167 49.1848 45.5659 40.5988 34.4615 27.4603 20.000050.0000 51.2125 52.0310 52.0935 51.1011 48.8463 45.2373 40.3140 34.2515 27.3488 20.000050.0000 51.1160 51.8459 51.8354 50.7926 48.5158 44.9170 40.0367 34.0472 27.2404 20.000050.0000 51.0214 51.6647 51.5829 50.4911 48.1931 44.6046 39.7666 33.8484 27.1350 20.000050.0000 50.9288 51.4872 51.3359 50.1964 47.8782 44.3000 39.5036 33.6549 27.0325 20.000050.0000 50.8381 51.3136 51.0943 49.9084 47.5707 44.0030 39.2473 33.4666 26.9328 20.000050.0000 50.7494 51.1436 50.8579 49.6270 47.2705 43.7134 38.9977 33.2833 26.8357 20.000050.0000 50.6625 50.9773 50.6268 49.3521 46.9775 43.4309 38.7544 33.1048 26.7413 20.000050.0000 50.5774 50.8146 50.4009 49.0834 46.6915 43.1554 38.5173 32.9310 26.6494 20.000050.0000 50.4942 50.6554 50.1800 48.8210 46.4123 42.8867 38.2863 32.7617 26.5599 20.000050.0000 50.4127 50.4997 49.9641 48.5646 46.1397 42.6246 38.0611 32.5968 26.4727 20.000050.0000 50.3331 50.3475 49.7530 48.3142 45.8737 42.3689 37.8416 32.4361 26.3878 20.000050.0000 50.2552 50.1986 49.5467 48.0696 45.6140 42.1195 37.6275 32.2795 26.3051 20.000050.0000 50.1790 50.0531 49.3451 47.8306 45.3605 41.8763 37.4189 32.1269 26.2246 20.0000
A =
1.5000 -0.2500 0 0 0 0 0 0 0-0.2500 1.5000 -0.2500 0 0 0 0 0 00 -0.2500 1.5000 -0.2500 0 0 0 0 00 0 -0.2500 1.5000 -0.2500 0 0 0 00 0 0 -0.2500 1.5000 -0.2500 0 0 0
104
Kısmi Diferansiyel Denklemler
0 0 0 0 -0.2500 1.5000 -0.2500 0 00 0 0 0 0 -0.2500 1.5000 -0.2500 00 0 0 0 0 0 -0.2500 1.5000 -0.25000 0 0 0 0 0 0 -0.2500 1.5000
>> mesh(u);>> xlabel(’Length’);>> ylabel(’Time step t=0.025’);>> zlabel(’Temperature’);>> title(’Heat Problem (Implicit Method)’)
çalıstırıldıgında verilen sonuçlar ve Sekil 5.2 grafigi elde edilir. Eger
t = 0.075
alınırsa Sekil 5.3 grafigi elde edilir.
>> t=0.075;>> time=1.5;>> x=0.1;>> length=1.0;>> [u,A]=Heat(t,x,time,length);>> mesh(u);>> xlabel(’Length’);>> ylabel(’Time step t=0.075’);>> zlabel(’Temperature’);>> title(’Heat Problem (Implicit Method)’)
105
Kısmi Diferansiyel Denklemler
2080
30
40
60 15
Tem
pera
ture
50
Heat Problem (Implicit Method)
Time step t=0.025
60
40 10
Length
70
20 5
0 0
Sekil 5.2: Isı denklemi t = 0.025
106
Kısmi Diferansiyel Denklemler
2030
30
40
15
Tem
pera
ture
20
50
Heat Problem (Implicit Method)
Time step t=0.075
60
10
Length
70
105
0 0
Sekil 5.3: Isı denklemi t = 0.075
107
Kısmi Diferansiyel Denklemler
Alıstırmalar 1
1. A =
1 2 −13 2 05 6 1
matrisi verilsin. MATLAB kullanarak A matrisinin
(a) determinantını
(b) varsa tersini A−1
(c) kösegen elemanlarını
(d) özdegerlerini
(e) rankını
(f) boyutunu
(g) 2. sütununu
(h) 3. satırını
(i) 1. sütundan 2. sütuna kadar sütunlardan olusan alt matrisini
(k) 2. satırdan 3. satıra kadar satırlardan olusan alt matrisini
(l) transpozunu
bulunuz.
Cevap:>> A=[1 2 -1;3 2 0;5 6 1]A =1 2 -13 2 05 6 1>> det(A)ans =-12>> inv(A)ans =-0.1667 0.6667 -0.16670.2500 -0.5000 0.2500-0.6667 -0.3333 0.3333
>> diag(A)ans =
108
Kısmi Diferansiyel Denklemler
121>> eig(A)ans =-1.18382.5919 + 1.8490i2.5919 - 1.8490i>> rank(A)ans =3>> size(A)ans =3 3>> A(:,2)ans =226>> A(3,:)ans =5 6 1>> A(:,1:2)ans =1 23 25 6>> A(2:3,:)ans =3 2 05 6 1>> A’ans =1 3 52 2 6-1 0 1
2. Asagıdaki matrislerin çarpımını bulunuz.
A =
3 1 −11 −1 34 0 5
2×3
, B =
2 −2 1 2−2 1 0 31 0 2 6
3×4
Cevap:
109
Kısmi Diferansiyel Denklemler
>> A=[3 1 -1;1 -1 3;4 0 5];>> B=[2 -2 1 2;-2 1 0 3;1 0 2 6];>> C=A*BC =3 -5 1 37 -3 7 1713 -8 14 38
3. y = cosx fonksiyonunun grafigini [−π, π] aralıgında çizdiriniz.
Cevap:>> x=-pi:0.1:pi;>> y=cos(x);>> plot(x,y)
4. y = cosx ve y = sinx fonksiyonlarının grafiklerini [−2π, 2π] aralıgında aynıgrafikte çiziniz. y = sinx fonksiyonunun grafigini kırmızı renkte çizdiriniz.legend komutu ile açıklayıcı bilgi ekleyiniz.
Cevap:>> x=-2*pi:0.1:2*pi;>> y1=cos(x);>> y2=sin(x);>> plot(x,y1);>> hold on>> plot(x,y2,’r’)>> legend(’cos grafigi’,’sinüs grafigi’)
5. y = cosx fonksiyonun [−π, π] aralıgında grafiginin üzerinde y degerleri 0.5degerinden küçük olan noktaları gösteriniz.
Cevap:>> x=-pi:0.1:pi;>> y=cos(x);>> plot(x,y)>> k=find(y<0.5);>> hold on>> plot(x(k),y(k),’o’)
5. f(x, y) = xy fonksiyonunun grafigini [x, y] = [−10, 10] × [−10, 10] aralıgı içinçiziniz.
110
Kısmi Diferansiyel Denklemler
Cevap:>> [X,Y]=meshgrid(-10:0.5:10);>> Z=X.*Y;>> mesh(Z)
6. fn(x) = sin(nπx) fonksiyonlarının grafiklerini n = 1, 2, · · · , 8 için ve x ∈ [−1, 1]aralıgı için for döngüsünü kullanarak aynı pencerede çizdiriniz.
Cevap:>> x=-1:0.05:1;>> for n=1:8
subplot(4,2,n), plot(x,sin(n*pi*x))end
7. Fibonacci dizisi 0 ve 1 sayıları ile baslar ve diger terimleri kendinden öncekiiki terimin toplamına esittir. Yani f1 = 0, f2 = 1 ve
fn = fn−1 + fn−2, n = 3, 4, 5, · · ·
olarak tanımlanmıstır. fn−1
fnoranının altın orana
√5−12 sayısına yaklastıgını
MATLAB programı gösteriniz. Oranları ve altın oran sabit fonksiyonunu aynıgrafik üzerinde çizdiriniz.
Cevap:>> f(1)=0; f(2)=1;>> for i=3:20
f(i)=f(i-1)+f(i-2);end
>> plot(1:19,f(1:19)./f(2:20),’o’)>> hold on, xlabel(’n’)>> plot(1:19,f(1:19)./f(2:20),’-’)>> legend(’f_{n-1}/f_n terimlerinin oranı’)>> plot([0 20], (sqrt(5)-1)/2*[1 1],’--’)
8. Asagıdaki toplamları hesaplayan for döngüsünü içeren bir MATLAB koduyazınız.
S20 = 1 + 122
+ 132
+ · · ·+ 1202
S21 = 1 + 122
+ 132
+ · · ·+ 1202
+ 1212
...S100 = 1 + 1
22+ 1
32+ · · ·+ 1
202+ 1
212+ · · ·+ 1
1002
111
Kısmi Diferansiyel Denklemler
Cevap:>> S=zeros(100,1);>> S(20)=sum(1./(1:20).^2);>> for n=21:100
S(n)=S(n-1)+1/n^2;end
>> S(21:100)
9. Asagıdaki toplamın 100’den küçük olacak sekilde yapan en büyük n sayı-sını while döngüsünü kullanarak MATLAB kodu ile bulunuz.
12 + 22 + · · ·+ n2
Cevap:>> S=1; n=1;>> while S+(n+1)^2<100
n=n+1; S=S+n^2;end
>> [n,S]ans =6 91
10. Kenar uzunlukları a, b, c olarak verilen bir üçgenin alanı A asagıdaki for-mülle hesaplanır
A =√s(s− a)(s− b)(s− c)
burada s = (a+ b+ c)/2. Kenar uzunlukları a, b, c degerlerini girdi olarak alanve çıktı olarak üçgenin alanını veren bir MATLAB fonksiyonu yazınız. Fonk-siyonu kullanarak a = 3, b = 4, c = 5 kenar uuznlukları olan üçgenin alanınıbulunuz.
Cevap: Fonksiyon olusturma
function A=alan(a,b,c)% Kenar uzunlukları a,b,c olan üçgebin alanını hesaplar%Kullanımı Alan=alan(a,b,c)s=(a+b+c)/2;A=sqrt(s*(s-a)*(s-b)*(s-c));%Alan fonksiyonunun sonu
Fonksiyonu çagırma>> alan(3,4,5)
ans =6
112
Kısmi Diferansiyel Denklemler
11. Yarıçapı r cm ve yüksekligi h cm olan dik koninin yüzey alanını ve hac-mini hesaplayan bir fonksiyon yazınız. Fonksiyonunuzun adı, girdi ve çıktı-ları [A,V]=koni(r,h) seklinde olsun. Fonksiyonunuzun adı koni, girdileriyarıçapı ve yükseklik, çıktıları ise alan A ve hacim V olsun. Fonksiyonunuzu
a) r = 3, h = 4 b) r = 5, h = 6 c) r = 9, h = 12
degerleri için çalıstırınız. sonuçlarınızda 4 ondalık basamak kullanınız. Koni-nin hacmi V = 1
3πr2h, toplam yüzey alanı A = πrs+ πr2, s =
√r2 + h2.
Cevap: Fonksiyon olusturma
function [A,V]=koni(r,h)V=(1/3)*pi*r^2*hs=sqrt(r^2+h^2);A=pi*r*s+pi*r^2
Fonksiyon çagırma>> format short>> koni(3,4)
V =37.6991A =75.3982
>> koni(5,6)V =157.0796A =201.2229
>> koni(9,12)V =1.0179e+003A =678.5840
12. Taban kenar uzunlugu b cm ve yüksekligi h cm olan kare piramidin yüzeyalanını ve hacmini hesaplayan bir fonksiyon yazınız. Fonkisyonunuzun adı,girdi ve çıktıları [A,V]=piramit(b,h) seklinde olsun. Fonksiyonunuzun adıpiramit, girdileri taban kenar uzunlugu b, yüksekligi h, çıktıları ise toplamyüzey alanı A ve hacmim V olsun. Fonksiyonunuzu
a) b = 6, h = 4, b) b = 24, h = 16 c) b = 9, h = 13
degerleri için çalıstırınız.Piramitin hacmi V = 1
3b2h, toplam yüzey alanı A = 2bs+ b2, s =
√(b/2)2 + b2.
Cevap: Fonksiyon olusturma
function [A,V]=piramit(b,h)s=sqrt((b/2)^2+h^2);A=2*b*s+b^2V=(1/3)*b^2*h
113
Kısmi Diferansiyel Denklemler
Fonksiyon çagırma>> piramit(6,4)
A =96V =48
>> piramit(24,16)A =1536V =3072
>> piramit(9,13)A =328.6227V =351
13. Karenin, dikdörtgenin ve yamugun alanlarını hesaplayan bir programyazılacaktır. Kullanıcıya ilk olarak "Kare, dikdortgen ve yamuktan hangisininalanini hesaplamak istiyorsunuz?" diye sorulacak, kullanıcı klavye ile "Kare"yazdıgında, kullanıcıdan karenin bir kenar uzunlugunu girmesi istenecektir.Eger sekil dikdortgen ise "Kisa kenari girin" ve "Simdi de uzun kenari girin"ifadesi kullanıcıya yöneltilecektir. Eger sekil yamuk ise "Alt kenari girin" ,"Ust kenari girin" ve "Yuksekligi girin" ifadesi kullanıcıya yöneltilecektir. Herbir islemden sonra (istenen sekle göre) "Karenin alanı=" vb. ifadeleri takibenhesaplanan alanın degeri kullanıcıya bildirilecektir. Programınızı kenarı 19olan kare, kenarları 67, 89 olan dikdörtgen ve alt kenarı 45, üst kenarı 63,yüksekligi 27 olan yamukların alanlarını hesaplatmak için kullanınız.
Cevap:
disp(’Kare, dikdortgen ve yamuktan hangisinin alanini hesaplamakistiyorsunuz?’);A=input(’Kare ise "k",dikdortgen ise "d", yamuk ise "y" yaziniz’,’s’);if A==’k’kenar=input(’Kare nin bir kenarinin uzunlugunu giriniz’);disp(’Kare nin alani’)Alan=kenar^2elseif A==’d’kenar1=input(’Dikdortgenin kisa kenarinin uzunlugunu giriniz’);kenar2=input(’Dikdortgenin uzun kenarinin uzunlugunu giriniz’);disp(’Dikdortgenin nin alani’)Alan=kenar1*kenar2elseif A==’y’alt=input(’Yamugun alt taban uzunlugunu giriniz’);ust=input(’Yamugun ust kenar uzunlugunu giriniz’);yukseklik=input(’Yamugun yuksekligini giriniz’);disp(’Yamugun alani’)
114
Kısmi Diferansiyel Denklemler
Alan=(alt+ust)*yukseklik/2end
Bu dosya kare_yamuk_dikd.m olarak kaydedilir, komut penceresine gelinirve dosyanın ismi yazılır.
Kod çagırma>> kare_yamuk_dikdKare, dikdortgen ve yamuktan hangisinin alanini hesaplamak istiyorsunuz?Kare ise "k",dikdortgen ise "d", yamuk ise "y" yazinizkKare nin bir kenarinin uzunlugunu giriniz19Kare nin alaniAlan =361>> kare_yamuk_dikdKare, dikdortgen ve yamuktan hangisinin alanini hesaplamak istiyorsunuz?Kare ise "k",dikdortgen ise "d", yamuk ise "y" yazinizdDikdortgenin kisa kenarinin uzunlugunu giriniz67Dikdortgenin uzun kenarinin uzunlugunu giriniz89Dikdortgenin nin alaniAlan = 5963>> kare_yamuk_dikdKare, dikdortgen ve yamuktan hangisinin alanini hesaplamak istiyorsunuz?Kare ise "k",dikdortgen ise "d", yamuk ise "y" yazinizyYamugun alt taban uzunlugunu giriniz45Yamugun ust kenar uzunlugunu giriniz63Yamugun yuksekligini giriniz27Yamugun alaniAlan = 1458
14.
A =
(1
2+
1
3
)+
1
3
(1
22+
1
32
)+
1
5
(1
23+
1
33
)+
1
7
(1
24+
1
34
)+ · · ·
Yukarıda A sayısının seri karsılıgı verilmistir. Seri açılımını toplamını 1.00339’danbüyük yapan ilk terim sayısını ve bu terim için A degerini bulan MATLABprogramı yazınız. Sonuçlarınızda 14 ondalık basamak kullanınız.
Cevap:format longA=0; k=0;while A<1.00339
m=2*k+1;k=k+1;
115
Kısmi Diferansiyel Denklemler
A=A+(1/m)*((1/2)^(k)+(1/3)^(k));end’A nın degeri’A’terim sayısı’kA nın degeri: A = 1.003393983489271terim sayısı: k = 13
15. Soru 7’de tanımlanan Fibonacci dizisinin n. terimini bulan bir fonksi-yon yazınız. Fonksiyonun girdisi n çıktısı Fibonacci dizisinin n. terimi olsun.Fonksiyonu kullanarak Fibonacci dizisinin 20. terimini bulunuz.
Cevap: Fonksiyon olusturma
function f=Fib(n)%Fibonacci dizisindeki n. terimi verir%Kullanımı f=Fib(n)F=zeros(1,n+1);F(2)=1;for i=3:n+1
F(i)=F(i-1)+F(i-2);endf=F(n);
Fonksiyon çagırma>> f=Fib(20)
f =4181
16. Iki zarın n kere atılıs sonuçlarının benzerini veren bir MATLAB fonksi-yonu yazınız. Fonksiyonunuzu kullanarak 3 zarın atılıs sonuçlarını elde edi-niz.
Cevap: Fonksiyon olusturma
function d=zar(n)% Girdi: n, atılıs sayısı%Çıktı: nx2 matris, her satır bir atılısa karsılık gelir%Kullanımı: T=zar(3)d=floor(1+6*rand(n,2));
116
Kısmi Diferansiyel Denklemler
Fonksiyon çagırma>> zar(3)ans =5 66 41 1
17. ax2 + bx + c = 0 denkleminin köklerini hesaplayan bir fonksiyon yazınız.Fonksiyonunuzun adı, girdi ve çıktıları [x1,x2]=kok(a,b,c) seklinde olsun.Fonksiyonu kullanarak asagıdaki denklemleri çözünüz.
a) 2x2 − 275x+ 9317 = 0, b) x2 − 86x+ 1849 = 0, c) 3x2 + 5x+ 19 = 0
Cevap: Fonksiyon olusturma
function [x1,x2]=kok(a,b,c)D=b^2-4*a*c;
if D>0x1=(-b-sqrt(D))/(2*a)x2=(-b+sqrt(D))/(2*a)fprintf(’Esitlik iki farkli kok degerine sahiptir\n’);end
if D==0x1=-b/(2*a);x2=x1;fprintf(’Esitlik tek kok degerine sahiptir\n’)end
if D<0fprintf(’Esitlik reel kok degerine sahip degildir\n’)end
a), b) ve c) sıklarında verilen denklemlerin çözümü için fonksiyon komut pen-ceresinde asagıdaki gibi çagrılır.
Fonksiyon çagırmakok(2,-275,9317)D=1089x1=60.5
117
Kısmi Diferansiyel Denklemler
x2=77Esitlik iki farkli kok degerine sahiptirkok(1,-86,1849)D=0x1=43x2=43Esitlik tek kok degerine sahiptirkok(3,5,19)D=-203Esitlik reel kok degerine sahip degildir
18. f(x) = ex fonksiyonunun Taylor serisi asagıdaki gibi verilmistir.
ex =
∞∑n=0
xn
n!= 1 + x+
x2
2!+x3
3!+ · · ·
e2 sayısınının degerini Taylor seri toplamı ile mutlak hata 10−8 den küçük ola-cak sekilde hesaplayan bir kod yazınız. Sonuçlarınızda 14 ondalık basamakkullanınız.
Cevap:format longn=0; e2=exp(2);ST=0;while abs(e2-ST)>10^(-8)
ST=ST+(2^n)/factorial(n);n=n+1;
endST= 7.389056095384136mutlak_hata=abs(e2-ST)mutlak_hata=3.546514193430994e-009
19. Sonuçlarınızda 4 ondalık basamak kullanınız. tan−1 x fonksiyonunun Tay-lor seri açılımı asagıdaki gibi verilmistir.
tan−1 x =∞∑n=0
(−1)nx2n+1
2n+ 1= x− x3
3+x5
5− x7
7+ · · ·
tan−1 1 degerini hesaplamak için terim sayısı verildiginde seri toplamını verenbir fonksiyon yazınız. Fonksiyonunuzun girdisi terim sayısı n çıktısı ise seritoplamını versin. Fonksiyonunuzu n = 10, 100 ve n = 1000 için çalıstırınız.Seri toplamının gerçek degeri π/4 sayısıdır. Her toplam için mutlak hatalarıbulunuz. Hangi n degeri için daha iyi bir sonuç elde edilmistir?
118
Kısmi Diferansiyel Denklemler
Cevap: Fonksiyon olusturma
function ST=arctan(n)ST=1;for i=1:n
ST=ST+((-1)^i)/(2*i+1);end
Fonksiyon çagırmaformat shortarctan10=arctan(10)arctan10 =0.8081mutlak_hata1=abs(pi/4-arctan10)mutlak_hata1 =0.0227
arctan100=arctan(100)arctan100 =0.7879mutlak_hata2=abs(pi/4-arctan100)mutlak_hata2 =0.0025
arctan1000=arctan(1000)arctan1000 =0.7856mutlak_hata3=abs(pi/4-arctan1000)mutlak_hata3 =2.4975e-004
Sonuçlardan görüldügü gibi en iyi sonuç (π/4 degerine en yaklasık deger)n = 1000 için elde edilmistir.
20. Verilen a sayısının küp kökünü a1/3 degerini Newton yöntemi ile hesap-layan bir fonksiyon yazınız. f(x) = x3 − a = 0 denklemi çözülerek a1/3 sayısıyaklasık olarak bulunmaktadır. Fonksiyonunuzun adı, girdi ve çıktı degerleriXs=kupkok(a) seklinde olsun. Burada girdi a sayısı, çıktı a sayısının yaklasıkküp kök degeri, fonksiyonunuzun adı kupkok olsun. Programınız asagıdakiözelliklere sahip olmalıdır:
• Iterasyonlara baslangıç noktası a olmalıdır.
• Iterasyonlar tahmini bagıl hata 10−7 den küçük oldugunda durmalıdır.
Bagıl hata =|xn − xn−1||xn|
burada xn son adımda elde edilen sayısal çözüm, xn−1 son adımdan birönceki adımda elde edilen sayısal çözümdür.
119
Kısmi Diferansiyel Denklemler
• Iterasyon sayısı 25 ile sınırlandırılmalıdır. Eger 25 adım sonunda çözümelde edilemezse program hata olarak "Çözüm 25 adım sonra elde edile-medi" yazmalıdır ve çıktı olarak "Çözüm yok" atanmalıdır.
Fonksiyonunuzu asagıdaki sayıların yaklasık küp köklerini bulmak için kul-lanınız:
a) 1408 b) 531441 c) 729 d) − 600
Cevap: Fonksiyon olusturma
function Xs=kupkok(a)Xbas=a;imaks=25;for i=1:imaks
Xi=Xbas-(Xbas^3-a)/(3*Xbas^2); %Newton iterasyonuif abs((Xi-Xbas)/Xbas)<1e-7Xs=Xi;break
endXbas=Xi;endif i==imaks
fprintf(’Cozum %i adim sonra elde edilemedi\n’, imaks)Xs=(’Cozum yok’)end
Fonksiyonu verilen sayılar için çalıstırmak için komut penceresinde asagı-daki kodlar yazılır.
Fonksiyon çagırmakupkok(1408)ans =11.2082
kupkok(531441)Cozum 25 adim sonra elde edilemediXs =Cozum yok
kupkok(729)ans =9
kupkok(-600)ans =-8.4343
120
Kısmi Diferansiyel Denklemler
21. Asagıda verilen A matrisinin determinantının −5300 oldugu biliniyor. Amatrisinde 3. satır, 2. sütun elemanın degeri (x) ise bilinmemektedir. Ancak xsayısının bir tamsayı oldugu bilinmektedir. Yazdıgınız bir program yardımı ilebilinmeyen bu elemanın degerini bulunuz. x’ in deger aralıgı −100 : 100 olarakalınabilir.
A =
1 5 9 11−2 6 7 40 x 1 811 65 89 21
Cevap:x=-100;for k=1:201
A=[1 5 9 11; -2 6 7 4; 0 x 1 8; 11 65 89 21];C=det(A);if C==-5300xbreak
endx=x+1;endx = -3
Determinant degerini −5300 yapan x degeri x = −3’tür.
22. Kare matrisin boyutu verildiginde asagıdaki üç kösegenli matrisi olustu-ran bir fonksiyon yazınız. Fonksiyonunuzun adı, girdi ve çıktısı A=uckosegen(n)seklinde olsun. Burada fonksiyonunuzun girdisi kare matrisin boyutu n, çık-tısı asagıdaki gibi tanımlanan A üç kösegenli matris olmalıdır.
A =
2 33 2 3
3 2 3. . . . . . . . .
3 2 33 2
Fonksiyonunuzu n = 5 ve n = 10 için çalıstırınız.
121
Kısmi Diferansiyel Denklemler
Cevap: Fonksiyon olusturma
function A=uckosegen(n)A=zeros(n,n);A(1,1)=2; A(1,2)=3;for i=2:(n-1)
A(i,i)=2; A(i,i-1)=3; A(i,i+1)=3;endA(n,n-1)=3; A(n,n)=2
Fonksiyon çagırmauckosegen(5)A =2 3 0 0 03 2 3 0 00 3 2 3 00 0 3 2 30 0 0 3 2uckosegen(10)A =2 3 0 0 0 0 0 0 0 03 2 3 0 0 0 0 0 0 00 3 2 3 0 0 0 0 0 00 0 3 2 3 0 0 0 0 00 0 0 3 2 3 0 0 0 00 0 0 0 3 2 3 0 0 00 0 0 0 0 3 2 3 0 00 0 0 0 0 0 3 2 3 00 0 0 0 0 0 0 3 2 30 0 0 0 0 0 0 0 3 2
23. Kare matrisin boyutu verildiginde asagıdaki üst üçgen matrisi olusturanbir fonksiyon yazınız. Fonksiyonunuzun adı, girdi ve çıktısı A=ustucgen(n)seklinde olsun. Burada fonksiyonunuzun girdisi kare matrisin boyutu n, çık-tısı asagıdaki gibi tanımlanan A üst üçgen matris olmalıdır.
A =
1 2 2 · · · 2 20 1 2 · · · 2 20 0 1 2 · · · 2
. . . . . . . . .0 0 0 · · · 1 20 0 0 0 · · · 1
122
Kısmi Diferansiyel Denklemler
Fonksiyonunuzu n = 5 ve n = 10 için çalıstırınız.
Cevap: Fonksiyon olusturma
function A=ustucgen(n)A=zeros(n,n);for i=1:n
A(i,i)=1;k=1;
while (i+k)<=nA(i,i+k)=2;k=k+1;
end %whileend %for
Fonksiyonu çagırmaustucgen(5)ans =1 2 2 2 20 1 2 2 20 0 1 2 20 0 0 1 20 0 0 0 1ustucgen(10)ans =1 2 2 2 2 2 2 2 2 20 1 2 2 2 2 2 2 2 20 0 1 2 2 2 2 2 2 20 0 0 1 2 2 2 2 2 20 0 0 0 1 2 2 2 2 20 0 0 0 0 1 2 2 2 20 0 0 0 0 0 1 2 2 20 0 0 0 0 0 0 1 2 20 0 0 0 0 0 0 0 1 20 0 0 0 0 0 0 0 0 1
24. f(x) = ax3 + bx2 + cx+ d fonksiyonunun x’e göre türevini bulunuz.
Cevap:syms x a b c df=a*x^3+b*x^2+c*x+ddiff(f)ans= 3*a*x^2+2*b*x+c
123
Kısmi Diferansiyel Denklemler
25. f(t) = 6t−92t2+4t−6 fonksiyonununun t’ye göre türevini bulunuz.
Cevap:syms tf=(6*t-9)/(2*t^2+4*t-6)df=diff(f);dfs=simplify(dfs);pretty(dfs)212 t +36t- -----------(2t^2+4t-6)^2
26. f(x, y) = sin2 xey fonksiyonunun ∂2f/∂x∂y türevini bulunuz.
Cevap:syms x yf=sin(x)^2*exp(y)diff(diff(f,x),y)ans=2*sin(x)*exp(y)*cos(x)
27. f(x, y) = x2 − 2xy + y2 fonksiyonunu çarpanlarına ayırınız.
Cevap:syms x yf=x^2-2*x*y+y^2factor(f)ans=(x-y)^2
28. y = (a+ b)4 açılımını bulunuz.
Cevap:syms a by=(a+b)^4expand(y)ans=a^4+4a^3b+6a^2b^2+4ab^3+b^4
29. f(x, y) = cos(2x)e2y + sin(y + x) lnx − x2y + 3 fonksiyonunun (x, y) = (π, 0)noktasındaki degerini bulunuz.
Cevap:syms x yf=cos(2*x)*exp(2*y)+sin(y+x)*log(x)-x^2*y+3double(subs(subs(f,y,0),x,pi))ans=4
124
Kısmi Diferansiyel Denklemler
30. ax2 + bx+ c = 0 ifadesinin a = 2, b = 3, c = −4 için çözümünü bulunuz.
Cevap:y=subs(’a*x^2+b*x+c’,{a,b,c},{2,3,-4})r=solve(’y’)r= 0.8508-2.3508
31. z = (x− 3)2 + y2 − x2 ifadesini sadelestiriniz.
Cevap:syms x yz=(x-3)^2+y^2-x^2z=collect(z)z=-6*x+9+y^2
32. y = cos2 x+ sin2 x ifadesini sadelestiriniz.
Cevap:syms xy=cos(x)^2+sin(x)^2simple(y)ans=1
33.∫
cos(2x) sin(2x)dx integralini bulunuz.
Cevap:
syms xy=cos(2*x)*sin(2*x);int(y)ans= -1/4*cos(2*x)^2
34.∫ 2ππ
∫ π0 (y sinx+ x cos y)dxdy katlı integralinin degerini bulunuz.
Cevap:syms x yf=y*sin(x)+x*cos(y)int(int(f,x,0,\pi), y, \pi, 2*\pi)ans= -pi^2
35. x2 − 5 = 0 denkleminin çözümlerini bulunuz.
125
Kısmi Diferansiyel Denklemler
Cevap:syms xsolve(’x^2-5’)ans= 5^(1/2)-5^(1/2)
36. cos(x)− sin(x) = 0.5 denkleminin çözümlerini bulunuz.
Cevap:s=solve(’cos(x)-sin(x)=0.5’);s=double(s)s= -1.99480.4240
37. ln(x2)− log(2x) + 4 = 0 denkleminin çözümlerini bulunuz.
Cevap:s=solve(’log(x^2)-log10(2*x)+4’);s=double(s)ans= 0.0942
38. F (x, y, z, t,m) =
f1(x, y, z, t,m)f2(x, y, z, t,m)f3(x, y, z, t,m)f4(x, y, z, t,m)f5(x, y, z, t,m)
=
x3 − 2y + cos z + t− 5/m− 5
x/y + ezt−m+ 1x+ y + z + t+m− 7
xyz + tm− 10ex+y + tan z + log2 t+ log(2z)− 3
verilsin F (x, y, z, t,m) = (0, 0, 0, 0, 0) yapan (x, y, z, t,m) degerlerini bulunuz.
Cevap:syms x y z t mf1=x^3-2^y+cos(z)+t-5/m-5;f2=x/y+exp(z)*t-m+1;f3=x+y+z+t+m-7;f4=x*y*z+t*m-10;f5=exp(x+y)+tan(z)+log2(t)+log10(2*z)-3;s=solve(f1,f2,f3,f4,f5);kokler=double([s.x s.y s.z s.t s.m])kokler= 1.4142 -4.6262 0.9615 2.3664 6.8841
39. limx→3(x−3)(x2−9) limitini bulunuz.
Cevap:syms xlimit((x-3)/(x^2-9),3)ans= 1/6
126
Kısmi Diferansiyel Denklemler
Alıstırmalar 2
Matrisler ve matrislerle ilgili islemler, lineer denklem sistemleri
1.
A =
6 3 23 2 1.52 1.5 1.2
, B =
−1 2 31 8 −24 1 5
, C =
2 6 17 1 −14 −3 2
olsun.
(a) 2AB − 3CT matrisini
(b) C matrisinin tersini (inverse)
(c) A matrisinin determinantını
(d) A3 − 5B2 + C matrisini
(e) B matrisinin 1,2 ve sonsuz normlarını
(f) B matrisinin sonsuz normuna göre kosul sayısını (condition number)
(g) A matrisinin rankını
(h) C matrisinin LU ayrıstırmasını (LU decomposition)
(i) A matrisinin özdeger (eigenvalues) ve özvektörlerini (eigenvectors)
(j) A matrislerinin Cholesky ayrıstırmasını bulunuz.
clear all; clc; format long
A=[6 3 2;3 2 1.5;2 1.5 1.2];B=[-1 2 3;1 8 -2;4 1 5];C=[2 6 1;7 1 -1;4 -3 2];
D=2*A*B-3*C’Cters=inv(C)determinantA=det(A)E=A^3-5*B^2+Cnorm1=norm(B,1)norm2=norm(B,2)norm_sonsuz=norm(B,inf)kosul_sonsuz=cond(B,inf)rankA=rank(A)[L,U,P]=lu(C)R=chol(A)[ozvektor ozdeger]=eig(A)
127
Kısmi Diferansiyel Denklemler
>> A=[6 3 2;3 2 1.5;2 1.5 1.2];B=[-1 2 3;1 8 -2;4 1 5];C=[2 6 1;7 1 -1;4 -3 2];
D=2*A*B-3*C’Cters=inv(C)determinantA=det(A)E=A^3-5*B^2+Cnorm1=norm(B,1)norm2=norm(B,2)norm_sonsuz=norm(B,inf)kosul_sonsuz=cond(B,inf)rankA=rank(A)[L,U,P]=lu(C)R=chol(A)[ozvektor ozdeger]=eig(A)
D =4.000000000000000 55.000000000000000 32.000000000000000
-8.000000000000000 44.000000000000000 34.0000000000000005.600000000000000 37.399999999999999 12.000000000000000
Cters =0.007407407407407 0.111111111111111 0.0518518518518520.133333333333333 0 -0.0666666666666670.185185185185185 -0.222222222222222 0.296296296296296determinantA =0.100000000000000E =1.0e+02 *3.398000000000000 1.503500000000000 1.2218000000000002.413500000000000 -1.913000000000000 2.0383500000000000.801800000000000 -0.181650000000000 -1.097720000000000norm1 = 11norm2 = 8.429049736545000norm_sonsuz = 11kosul_sonsuz = 5.260869565217391rankA =3L =1.000000000000000 0 00.285714285714286 1.000000000000000 00.571428571428571 -0.625000000000000 1.000000000000000U =
128
Kısmi Diferansiyel Denklemler
7.000000000000000 1.000000000000000 -1.0000000000000000 5.714285714285714 1.2857142857142860 0 3.375000000000000P =0 1 01 0 00 0 1R =2.449489742783178 1.224744871391589 0.8164965809277260 0.707106781186547 0.7071067811865470 0 0.182574185835055ozvektor =-0.127659329746535 0.547448430720674 0.8270449269720090.713746885803414 -0.528290235067436 0.459863904365544
-0.688671531671372 -0.649006658851713 0.323298435244499ozdeger =0.016124042134642 0 00 0.733962395123435 00 0 8.449913562741926
2. Verilen dogrusal denkleminin çözümünü MATLAB ile bulunuz.
x1 + 3x2 + 2x3 + 4x4 = 92x1 − x2 + x3 − 2x4 = −72x1 + x2 − 4x3 − x4 = 182x1 + 4x2 + x3 − 2x4 = −2
>> A=[1 3 2 4;2 -1 1 -2;2 1 -4 -1;2 4 1 -2]b=[9;-7;18;-2]
xa=inv(A)*bxb=A\bxc=mldivide(A,b)
A =1 3 2 42 -1 1 -22 1 -4 -12 4 1 -2b =9-7
129
Kısmi Diferansiyel Denklemler
18-2xa =2.0000000000000011.000000000000000
-4.0000000000000013.000000000000000
xb =2.0000000000000001.000000000000000
-4.0000000000000003.000000000000000
xc =2.0000000000000001.000000000000000
-4.0000000000000003.000000000000000
3. Verilen dogrusal denkleminin çözümü olmadıgını MATLAB ile gösteriniz.
x1 + 3x2 + 3x3 = 1−x1 + 5x2 − 3x3 = 2−2x1 + 7x2 − 6x3 = 3
>> A=[1 3 3;-1 5 -3;-2 7 -6];b=[1;2;3];x=A\bAg=[A b]rref(Ag)Warning: Matrix is singular to working precision.x =NaNNaN-InfAg =1 3 3 1
-1 5 -3 2-2 7 -6 3ans =1 0 3 00 1 0 00 0 0 1
130
Kısmi Diferansiyel Denklemler
4. Verilen dogrusal denkleminin sonsuz çözümü oldugunu MATLAB ile gös-teriniz,çözüm kümesini bulunuz.
x1 − x2 + 3x3 = 2−2x1 + x2 = 0
4x1 − 4x2 + 12x3 = 8
>> A=[1 -1 3;-2 1 0;4 -4 12];b=[2;0;8];x=A\bAg=[A b]rref(Ag)Warning: Matrix is singular to working precision.
x =
NaNNaNNaN
Ag =1 -1 3 2-2 1 0 04 -4 12 8ans =1 0 -3 -20 1 -6 -40 0 0 0
Sayısal Türev
1. Konum fonksiyonu x(t) = 4t3 − 10t2 − t + 5 olarak verilen bir cismin [0, 100]saniye arasındaki hız ve ivmesini MATLAB’ın ’diff’ komutu ile bulunuz, ger-çek hız ve ivme degerleri ile sayısal hız ve ivme degerlerini karsılastırınız,grafiklerini çizdiriniz.
%konum,hız,ivme grafiklerikonum=inline(’4*t.^3-10*t.^2-t+5’)t=0:.5:100;x=konum(t);v=diff(x)./diff(t); %sayısal hız hesaplanırtv=0.5:0.5:100; %grafik için geri fark degerleri, tv?nin eleman sayısı v?nin eleman sayısına esit %oldu.
131
Kısmi Diferansiyel Denklemler
a=diff(v)./diff(tv);ta=.5:.5:99.95;
% ivme vektörünün eleman sayısı tv ninkinden bir eksik, a’nın eleman sayısına esitlemek için zamanın her iki ucundan daralttık, ta?nın eleman sayısı a?nın eleman sayısına esit oldu.
plot(t,x,’:’,tv,v,’--’,ta,a,’g’) %konum, sayısal hız,sayısal ivme grafikleri aynı pencereye çizildi
figurehiz=inline(’12*t.^2-20*t-1’); %gerçek hızghiz=hiz(tv); %tv noktalarında gerçek hız degerlerihata_hiz=ghiz-v; %gerçek hız sayısal hız farkımax(abs(hata_hiz)) %en büyük mutlak hataplot(tv,ghiz,’r’,tv,v,’o’) %gerçek hız, sayısal hız aynı grafige çizilirfigure
ivme=inline(’24*t-20’); %gerçek ivmegivme=ivme(ta); %ta noktalarında gerçek ivme degerlerihata_ivme=givme-a; %gerçek ivme sayısal ivme farkımax(abs(hata_ivme)) %en büyük mutlak hataplot(ta,givme,’r’,ta,a,’o’) %gerçek ivme sayısal ivme aynı grafige çizilir
2. f(x) = x2+cos?(5x)−2x+3 fonksiyonunun [0, 4] aralıgındaki sayısal türevinih = 0.01 alarak geri fark ve merkezi fark ile hesaplayınız. Fonksiyonun gerçektürevini bulunuz, sayısal türevler ve gerçek türev degerlerini aynı grafige çiz-diriniz, geri fark ve merkezi fark türevleri için en büyük mutlak hata degerinihesaplayınız.
x=0:.01:4;y=x.^2+cos(5*x)-2*x+3;
g_turev_y=diff(y)./diff(x);xd=x(2:length(x)); %turevin eleman sayısı bir eksik oldugundan yeni x degerleri geri fark
%geri fark sayısal türev ile gerçek türev ile kıyaslama
y1=2*xd-5*sin(5*xd)-2; %gerçek türev degerleriplot(xd,g_turev_y, xd, y1,’r--o’) %geri fark ile sayısal türev ve gerçek türev grafigititle(’Geri fark ile sayisal türev ve gerçek türev’)
geri_hata=y1-g_turev_y;geri_mut_hata=max(abs(geri_hata))
132
Kısmi Diferansiyel Denklemler
%Merkezi fark ile sayısal türev hesabı
m_turev_y=(y(3:end)-y(1:end-2))/(x(3)-x(1));xdm=x(2:end-1);y1=2*xdm-5*sin(5*xdm)-2;figureplot(xdm, m_turev_y, xdm, y1, ’ro’)title(’Merkezi fark ile sayisal türev ve gerçek türev’)
merk_hata=y1-m_turev_y;merk_mut_hata=max(abs(merk_hata))
3. Tabloda x degerleri ve karsılık gelen y degerleri verilmistir.
x 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
y 0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2
Tablodaki veriler için, ilk olarak sayısal türevi ilk olarak ’diff’ komutu hesap-layınız. Sayısal türevi bu kez y degerlerine uyan 9. derece polinomu bulup,polinomun türevini hesaplayarak bulunuz, ’diff’ komutu ile elde ettiginiz so-nuçlarla polinomun türevini aynı grafik (türev için ileri fark degerleri) üze-rinde çizdiriniz.
x=0:.1:1;y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
yturev=diff(y)./diff(x); %diff komutu ile türev
p=polyfit(x,y,9) %verilere 9. dereceden polinom yaklasımıxi=linspace(0,1,100);yi=polyval(p,xi); %polinom degerleri hesaplanırplot(x,y,’ro’,xi,yi); % veriler ve polinom aynı grafige çizilirtitle(’Veriler ve 9. derece polinom’)
pturev=polyder(p); % polinomun türevini alırpturevd=polyval(pturev,x); %türevi x noktalarında hesaplar
xd=x(1:length(x)-1); %yturev y den daha kısadır, x degerleri kesilir, ileri fark yaklasımıfigure %yeni grafik penceresi açılırplot(xd,yturev,’ro’,x,pturevd)%polinomun türevi ile diff komutu ile elde edilen türev aynı grafige çizilirtitle(’Polinomun türevi ve diff komutu ile elde edilen sayisal türev’)
133
Kısmi Diferansiyel Denklemler
Sayısal Integral
1. ∫ π
0cos3xdx
integralini MATLAB’ın hazır fonksiyonlarını kullanarak a) Yamuk kuralı ileh = π/100 b) Simpson kuralı ile hesaplayınız. Gerçek integral degerini bulu-nuz. Mutlak hataları hesaplayınız.
h=pi/100;x=0:h:pi;y=(cos(x)).^3;
Iyamuk=trapz(x,y);Isimp=quad(’cos(x).^3’,0,pi)Igercek=int(’cos(x)^3’,0,pi)
mut_h_yamuk=abs(Igercek-Iyamuk)mut_h_simp=abs(Igercek-Isimp)
m1=double(mut_h_yamuk)m2=double(mut_h_simp)
2. ∫ ∞−∞
e−x2dx
integralini MATLAB ile hesaplayınız.
Qg=quadgk(@(x) exp(-x.^2),-inf,inf)
3. ∫ 1
−1
1
1 + 9x2dx
integralini MATLAB’ın hazır fonksiyonlarını kullanarak a) Yamuk kuralı ileh = π/100 b) Simpson kuralı ile hesaplayınız. Gerçek integral degerini bulu-nuz. Mutlak hataları hesaplayınız.
h=1/100;x=-1:h:1;y=1./(1+9*x.^2);
Iyamuk=trapz(x,y)Isimp=quad(’1./(1+9*x.^2)’,-1,1)
134
Kısmi Diferansiyel Denklemler
Igercek=int(’1/(1+9*x^2)’,-1,1)Igercek=double(Igercek)
mut_h_yamuk=abs(Igercek-Iyamuk)mut_h_simp=abs(Igercek-Isimp)
4. ∫ ∞2
x3e−x2dx
integralini MATLAB ile hesaplayınız.
Qg=quadgk(@(x) x.^3*exp(-x.^2),2,inf)
5. Yamuk kuralı için fonksiyon yazınız. Fonksiyonunuzun adı,girdileri ve çık-tısı asagıdaki gibi olsun:
Iyamuk=Yamuk(f,a,b,n)
Girdiler: ’f’ integrali alınacak fonksiyon, [a, b] aralıgı integralin alınacagı ara-lık, n alt aralık sayısı, çıktı: yamuk kuralı ile hesaplanan yaklasık integraldegerini göstermektedir.
Programınız ile n = 6, 10, 24, 100 aralık için
1
2
∫ 1
−1
4
1 + x2dx
integralini hesaplayınız. Integrali MATLAB’ın hazır fonksiyonu ’trapz’ ile farklıh degerleri için hesaplayınız, sonuçları karsılastırınız, iki deger arasındakifarkları bulunuz. Integralin sonucu yaklasık olarak hangi sayıyı vermektedir?
function Iyamuk=Yamuk(f,a,b,n)% f fonksiyonunun [a,b] aralı?ında integralini n alt aralık kullanarak yamuk kuralı ile hesaplar.%f inline olarak tanımlanmıs fonksiyon olmalıdır.% I=Yamuk(@f,a,b,n)
h=(b-a)/n;S=f(a);for i=1:n-1x(i)=a+h*i;S=S+2*f(x(i));end
S=S+f(b);Iyamuk=h*S/2;
135
Kısmi Diferansiyel Denklemler
%n=6 aralık içinI6=0.5*Yamuk(@(x) 4./(1+x.^2),-1,1,6)%n=10 aralık içinI10=0.5*Yamuk(@(x) 4./(1+x.^2),-1,1,10)%n=24 aralık içinI24=0.5*Yamuk(@(x) 4./(1+x.^2),-1,1,24)%n=100 aralık içinI100=0.5*Yamuk(@(x) 4./(1+x.^2),-1,1,100)
%h=0.1 içinh=0.1;x=-1:h:1;y=4./(1+x.^2);I1=0.5*trapz(x,y)
%h=0.05 içinh=0.05;x=-1:h:1;y=4./(1+x.^2);I2=0.5*trapz(x,y)
%h=0.01 içinh=0.01;x=-1:h:1;y=4./(1+x.^2);I3=0.5*trapz(x,y)
fark1=I10-I1fark2=I24-I2fark3=I100-I3
6. Simpson 1/3 kuralı için fonksiyon yazınız. Fonksiyonunuzun adı, girdilerive çıktısı asagıdaki gibi olsun:Isimp13=Simpson13(f,a,b,n)
Burada girdiler: f integrali alınacak fonksiyon, [a, b] aralıgı integralin alına-cagı aralık, n alt aralık sayısı, çıktı: Simpson 1/3 kuralı ile hesaplanan yak-lasık integral degeri. Programınız eger aralık sayısı n çift sayı degilse ’Aralıksayısı n çift sayı olmalıdır’ hata mesajını versin.Programınız ile n = 6, 10, 24, 100 aralık için
1
2
∫ 1
−1
4
1 + x2dx
136
Kısmi Diferansiyel Denklemler
integralini hesaplayınız. Integrali MATLAB’ın hazır fonksiyonu ’quad’ ile he-saplayınız, sonuçları karsılastırınız, iki deger arasındaki farkları bulunuz. In-tegralin gerçek degerini bulunuz. Integralin gerçek degeri hangi sayıyı verir?Sonuçlarınızı karsılastırınız, mutlak hataları bulunuz.
function Isimp13=Simpson13(f,a,b,n)% f fonksiyonunun [a,b] aralı?ında integralini Simpson?s 1/3 kuralı ile n aralık sayısı için (n %çift sayı olmalıdır) hesaplar.%f fonksiyonu inline veya m-dosyası olabilir.
if rem(n,2)~=0fprintf(’HATA: Aralık sayısı n çift sayı olmalıdır\n’)returnend
h=(b-a)/n;x(1)=a;S=f(a);for i=1:nx(i+1)=a+h*i; %tüm xi noktaları olusturuluyorend
for i=2:2:nS=S+4*f(x(i)); %çift indisler toplama eklenirendfor i=3:2:n-1S=S+2*f(x(i)); %tek indisler toplama eklenirendS=S+f(b);Isimp13=h*S/3; %toplam h/3 ile çarpılır
%n=6 aralık için
I6=0.5*Simpson13(@(x) 4./(1+x.^2),-1,1,6)%n=10 aralık içinI10=0.5*Simpson13(@(x) 4./(1+x.^2),-1,1,10)%n=24 aralık içinI24=0.5*Simpson13(@(x) 4./(1+x.^2),-1,1,24)%n=100 aralık içinI100=0.5*Simpson13(@(x) 4./(1+x.^2),-1,1,100)
Iquad=0.5*quad(’4./(1+x.^2)’,-1,1)
137
Kısmi Diferansiyel Denklemler
fark1=Iquad-I6fark2=Iquad-I10fark3=Iquad-I24fark4=Iquad-I100
%Integralin gerçek de?eriIgercek=0.5*int(’4/(1+x^2)’,-1,1)Igercek=double(Igercek)
%Gerçek integral de?eri ile farklarfark5=Igercek-I6fark6=Igercek-I10fark7=Igercek-I24fark8=Igercek-I100
fark9=Igercek-Iquad
138