Вы находитесь на странице: 1из 138

TEMEL MATLAB KULLANIMI

Komut Satırında Yazılmış Örneklerle

Şeref Öcal
Fizik Mühendisi

2007
İÇİNDEKİLER

Ø GİRİŞ. MATLAB Nedir, MATLAB ile Çalışmak, İfadeler, MATLAB Temel Yazım Notasyonu,
MATLAB de Kullanılan Belli Başlı Komut İşaretleri, Komut Satırında Klavye Kısayolları

(3–6)

Ø BÖLÜM I. Aritmetik İşlemler, Radyan – Derece Dönüşümü, Logaritma, Karmaşık Sayılar,


Yuvarlatma İşlemleri, Kalan Bulma, Temel İstatiksel İşlemler, Asal Çarpanlara Ayırma,
Kesirli Gösterim, OBEB-OKEK, Faktöriyel

(7–18)

Ø BÖLÜM II. İntegral Hesapları, Türev, Limit

(19–27)

Ø BÖLÜM III. Vektörler, Matrisler, Polinomlar, Ara Değer Hesapları

(28–61)

Ø BÖLÜM IV. Grafik İşlemleri (İki Boyutlu Grafikler, Üç Boyutlu Grafikler)

(62–96)

Ø BÖLÜM V. Denklemler-Denklem Sistemlerinin Çözümü (Cebirsel Denklemler, Diferansiyel


Denklemler)

(97–115)

Ø BÖLÜM VI. MATLAB de Programlama (Bir MATLAB Programının Anatomisi, Veri Giriş-Çıkışları
Ve Hata Bildirimleri İçin Kullanılan Önemli Fonksiyonlar, Program Yazımında Sıkça
Kullanılan Koşul Deyimleri, Programlamada Zamanlama, MATLAB Derleyicisi)

(116–135)

Ø KAYNAKLAR

(136 – 138)

2
GİRİŞ

MATLAB Nedir?

MATLAB adı, MATrix LABoratory (Matrix Laboratuarı) kelimelerinden gelir. MATLAB, ilk olarak Fortran
Linpack ve Eispack projeleriyle geliştirilmiş ve bu programlara daha etkin ve kolay erişim sağlamak amacıyla
1970’lerin sonlarında yazılmıştır. MATLAB, matematik ve özellikle de matris esaslı matematik ortamında
kullanılmak üzere hazırlanmış etkileşimli bir paket programlama dilidir.

MATLAB ın ilk sürümleri FORTRAN dilinde, son sürümleri ise C dilinde yazılmıştır. FORTRAN ve C dili gibi
yüksek seviyeden programlama dilleri ile yapılabilen hesaplamaların pekçoğunu MATLAB ile yapmak
mümkündür. Buna karşılık MATLAB ın fonksiyon kütüphanesi sayesinde, FORTRAN ve diğer programlama
dillerine göre MATLAB de daha az sayıda komutla çözüm üretmek mümkündür. Gerçekte MATLAB,
M-dosyaları (M-files) olarak bilinen pekçok sayıda fonksiyon dosyalarından (alt-programlardan) ibarettir.
M-dosyaları ASCII formatında olup okunabilirliği olan MATLAB programlama dili kodlarından oluşmuştur.
Dolayısıyla M-dosyaları kütüphanesine, kullanıcı tarafından müdahale edilebilir. Ancak bu kodlara zorunlu
kalmadıkça müdahale edilmemesi, kodların değiştirilmemesi gerekir.

MATLAB temel bilimler ve mühendislik alanlarında sayısal hesaplama, veri çözümleri ve grafik
işlemlerinde kullanılabilecek genel amaçlı bir program olmakla beraber, özel amaçlı modüler paketlere de
sahiptir. CONTROL TOOLBOX, SIGNAL TOOLBOX gibi paket programlar CACSD (Bilgisayar destekli denetim
sistemi tasarımı) paketler olup, bunlar denetim sistemlerinin tasarımında çok etkili araçlardır. Ayrıca
WINDOWS ortamında çalışan SIMULINK, etkileşimli benzetim programlarının hazırlanması ve
çalıştırılmasında büyük kolaylıklar sağlamaktadır.

MATLAB ile Çalışmak

* MATLAB, komut temelli bir programdır. Komut penceresinde (Command Window) >> şeklindeki
prompt işaretinin bulunduğu satır, komut satırı olarak adlandırılır. Bu işaretin hemen yanında yanıp sönen I
şeklindeki işaret, komut ve metin yazma cursor’u, yani imlecidir. Bu işaretin olduğu yerde klavyeden giriş
yapılabilir ve enter tuşuna basılarak işlemler yürütülür.

* MATLAB büyük ve küçük harf karakterlerini ayırt eden bir dildir. Buna göre, bir değişken TIME adı ile
atanabilirken, diğer bir değişken time adı ile ve diğer başka bir değişken de Time adı ile atanabilir. Bu
durumda bir karaktere birden fazla değer atamak mümkündür.

* MATLAB de help < komut adı > ile istenilen yardıma ulaşılabilir.

* Bir çalışma sırasında komut penceresi silinmek istenirse clc komutu kullanılır. clear komutu ise
bellekte yer alan kullanıcı tarafından tanımlanmış tüm değişkenleri ve fonksiyonları siler.

* save < dosya adı > komutuyla değişken kalıcı olarak saklanır; load < dosya adı > komutuyla değişken
yürütülür; whos komutuyla değişkenler listelenir; clear < dosya adı > komutuyla saklanan değişken silinir.

* Bilgisayarın sonsuz bir döngüye girdiği veya sonu gelmez gürünen veri görüntüleme ve yazdırma
işlemleri gibi durumlarda komut icrasının kesilmesi gerekebilir. MATLAB ortamında bir komutun icrasını sona
erdirmek için Ctrl+C tuşlarına aynı anda basmak gerekir. Bu durumda ^C iletisi karşımıza çıkar ve komut icrası
kullanıcı tarafından sona erdirilmiş olur.

3
İfadeler (expressıons)

MATLAB diğer programlama dillerinde olduğu gibi bir giriş (input) olarak çeşitli matematiksel ve metinsel
ifadeler sağlar. İfadeleri 4 ana grup altında inceleyebiliriz:

* Sayılar (Numbers)

* Değişkenler (Variables)

* İşleçler (Operators)

* Fonksiyonlar (Functions)

MATLAB Temel Yazım Notasyonu (syntax)

MATLAB de herşey bir dizi (array) olarak işleme konur. Bir dizi, skaler, vektör, matris veya metinsel dizge
(karakter dizisi) olabilir.

* 1x1 dizisi skaler (scaler) veya metin dizgesi (string) gösterir. a=3 b=-20.56 c=3e-4 d=2+5*i
e=' Bir tamsayı giriniz: ' gibi. Metin dizgeleri (text string), tek tırnaklar '…' arasında verilir.

* nx1 veya 1xn dizisi bir vektör (vector) gösterir. x=[0, 2, 4, 6] ifadesinde x, 1x4 boyutunda bir vektördür.
Köşeli parantezler [ ]içindeki sayıların arasında virgül (,) veya en az bir ya da daha fazla boşluk olmalıdır.

* nxm veya mxn dizisi bir matris (matrix) gösterir. Köşeli parantezler [ ] içindeki sayı grupları arasında
noktalı virgül (;) olmalıdır. Noktalı virgül (;) işareti matrisin sütunlarını ayırır. Sayı gruplarını ayırmakta virgül
(,) veya en az bir ya da daha fazla boşluk kullanılabilir.

MATLAB TA Kullanılan Belli Başlı Komut İşaretleri

. Ondalık Nokta: 325/100, 3.25 veya .325e1 hepsi aynı sayıyı ifade eder.

. Dizi (array) işlemleri: .* .^ ./A veya .'. işlemlerinde eleman-eleman işlem yapılır. Örneğin C=A./B matris
işleminde C matris elemanları C(i,j) = A(i,j)/B(i,j) şeklinde bulunur.

. Yapısal Alan (field) erişimi: A.alan ve A(i).alan, A bir yapısal veri ise 'alan' adlı alanın içindekilere erişim
gösterimidir. Eğer A yapısal veri değil ise virgülle ayrılmış bir liste üretir. Örnek olarak,

C= {1 2 3 4};

A = [C{:}];

B = cat(2,C{:});

.. Ebeveyn dizine geçiş gösterimi: Dizinler arasında ilk ana dizine geçiş yapmak için cd .. şeklinde kullanılır.

… Süreklilik (Continuation): Satır sonundaki üç nokta ... satırın bir alt satırdan devam etmesini sağlar. Bir
satıra sığmayan ifade veya verileri ekranda birebir izlemek için kullanılır.

, Virgül (comma) veya Ayırıcı (separator): Virgül, dizilerde elemanları satır vektörü yapar; matrisleri alt-
indislerine ve fonksiyonlarda da argümanları ayırmak için kullanılır. Ayrıca çok ifadeli satırlarda ifadeleri
ve/veya komutları birbirinden ayırmak için de kullanılabilir.

4
; Noktalı virgül (semicolon): Matris satırlarının sonlarını göstermek için köşeli parantez içinde kullanılır.
Ayrıca bir ifade ve deyimin çıkışını yazdırmamak, yani ekranda görüntülenmesini önlemek için de kullanılır.

: Üstüste iki nokta veya Colon (Sütun) operatörü: Ardışıl sayı gösterimlerinde ve matris indekslemesinde
kullanılır. Örneğin 1:2:100 ifadesi 1'den 100'e kadar 2 artımlı sayı dizisi gösterir.

( ) Parantez ve altindeksleme: Matematikten bildiğimiz gibi bir işlem topluluğu gösterir.

[ ] Köşeli parantez (bracket): İster bir vektör ister bir matris olsun dizi oluşturmada kullanılır.

{ } Süslü parantez ve altindeksleme: Özellikle yapı ve hücre veri tiplerinde kullanımı vardır.

% Yüzde (percent) Açıklama (comment): Yüzde sembolü, komut ve program işleyişini etkilemeyen
açıklamalara başlamak için kullanılır. Yardım (Help) sistemi için çok gereklidir.

! Ünlem işareti: ! işaretini izleyen herhangi bir yazı, DOS işletim sisteminde yazılan bir komut gibi iş görür.
Örneğin >> ! dir komutu varsayılan klasör içindekileri DOS işletim istemi formatında listeler. >>!dir&
komutu ise listeleme işlemini ayrı bir DOS penceresinde yapar.

' Transpoze (transpose): X', X matrisinin karmaşık eşlenik devriğidir (kompleks konjuge transpose). X.' ise
eşlenik olmayan (non-conjugate) transpozesidir. Transpoze işlemi vektörlerde satır vektörünü sütun
vektörüne veya sütun vekörünü satır vektörüne döndürür.

' ' Tek tırnak (quote): Tek tırnaklar arasındaki herhangi bir metin (text), ASCII koduna sahip karakterli
bileşenleri olan bir vektördür. Metin içinde kesme işaretini kullanmak istendiğinde ise, çift tırnak tercih
edilmelidir.

Örneğin, ' Ali"nin Masası.' gibi.

= Atama (assignment): Bildirimleri atamak için kullanılır. Örneğin B = A, A'nın elemanlarını B'de saklar.

< ...den küçük bağıntı işlemcisi.

<= …den küçük veya eşittir bağıntı işlemcisi.

> ...den büyük bağıntı işlemcisi.

>= ...den büyük veya eşittir bağıntı işlemcisi.

= = Mantıksal eşittir bağıntı (relational) işlemcisi.

& Mantıksal AND (ve) işlemcisi.

| Mantıksal OR (veya) işlemcisi.

~ Mantıksal tamamlayıcı (complemet) NOT (değil) işlemcisi.

Boşluk (blank) : Metin işlemlerinde veya ifadelerin arasında boşluk vermek için kullanılır.

5
Komut Satırında Klavye Kısayolları

- Ctrl-P Bir önceki satırı çağırır (Recall previous line)


¯ Ctrl-N Bir sonraki satırı çağırır (Recall next line)
¬ Ctrl-B İmleç bir karakter sola hareket eder (Move back one character)
® Ctrl-F İmleç bir karakter sağa hareket eder (Move forward one character)
ctrl-® Ctrl-R Bir kelime sağa hareket eder (Move right one word)
ctrl-¬ Ctrl-L Bir kelime sola hareket eder (Move left one word)
home Ctrl-A Satırın basına gider (Move to beginning of line)
end Ctrl-E Satırın sonuna gider (Move to end of line)
esc Ctrl-U Geçerli satırı iptal eder yani tamamen siler (Clear line)
del Ctrl-D Bir karakter sola doğru siler (Delete character at cursor)
backspace Ctrl-H Imlecten satırın başına kadar olan kısmı siler (Delete character before cursor)
Ctrl-K Imlecten satırın sonuna kadar olan kısmı siler (Delete to end of line)

Şimdi, doğrudan komut satırında yazacağımız örneklerle MATLAB kullanımına başlayalım…

6
BÖLÜM I

>> % ARİTMETİK İŞLEMLER


>> % ÖRNEK 1

>> x=1; y=2; a=x+y, b=x-y, c=x*y, d=x/y, f=x^y

a=
3

b=
-1

c=
2

d=
0.5000

f=
1

>> % ÖRNEK 2

>> % İşlem sırasına dikkat edilmelidir.

>> a=2^1/2, b=2^(1/2), c=2^3^4, d=2^(3^4)

a=
1

b=
1.4142

c=
4096

d=
2.4179e+024

>> % Bilimsel notasyonda e harfi 10 un kuvvetini temsil eder. 2.4179e+024 = 2.4179 x 1024 demektir.

7
>> % RADYAN - DERECE DÖNÜŞÜMÜ
>> % ÖRNEK 3

>> a=sin(30), % Radyan cinsinden açı değeri.

a=
-0.9880

>> b=sin(30*pi/180), % Derece cinsinden açı değeri.

b=
0.5000

>> % Değeri 0.5 olan sinüs fonksiyonun açısını bulalım.


>> x=asin(0.5) % Radyan cinsinden.

x=
0.5236

>> x=asin(0.5)*180/pi % Açı cinsinden.

x=
30.0000

>> % Açı değerlerini derece cinsinden kullanmak için trigonometrik fonksiyonların sonuna d ekleyebiliriz.
>> % sind, asind, cosd, acosd, tand, atand, cotd, acotd… gibi.

>> a=sind(30), x=asind(0.5)

a=
0.5000

x=
30.0000

>> % LOGARİTMA
>> % 10 tabanında logaritma: log10(x)
>> % 2 tabanında logaritma: log2(x)
>> % e tabanında doğal logaritma (lnx): log(x)
>> % MATLAB de taban işlemleri 10, 2 ve e tabanında tanımlanmıştır. Diğer tabanlar için 10 tabanına
dönüştürülerek bölme işlemi yapılır.

>> % ÖRNEK 4

>> % ln1, ln10, ln2, ln5, ln3/5 değerlerini bulalım.


>> a=log(1), b=log(10), c=log(2), d=log(5), e=log(3/5)

8
a=
0

b=
2.3026

c=
0.6931

d=
1.6094

e=
-0.5108

>> % ÖRNEK 5

>> % log1, log10, log2, log5, log3/5 değerlerini bulalım.


>> a=log10(1), b=log10(10), c=log10(2), d=log10(5), e=log10(3/5)

a=
0

b=
1

c=
0.3010

d=
0.6990

e=
-0.2218

>> % ÖRNEK 6

>> % logaritma 2 tabanında 0'ı, 1'i, 2'yi, 10'u ve 3/5'i bulalım.

9
>> a=log2(0), b=log2(1), c=log2(2), d=log2(10), e=log2(3/5)
Warning: Log of zero.

a=
-Inf

b=
0

c=
1

d=
3.3219

e=
-0.7370

>> % ÖRNEK 7

>> % logaritma 3 tabanında 12'yi bulalım. 3 tabanı tanımlı olmadığı için 10 tabanı ile işlem yapacağız.
>> % log312 = log1012 / log103 dür.
>> a=log10(12)/log10(3)

a=
2.2619

>> % x üssü n x^n,


>> % e (e= 2.71828) üssü x exp(x),
>> % karekök x sqrt(x),
>> % x in mutlak değeri abs(x) şeklindedir.

>> % ÖRNEK 8

>> exp(-1), exp(0), exp(1), exp(3/5)


ans =
0.3679

ans =
1

ans =
2.7183

ans =
1.8221

10
>> % ÖRNEK 9

>> sqrt(-1), sqrt(0), sqrt(1), sqrt (3/5)

ans =
0 + 1.0000i

ans =
0

ans =
1

ans =
0.7746

>> % ÖRNEK 10

>> abs(-5), abs(sqrt(3)-1)

ans =
5

ans =
0.7321

>> % ÖRNEK 11

>> % e= 2.71828 sayısı MATLAB de tanımlı değildir. e ile işlem yapabilmek için,
>> % e= exp(1) değişken ataması yapılabilir.
>>
>> e=exp(1), e^10, e^pi, pi^e

e=
2.7183

ans =
2.2026e+004

ans =
23.1407

ans =
22.4592

11
>> % KARMAŞIK SAYILAR
>> % ÖRNEK 12

>> % y= 2 + 3i için

>> y=2+3i

y=
2.0000 + 3.0000i

>> abs(y), % karmaşık sayının modülü (mutlak değeri veya genliği), yani sqrt(a^2+b^2)

ans =
3.6056

>> angle(y), % Karmaşık sayının radyan cinsinden faz açısı.

ans =
0.9828

>> angle(y)*180/pi, % Karmaşık sayının derece cinsinden faz açısı.

ans =
56.3099

>> conj(y), % Karmaşık sayının eşleniği.

ans =
2.0000 - 3.0000i

>> real(y), % Karmaşık sayının reel kısmı.


ans =
2

>> imag(y), % Karmaşık sayının sanal kısmı.

ans =
3

>> % ÖRNEK 13

>> % Karmaşık sayıların kutupsal gösterimini bulabilmek için verilen sayının


>> % mutlak değerini ve faz açısını (derece cinsinden) bulmamız gerekir.
>> % y=a+bi = r(cosѲ + isinѲ) dır.
>> % Burada mutlak değer r=IyI=sqrt(a2+b2), faz açısı Ѳ=arctan(b/a) dır.
>> % y=1+i sayısını kutupsal eşdeğerini bulalım.

12
>> y=1+i

y=
1.0000 + 1.0000i

>> abs(y), % Mutlak değeri.

ans =
1.4142

>> angle(y)*180/pi, % Derece cinsinden faz açısı.

ans =
45

>> % Sonuç, y= 1+i= 1.4142(cos45 + isin45) olur.

>> % YUVARLATMA İŞLEMLERİ


>> % Yuvarlatma işlemleri: fix, floor, ceil, round fonksiyonları ile yapılır.
>> % ÖRNEK 14

>> fix(-6.1) % fix: sıfıra doğru en yakın tamsayıya yuvarlatma yapar.

ans =
-6

>> floor(-6.1) % floor: eksi sonsuza doğru en yakın tam sayıya yuvarlatma yapar.

ans =
-7

>> ceil(-6.1) % ceil: artı sonsuza doğru en yakın tam sayıya yuvarlatma yapar.

ans =
-6

>> round(-6.1) % round: en yakın tam sayıya yuvarlatma yapar.

ans =
-6

13
>> % KALAN BULMA
>> % ÖRNEK 15

>> % Kalan bulma işlemleri için mod(x,y) fonksiyonu kullanılır.


>> % 79 un 15 e bölümünden kalanı bulalım.
>>
>> mod(79,15)

ans =
4

>> % TEMEL İSTATİKSEL İŞLEMLER


>> % Temel istatiksel işlemler: max, min, length, sum, prod, median, std, mean, geomean, harmmean, sort
>> % ÖRNEK 16

>> % Bir deneyin sonuçlarını d değişkenine vektör olarak girip inceleyelim.


>> d=[0.5 1 0.34 2.5 1.14 3.0 3.04 5 6.5 4.31 5.5]

d=
Columns 1 through 5

0.5000 1.0000 0.3400 2.5000 1.1400

Columns 6 through 10

3.0000 3.0400 5.0000 6.5000 4.3100

Column 11

5.5000

>> max(d) % En büyük değeri bulur.

ans =
6.5000

>> min(d) % En küçük değeri bulur.

ans =
0.3400

>> length(d) % Veri sayısını bulur.

ans =
11

14
>> sum(d) % Verileri toplar.

ans =
32.8300

>> prod(d) % Verileri çarpar.

ans =
3.4042e+003

>> std(d) % Formülüne göre standart sapmayı bulur.

ans =
2.1272

>> mean(d) % Aritmetik ortalamayı alır.

ans =
2.9845

>> geomean(d) % Geometrik ortalamayı alır.

ans =
2.0946

>> harmmean(d) % Harmonik ortalamayı alır.

ans =
1.2719
>> sort(d) % Verileri küçükten büyüğe doğru sıralar.

ans =
Columns 1 through 9

0.3400 0.5000 1.0000 1.1400 2.5000 3.0000 3.0400 4.3100 5.0000

Columns 10 through 11

5.5000 6.5000

>> % ASAL ÇARPANLARA AYIRMA


>> % ÖRNEK 17

>> % 187 nin asal çarpanlarını bulalım. Bunun için factor fonksiyonunu kullanabiliriz.

15
>> factor(187) % 187 nin asal çarpanlarını bulur.

ans =
11 17

>> % KESİRLİ GÖSTERİM


>> % ÖRNEK 18

>>% 12/96 değerini hem ondalıklı hem de kesirli olarak ifade edelim.
>>
>> 12/96

ans =
0.1250

>> format rat % Sonuçları kesirli gösterir. Varsayılana tekrar dönmek için >>format komutu yazılmalıdır.
>> a

a=
1/8

>> % OBEB-OKEK
>> % ÖRNEK 19

>> % Ortak bölenlerin en büyüğü obeb için gcd fonksiyonu, ortak katların en küçüğü okek için lcm fonksiyonu
>> % kullanılır. Örneğin 30 ve 24 ün obeb ini ve okek ini bulalım.

>> obeb30_24=gcd(30,24), okek30_24=lcm(30,24)

obeb30_24 =

okek30_24 =

120

>> % FAKTÖRİYEL
>> % ÖRNEK 20

>> % Faktöriyel hesapları için prod fonksiyonu kullanılabilir.


>> % n!=prod(1:n) şeklindedir.

16
>> % 15!/(9!-5!) ifadesinin sonucunu bulalım.

>> prod(1:15)/(prod(1:9)-prod(1:5))

ans =
3.6048e+006

>> % NOT: MATLAB de temel (elemanter) matematiksel fonksiyonların listesi için


>> % >>help elfun komutu kullanılır.

>> help elfun


Elementary math functions.

Trigonometric.
sin - Sine.
sind - Sine of argument in degrees.
sinh - Hyperbolic sine.
asin - Inverse sine.
asind - Inverse sine, result in degrees.
asinh - Inverse hyperbolic sine.
cos - Cosine.
cosd - Cosine of argument in degrees.
cosh - Hyperbolic cosine.
acos - Inverse cosine.
acosd - Inverse cosine, result in degrees.
acosh - Inverse hyperbolic cosine.
tan - Tangent.
tand - Tangent of argument in degrees.
tanh - Hyperbolic tangent.
atan - Inverse tangent.
atand - Inverse tangent, result in degrees.
atan2 - Four quadrant inverse tangent.
atanh - Inverse hyperbolic tangent.
sec - Secant.
secd - Secant of argument in degrees.
sech - Hyperbolic secant.
asec - Inverse secant.
asecd - Inverse secant, result in degrees.
asech - Inverse hyperbolic secant.
csc - Cosecant.
cscd - Cosecant of argument in degrees.
csch - Hyperbolic cosecant.
acsc - Inverse cosecant.
acscd - Inverse cosecant, result in degrees.
acsch - Inverse hyperbolic cosecant.

17
cot - Cotangent.
cotd - Cotangent of argument in degrees.
coth - Hyperbolic cotangent.
acot - Inverse cotangent.
acotd - Inverse cotangent, result in degrees.
acoth - Inverse hyperbolic cotangent.
hypot - Square root of sum of squares.

Exponential.
exp - Exponential.
expm1 - Compute exp(x)-1 accurately.
log - Natural logarithm.
log1p - Compute log(1+x) accurately.
log10 - Common (base 10) logarithm.
log2 - Base 2 logarithm and dissect floating point number.
pow2 - Base 2 power and scale floating point number.
realpow - Power that will error out on complex result.
reallog - Natural logarithm of real number.
realsqrt - Square root of number greater than or equal to zero.
sqrt - Square root.
nthroot - Real n-th root of real numbers.
nextpow2 - Next higher power of 2.

Complex.
abs - Absolute value.
angle - Phase angle.
complex - Construct complex data from real and imaginary parts.
conj - Complex conjugate.
imag - Complex imaginary part.
real - Complex real part.
unwrap - Unwrap phase angle.
isreal - True for real array.
cplxpair - Sort numbers into complex conjugate pairs.

Rounding and remainder.


fix - Round towards zero.
floor - Round towards minus infinity.
ceil - Round towards plus infinity.
round - Round towards nearest integer.
mod - Modulus (signed remainder after division).
rem - Remainder after division.
sign - Signum.

18
BÖLÜM II
>>% İNTEGRAL HESAPLARI

>>% İntegral, bir fonksiyon grafiğinin altındaki alanı bulmak için kullanılan sayısal bir yöntemdir.

>>% MATLAB de integral işlemleri, sonuç belirli ise, sayısal (nümerik) olarak quad fonksiyonu ile sonuç
>>% belirsiz ise, simgesel olarak int fonksiyonu ile hesaplanabilir.

>>% ÖRNEK 1

>>% q= ò f (x)dx integrali için nümerik sonucu quad fonksiyonu ile bulabiliriz.
a

>>% quad fonksiyonunun genel formatı q= quad(‘f(x)’,a,b) şeklindedir.


>>% quad fonksiyonu 10-6 hata ile f(x) fonksiyonunun a ile b arasındaki integraline yaklaşır.

ò
>>% q= x 2 dx belirli integralinin sonucunu sayısal olarak quad fonksiyonu ile bulalım.
1

>> quad('x.^2',1,2) % Fonksiyonda değişkenler . (nokta) şeklinde kullanılır.

ans =

2.3333

>>% ÖRNEK 2

ln5

òe
2x
>>% dx integralini hesaplayalım.
1

>> quad('exp(2*x)',1,log(5))

ans =

8.8055

>>% ÖRNEK 3

p /2

>>% ò sin x cos xdx integralini hesaplayalım.


0

>> quad('sin(x).*cos(x)',0,pi/2)

ans =

0.5000

19
>>% ÖRNEK 4
2
1
>>% ò ( x + 1)
1
2
dx integralini hesaplayalım.

>> quad('1./(x+1).^2',1,2)

ans =

0.1667

>>% ÖRNEK 5
1
2 x( x 2 + 3)
>>% ò0 ( x 2 + 3)2 + 1 dx integralini hesaplayalım.
>> quad('(2*x.*(x.^2+3))/((x.^2+3).^2+1)',0,1)

??? Index exceeds matrix dimensions.

Error in ==> quad at 79

if ~isfinite(y(7))

>>% Görüldüğü gibi hata verdi. Çünkü quad adaptif tekrarlı Simpson kuralını

>>% (eğrisel alan toplamı yaklaşımı) kullanan düşük dereceli bir yöntemdir.

>>% Burada daha yüksek dereceli bir yöntem olan quadv yi kullanmamız gerekir.

>> quadv('(2*x.*(x.^2+3))/((x.^2+3).^2+1)',0,1)

ans =

0.2653

>>% ÖRNEK 6

>>% İki katlı integral hesabında ise, dblquad fonksiyonu kullanılır.

y max x max

>>% dblquad fonksiyonunun genel formatı q= ò


y min
ò
x min
f ( x, y )dxdy ise,

>>% q=dblquad(‘f ‘,xmin, xmax, ymin, ymax) şeklindedir.

20
p
2p
>>% ò ò
0
p
( y sin x + x cos y ) dxdy integralini hesaplayalım.

>> dblquad('y*sin(x)+x*cos(y)',pi,2*pi,0,pi)

ans =

-9.8696

>>% NOT: Üç katlı integral hesabında ise, benzer olarak triplequad fonksiyonu kullanılabilir.

>>% ÖRNEK 7

>>% Simgesel integral hesaplamalarında sayısal (nümerik) sonuç yerine değişkene göre sonuç elde edilir.

>>% MATLAB simgesel işlemlerde “Symbolic Math Toolbox” ı kullanır.

>>% Kullanılacak fonksiyonlar >>help symbolic ile görülebilir.

>>% Simgesel işlemlerde kullanılacak değişkenlerin >>syms değişken1 değişken2 …

>>% şeklinde önceden bildirilmesi gerekmektedir.

>>% Aksi takdirde fonksiyonlar ve değişkenler tek tırnakların ' … ' arasında girilmelidir

>>% MATLAB de simgesel integral alma fonksiyonu int dir.

>>% int fonksiyonunun genel formatı q= ò f (x)dx ise, q=int(f,x,a,b) şeklindedir.


a

>>% q=int(f,x,a,b) f(x) fonksiyonunun x ‘e göre a’dan b’ ye belirli integralini alır.

>>% NOT: Yukarıda verilen quad fonksiyonu yerine int fonksiyonu kullanılarak hem belirli

>>% hem de belirsiz integral işlemleri yapmak mümkündür.

ò ( -2 x - 4 x + 20) dx integralini hesaplayalım.


5
>>%

>> syms x >>% ya da aynı sonuç aşağıdaki gösterimle de bulunabilir;

>> int(-2*x^5-4*x+20,x) >> int('-2*x^5-4*x+20','x')

ans = ans =

-1/3*x^6-2*x^2+20*x -1/3*x^6-2*x^2+20*x

21
>>% ÖRNEK 8

>>% ò sin3tx.cos xdx integralini hesaplayalım.


>> syms x t

>> int(sin(3*t*x)*cos(x),x)

ans =

-1/2/(3*t+1)*cos((3*t+1)*x)-1/2/(3*t-1)*cos((3*t-1)*x)

>> pretty(ans) % pretty(ans) fonksiyonu, sonucu daha anlaşılır gösterir.

cos((3 t + 1) x) cos((3 t - 1) x)

- 1/2 ---------------------- - 1/2 ---------------------

3t+1 3t-1

>>% ÖRNEK 9

ò e dx
2 3tx
>>% x integralini hesaplayalım.

>> syms x t

>> int(x^2*exp(3*t*x),x)

ans =

1/27/t^3*(9*t^2*x^2*exp(3*t*x)-6*t*x*exp(3*t*x)+2*exp(3*t*x))

>> simple(ans) % simple(ans) fonksiyonu, sonucu sadeleştirir.

ans =

1/27*exp(3*t*x)*(9*t^2*x^2-6*t*x+2)/t^3

>> pretty(ans)

exp(3 t x) (9 t 2 x 2 - 6 t x + 2)

1/27 -------------------------------------------

t3

22
>>% ÖRNEK 10

ò e dx
2
- ax
>>% integralini hesaplayalım.

>> syms x a >>% ya da aynı sonuç aşağıdaki gösterimle de bulunabilir;

>> int(exp(-a*x^2),x,-inf,inf) >> int('exp(-a*x^2)','x',-inf,inf)

ans = ans =

1/a^(1/2)*pi^(1/2) PIECEWISE([1/a^(1/2)*pi^(1/2), csgn(a) = 1],[Inf, otherwise])

>>% ÖRNEK 11

>>% Çok katlı integrallerde iç içe int fonksiyonu kullanılabilir.

>>% Önce içerideki sonra dışarıdaki integral işlemi uygulanır.

y max x max

>>% q = ò
y min
ò
x min
f ( x, y )dxdy ise, q=int(int(f,x,xmin, xmax),y,ymin, ymax) şeklindedir.

p
2p
>>% ò ò
0
p
( y sin x + x cos y )dxdy integralini hesaplayalım.

>> syms x y

>> int(int(y*sin(x)+x*cos(y),x,pi,2*pi),y,0,pi)

ans =

-pi^2

>>% ÖRNEK 12
1
2 x( x 2 + 3)
>>% ò 2 dx integralini quad v ve int fonksiyonları ile hesaplayalım.
0 ( x + 3) + 1
2

>>% Sonuçları karşılaştıralım. int fonksiyonunun kullanımı daha kullanışlı gözükmektedir.

23
>> quadv('(2*x.*(x.^2+3))/((x.^2+3).^2+1)',0,1)

ans =

0.2653

>> syms x

>> int((2*x*(x^2+3))/((x^2+3)^2+1),x,0,1)

ans =

1/2*log(17)-1/2*log(2)-1/2*log(5)

>> sonuc=1/2*log(17)-1/2*log(2)-1/2*log(5) % Sayısal sonuç için

sonuc =

0.2653

>>% TÜREV

>>% Bir f(x) fonksiyonunun türevi, x bağımsız değişkenine göre f(x) fonksiyonunun değişim oranı

>>% olarak tanımlanır. Pek çok fiziksel süreç (hız, ivme gibi) bir değişkenin değişim oranının ölçüsüdür.

>>% MATLAB de türev işlemleri simgesel mantık çerçevesinde çalışan diff fonksiyonu ile yapılır.

>>% diff(f,x) f nin x e göre türevini, daha genel olarak diff(f,x,n) f nin x e göre n. dereceden

>>% türevini alır.

>>% ÖRNEK 13

>>% f(x)= 5x3+ax2+bx-14 (a,b sbt) fonksiyonunun türevini alalım.

>> syms x a b >>% ya da aynı sonuç aşağıdaki gösterimle de bulunabilir;

>> diff(5*x^3+a*x^2+b*x-14,x) >> diff('5*x^3+a*x^2+b*x-14','x')

ans = ans =

15*x^2+2*a*x+b 15*x^2+2*a*x+b

>>% ÖRNEK 14

>>% f(t)=et cos(3t) fonksiyonunun 3. dereceden türevini alıp, t=-2 deki değerini bulalım.

>> syms t

>> fturev3=diff(exp(t)*cos(3*t),t,3)

fturev3 =

-26*exp(t)*cos(3*t)+18*exp(t)*sin(3*t)

24
>> tdegeri=subs(fturev3,t,-2) % Türev değerini subs fonksiyonu hasaplar: türevde t yerine -2 yazarak.

tdegeri =

-2.6979

>>% ÖRNEK 15

>>% f(x)=1/1+5cosx fonksiyonunun 3. dereceden türevini bulup, grafiğini çizdirelim.

>> syms x

>> fturev=diff(1/(1+5*cos(x)),x,3)

fturev =

750/(1+5*cos(x))^4*sin(x)^3+150/(1+5*cos(x))^3*sin(x)*cos(x)-5/(1+5*cos(x))^2*sin(x)

>> ezplot(fturev) % ezplot iki değişkenli bir fonksiyonun grafiğini çizer. (Bkz: Bölüm IV, Örnek 6)

>>% LİMİT

>>% MATLAB de limit alma işlemleri simgesel mantık çerçevesinde limit fonksiyonu ile yapılır.

>>% lim f ( x) için sonuç limit(f,x,a)


x®a

>> % lim f ( x) için sonuç limit(f,x,a,'left')


x ®a -

>> % lim f ( x) için sonuç limit(f,x,a,'right') şeklinde hesaplanabilir.


x®a +

25
>>% ÖRNEK 16

1 1 1
>>% a= lim , b= lim , c= lim limitlerini hesaplayalım.
x ®0 x x ®0 - x x ®0 + x

>>% Belirsiz limit durumunda sonuç, NaN (Not a Number)’a dönderilecektir.

>> a=limit(1/x,x,0), b=limit(1/x,x,0,'left'), c=limit(1/x,x,0,'right')

>> syms x

a=

NaN

b=

-Inf

c=

Inf

>>% ÖRNEK 17

>>% lim( x 2e - x ) ifadesini hesaplayalım.


x ®¥

>> syms x >>% ya da aynı sonuç aşağıdaki gösterimle de bulunabilir;

>> limit(x^2*exp(-x),x,inf) >> limit('x^2*exp(-x)',x,inf)

ans = ans =

0 0

>>% ÖRNEK 18

x-2
>>% lim ifadesini hesaplayalım.
x®2
4x + 1 - 3
>> syms x

>> limit((x-2)/(sqrt(4*x+1)-3),x,2)

ans =

3/2

26
>>% ÖRNEK 19

sin 3 3x
>>% lim ifadesini hesaplayalım.
x ®p + cos 2 3 x

>> limit(sin(3*x)^3/cos(3*x)^2,x,pi,'right')

>> syms x

ans =

>>% ÖRNEK 20

x3 - a 3
>>% lim ifadesini hesaplayalım.
x ® a sin(3 x - 3a )

>> syms x a

>> limit((x^3-a^3)/sin(3*x-3*a),x,a)

ans =

a^2

27
BÖLÜM III
>>% VEKTÖRLER

>>% VEKTÖR GÖSTERİMLERİ

>>% Vektör, kısaca tek boyutlu dizidir. 1xn uzunluktaki diziye satır vektörü, mx1 uzunluktaki diziye ise sütun

>>% vektörü denir. MATLAB de vektörler üç temel yoldan oluşturulabilir: a. Doğrudan köşeli parantez […]

>>% kullanarak; b. Eşit aralıklı elemanlar kullanarak, sütun notasyonu ‘ : ’ kullanarak ya da linspace veya

>>% logspace komutlarıyla; c. rand, randn, ones, zeros fonksiyonlarıyla.

>>% ÖRNEK 1

>>% x=[ 1 2 3 4 5 ] vektörü 1x5 uzunluğunda, 5 elemanlı bir satır vektörüdür. x vektörünün gösterim

>>% şekilleri aşağıdaki gibidir:

>> x=[ 1 2 3 4 5 ] % Köşeli parentez içinde, elemanlar arası boşluk bırakarak.

x=

1 2 3 4 5

>> x=[ 1, 2, 3, 4, 5 ] % Köşeli parentez içinde, elemanlar arası virgül kullanarak.

x=

1 2 3 4 5

>> x=1:5 % Sütun notasyonu ilkdeğer : n : son değer %

% kullanarak. (n artış miktarı yazılmadığında varsayılan değer 1 dir.) %

% x=1:5 =[1:5]= (1:5) gösterimleri eşdeğerdir. Ancak transpoze alınacağı zaman %

% parantezle veya köşeli parantezle gösterim kullanılmalıdır.

x=

1 2 3 4 5

>> x=linspace(1,5,5) % linspace(ilk değer, son değer, n) fonksiyonu kullanarak. %

% Burada n ilk değer ile son değer arasındaki nokta sayısıdır. %

% Eğer n değeri belirtilmezse, iki nokta arası doğrusal olarak 100 eşit parçaya bölünür.

x=

1 2 3 4 5

28
>> % NOT: logspace(ilk değer, son değer, n) fonksiyonu ise, iki nokta arasında logaritmik aralıklı bir vektör

>> % üretir. Eğer n değeri belirtilmezse, 10ilk değer ile 10son değer arası logaritmik olarak eşit aralıklı 50 satır

>> % vektörü oluşturulur. Görüldüğü gibi logspace, logaritmik ölçekte linspace fonksiyonunun rolünü

>> % oynamaktadır. linspace ve logspace fonksiyonları grafik çizimlerinde kolaylık sağlar.

>>% Eğer x vektörü 5x1 uzunluğunda 5 elemanlı bir sütun vektörü olsaydı, x in gösterim şekilleri aşağıdaki
>>% gibi olurdu:

>> x= [ 1 % Köşeli parentez içinde alt alta yazımla.

5]

x=

>> x=[1;2;3;4;5] % Köşeli parentez içinde elemanları noktalı virgülle ’;’ ayırarak.

x=

29
>> x=1:5 % Önce satır vektörünü oluşturup,

x=

1 2 3 4 5

>> x' % sonra satır vektörünün transpozesini alarak (yani sütun vektörüne dönüştürerek).

ans =

>>% Deneme amaçlı bazı durumlar için rasgele sayılı vektörler üretmek gerekebilir. Bunun için rand veya

>>% randn fonksiyonları kullanılır.

>>% rand fonksiyonunun genel sözbiçimi, f= a+(b-a)*rand(m,n) şeklinde olup, burada üretilen mxn

>>% boyutundaki f vektörü, a ile b sayıları arasında düzenli dağılmış rasgele sayılardan oluşur. Sadece rand

>>% fonksiyonu kullanıldığında 0 ile 1 arasında rasgele sayılar üretilir.

>>% randn fonksiyonunun genel sözbiçimi ise, f= mu + sigma*randn(m,n) şeklinde olup, burada üretilen

>>% mxn boyutundaki f vektörü, mu ortalama değerine ve sigma standart sapma değerine sahip bir

>>% dağılımdan (Gauss dağılımından) normal rasgele sayılardan oluşur.

>>% Sadece randn fonksiyonu kullanıldığında ortalaması 0 ile standart sapması 1 olan Gauss dağılımından

>>% rasgele sayılar üretilir.

>>% Bu fonksiyonlar her çağırılışlarında farklı sayılar üretilecektir.

30
>>% ÖRNEK 2

>>% a=1 ile b=5 sayıları arasında rasgele 7 tane sayı üretelim.(satır vektörü olsun)

>> f=1+4*rand(1,7)

f=

Columns 1 through 5

4.6676 2.6411 4.5746 1.2316 2.4115

Columns 6 through 7

4.2527 1.0394

>>% Benzer olarak, a=-1 ile b=1 sayıları arasında rasgele 2 tane sayı üretelim.(sütun vektörü olsun)

>> f=-1+2*rand(2,1)

f=

-0.5947

0.3443

>> rand % Sadece rand fonksiyonu 0–1 arasında rasgele sayılar üretir.

ans =

0.8381

>>% ÖRNEK 3

>>% mu=2 ve sigma=5 için 4 elemanlı bir satır vektörü üretelim.

>> f=2+5*randn(1,4)

f=

-0.1628 -6.3279 2.6267 3.4384

>> randn % Sadece randn fonksiyonu kullanıldığında ortalaması 0 ile standart sapması 1 olan %

% Gauss dağılımından rasgele sayılar üretilir.

ans =

-1.1465

31
>>% ÖRNEK 4

>>% ones ile elemanları 1 den oluşan, zeros ile elemanları 0 dan oluşan vektörler üretilir.

>> v_dort=ones(1,4)

v_dort =

1 1 1 1

>> f_dotr=zeros(1,4)

f_dort =

0 0 0 0

>>% TEMEL VEKTÖR İŞLEMLERİ

>>% ÖRNEK 5

>>% -1 ile 1 arasında 0.125 artımlı bir vektör (dizi) üretip, bu vektörü inceleyelim.

>> v=-1:.125:1

v=

Columns 1 through 6

-1.0000 -0.8750 -0.7500 -0.6250 -0.5000 -0.3750

Columns 7 through 12

-0.2500 -0.1250 0 0.1250 0.2500 0.3750

Columns 13 through 17

0.5000 0.6250 0.7500 0.8750 1.0000

>> size(v) % size(v), v vektörünün boyutunu verir. v vektörü 1x17 uzunluğundadır.

ans =

1 17

>> v(5) % v(5), v vektörünün 5. elemanı.

ans =

-0.5000

32
>> v(end-2) % v vektörünün sondan (son değer dahil) 3. terimi (yani baştan 15. terimi).

ans =

0.7500

>> v(1:5) % v vektörünün ilk 5 terimi.

ans =

-1.0000 -0.8750 -0.7500 -0.6250 -0.5000

>> v(end-4:end) % v vektörünün son 5 terimi.

ans =

0.5000 0.6250 0.7500 0.8750 1.0000

>> v(9:end) % v vektörünün 9. teriminden son terimine kadar olan değerleri.

ans =

Columns 1 through 6

0 0.1250 0.2500 0.3750 0.5000 0.6250

Columns 7 through 9

0.7500 0.8750 1.0000

>> (3*v/2)' % v vektörünün her bir elemanının 3 katının yarısının sütun vektörü şeklinde gösterimi.

ans =

-1.5000

-1.3125

-1.1250

-0.9375

-0.7500

-0.5625

-0.3750

33
-0.1875

0.1875

0.3750

0.5625

0.7500

0.9375

1.1250

1.3125

1.5000

>>% ÖRNEK 6

>>% iki vektör tanımlayıp işlemler yapalım.

>> a=[1 -2 4 5];

>> b=[3 -1 2 3];

>> t=(2*a)+(3*b) % Skaler sayılarla vektörlerin çarpımı ve oluşan yeni vektörlerin toplamı.

t=

11 -7 14 19

>> c1=a.*b % İki vektörün karşılıklı elemanlarının çarpımı (elemanter çarpım-sonuç vektördür).

c=

3 2 8 15

>> c2=a*b' % Satır vektörüyle sütun vektörünün çarpımı (iç çarpım=skaler çarpım-sonuç skalerdir).

c2 =

28

34
>> c3=a' *b % Sütun vektörüyle satır vektörünün çarpımı (dış çarpım-sonuç kare matristir).

c3 =

3 -1 2 3

-6 2 -4 -6

12 -4 8 12

15 -5 10 15

>> b1=a./b % a vektörünün her bir elemanı b vektörünün her bir elemanına bölünmüştür (sağa bölme).

b1 =

0.3333 2.0000 2.0000 1.6667

>> b2=a.\b % b vektörünün her bir elemanı a vektörünün her bir elemanına bölünmüştür (sola bölme).

b2 =

3.0000 0.5000 0.5000 0.6000

>> u=a.^b % a vektörünün her bir elemanının b vektörü karşılığındaki üssü alınarak oluşan vektör.

u=

1.0000 -0.5000 16.0000 125.0000

>> % NOT: MATLAB de nokta işaretli işlemler, yani dot işlemleri eleman eleman (elemanter) işlem
yapılacağını gösterir.

>>% ÖRNEK 7

>>% 1 den 100 e kadar tek sayıların kareleri toplamını ve çarpımını bulalım

>> t=1:2:100;

>> toplam=sum(t.^2), carpim=prod(t.^2)

toplam =

166650

carpim =

7.4278e+156

35
>>% ÖRNEK 8

>>% 1 den 5 e kadar olan sayılar için sol sütunda sayı, sağ sütunlarda sırasıyla sayıların tersi ve kareköklerini
>>% gösterelim.

>> sayi=1:5; tersi=1./sayi; karekoku=sqrt(sayi);

>> goster=[sayi; tersi; karekoku]'

goster =

1.0000 1.0000 1.0000

2.0000 0.5000 1.4142

3.0000 0.3333 1.7321

4.0000 0.2500 2.0000

5.0000 0.2000 2.2361

>>% ÖRNEK 9

>>% 0 ile 300 arasında 8 ile tam bölünen kaç sayı vardır, bulalım.

>> s=0:8:300;

>> size(s)

ans =

1 38

>>% 38 tane sayı vardır

>>% MATRİSLER

>>% MATRİS GÖSTERİMLERİ

>>% Matrisler mxn uzunlukta 2 boyutlu dizilerdir. MATLAB de matrisler 3 temel yoldan oluşturulabilir:

>>% 1. Doğrudan köşeli parentez kullanarak; 2. eye, ones, zeros, rand, randn gibi utility fonksiyonları
>>% kullanarak; 3. Özel matrisler; paskal, hilbert ve buna benzer fonksiyonlar kullanarak.

36
>>% ÖRNEK 10

>>% a=[ 1 2 3; 2 4 6; 1 3 7 ] % Köşeli parentez içinde, elemanlar arasında boşluk(virgül de kullanılabilir)

% bırakıp, satırları noktalı virgülle ayırarak.

a=

1 2 3

2 4 6

1 3 7

>> a=[ 1 2 3

2 4 6

1 3 7]

a=

1 2 3

2 4 6

1 3 7

>>% ÖRNEK 11

>>% eye(n,n) fonksiyonu 1. Köşegeni 1 lerden diğer elemanları 0 lardan oluşan birim matris oluşturur.

>> eye(3,3)

ans =

1 0 0

0 1 0

0 0 1

>>% ones fonksiyonu bütün elemanları 1 lerden, zeros fonksiyonu da bütün elemanları 0 lardan oluşan
>>% matrisler üretir.

37
>> ones(3,3)

ans =

1 1 1

1 1 1

1 1 1

>> zeros(3,3)

ans =

0 0 0

0 0 0

0 0 0

>>% ÖRNEK 12

>>% rand fonksiyonunun genel sözbiçimi, f= a+(b-a)*rand(m,n) şeklinde olup, burada üretilen mxn

>>% boyutundaki f matrisi, a ile b sayıları arasında düzenli dağılmış rasgele sayılardan oluşur. Sadece rand

>>% fonksiyonu kullanıldığında 0 ile 1 arasında rasgele sayılı matrisler üretilir.

>>% randn fonksiyonu ile rasgele matris üretmek pek yaygın değildir.

>>% a=-5 ile b=5 sayıları arasında, rasgele sayılı 2x4 boyutunda matrisler üretmek için;

>>% f= -5 + 10*rand(2,4)

f=

4.5013 1.0684 3.9130 -0.4353

-2.6886 -0.1402 2.6210 -4.8150

>>% 0 ile 1 arasında rasgele sayılı 3x2 boyutunda matrisler üretmek için;

>>% rand(3,2)

ans =

0.8214 0.7919

0.4447 0.9218

0.6154 0.7382

38
>>% ÖRNEK 13

>>% pascal(k) fonksiyonu k. sıraya kadar pascal üçgeninin elemanlarından oluşan kxk boyunda bir matris
>>% oluşturur.

>> pascal(4)

ans =

1 1 1 1

1 2 3 4

1 3 6 10

1 4 10 20

>>% magic(k) fonksiyonu kxk boyunda 1 den k ya kadar sayılardan oluşan (k=2 hariç) eşit satır, sütun ve
>>% köşegen toplamına sahip bir kare matris oluşturur.

>> magic(3)

ans =

8 1 6

3 5 7

4 9 2

>>% hilb(k) fonksiyonu kxk boyunda her bir elemanı 1/(i+j-1) ile belirlenen ve hilbert matrisi olarak
>>% adlandırılan bir kare matris oluşturur.

>> hilb(3)

ans =

1.0000 0.5000 0.3333

0.5000 0.3333 0.2500

0.3333 0.2500 0.2000

39
>>% [X,Y]=mesgrid(x,y) fonksiyonu x ve y vektörlerini, X ve Y matrislerine dönüştürerek, özellikle 3 boyutlu
>>% grafik çizimleri için bir veri ortamı hazırlar.

>>% -2 ile 2 arasında 1 artımlı X ve Y matrislerini oluşturalım.

>> [X,Y]=meshgrid(-2:2,-2:2)

X=

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

Y=

-2 -2 -2 -2 -2

-1 -1 -1 -1 -1

0 0 0 0 0

1 1 1 1 1

2 2 2 2 2

>>% TEMEL MATRİS İŞLEMLERİ

>>% ÖRNEK 14

>> A=[-2 3; 4 1], k=3 % A matrisi ve k skaler sayısını ele alalım.

A=

-2 3

4 1

k=

>> A+k % A+k=k+A dır. A matrisinin her bir elemanı k sayısı ile toplanır.

ans =

1 6

7 4

40
>> A-k % A-k=-(k-A) dır. A matrisinin her bir elemanından k sayısı çıkarılır.

ans =

-5 0

1 -2

>> A*k % A*k=k*A dır. A matrisinin her bir elemanı ile k sayısı çarpılır.

ans =

-6 9

12 3

>> A^k % A matrisi yan yana k kere çarpılır: A*A*A

ans =

-44 45

60 1

>> k^A % k sayısı A matrisinin her bir elemanını üs olarak logaritmik işleme alır.

ans =

11.0106 14.5080

19.3440 25.5186

>> A/k % A matrisinin her bir elemanı k sayısına bölünür.

ans =

-0.6667 1.0000

1.3333 0.3333

>> A\k % Boy uyuşmazlığı vardır.

??? Error using ==> mldivide

Matrix dimensions must agree.

41
>> k/A % Boy uyuşmazlığı vardır.

??? Error using ==> mrdivide

Matrix dimensions must agree.

>> k\A % A matrisinin her bir elemanı k sayısına bölünür.

ans =

-0.6667 1.0000

1.3333 0.3333

>> A.*k % A.*k=k.*A =A*k =k*A dır. A matrisinin her bir elemanı ile k sayısı çarpılır.

ans =

-6 9

12 3

>> A.^k % A.^k ¹ A^k dır. A matrisinin her bir elemanının k. üssü alınır.

ans =

-8 27

64 1

>> k.^A % k.^A ¹ k^A dır. Her k sayısı A matrisinin her bir elemanını üs olarak logaritmik işleme alır.

ans =

0.1111 27.0000

81.0000 3.0000

>> A./k % A./k=A/k dır. A matrisinin her bir elemanı k sayısına bölünür.

ans =

-0.6667 1.0000

1.3333 0.3333

42
>> A.\k % A.\k ¹ A\k dır. Her k sayısı A matrisinin her bir elemanına bölünür.

ans =

-1.5000 1.0000

0.7500 3.0000

>> k./A % k./A ¹ k/A dır. Her k sayısı A matrisinin her bir elemanına bölünür.

ans =

-1.5000 1.0000

0.7500 3.0000

>> k.\A % k.\A=k\A dır. A matrisinin her bir elemanı k sayısına bölünür.

ans =

-0.6667 1.0000

1.3333 0.3333

>>% ÖRNEK 15

>>% Matris-matris işlemlerinde yapılacak işleme göre matrislerin boyları uyuşmalıdır. Örneğin matris çarpma
>>% kuralına göre 1. matrisin sütun sayısı 2. matrisin satır sayısına eşit olmalıdır. Aksi takdirde MATLAB hata
>>% mesajı verir. Vektörlerin de aynı zamanda birer matris olduğunu unutmamak gerekir.

>> v=[1 2 3], M=[4 5 6; 7 8 9; 0 1 2] % Bir vektörle bir matrisin çarpımı. Sonuç bir vektördür.

v=

1 2 3

M=

4 5 6

7 8 9

0 1 2

>> v*M

ans =

18 24 30

43
>> a=[1:3; 4:6; 7:9], b=[ones(1,3); zeros(1,3); rand(1,3)] % a ve b matrislerini alarak işlemler yapalım.

a=

1 2 3

4 5 6

7 8 9

b=

1.0000 1.0000 1.0000

0 0 0

0.3529 0.8132 0.0099

>> a+b % a+b=b+a dır. Matrislerin karşılıklı elemanları kendi arasında toplanır.

ans =

2.0000 3.0000 4.0000

4.0000 5.0000 6.0000

7.1389 8.2028 9.1987

>> a-b % a-b=-(b-a) dır. Matrislerin karşılıklı elemanları kendi arasında çıkarılır.

ans =

0 1.0000 2.0000

4.0000 5.0000 6.0000

6.8611 7.7972 8.8013

>> a*b % Matris çarpma kuralına göre işlem yapılır.

ans =

1.4167 1.6083 1.5962

4.8333 5.2166 5.1923

8.2500 8.8249 8.7885

44
>> b*a % Matris çarpma kuralına göre işlem yapılır. Görüldüğü gibi, a*b ¹ b*a dır.

ans =

12.0000 15.0000 18.0000

0 0 0

2.3410 2.8814 3.4218

>> a/b % Sağa bölmede 1. matris 2. matrisin tersi ile çarpılır.

Warning: Matrix is singular to working precision.

ans =

NaN -Inf 33.4276

NaN -Inf 33.4276

NaN -Inf 33.4276

>> b/a % Sola bölmede 2. matris 1. matrisin tersi ile çarpılır.

Warning: Matrix is singular to working precision.

ans =

NaN NaN NaN

NaN NaN NaN

NaN -Inf Inf

>> a^b % MATLAB de matris üssü matris işlemleri tanımlı değildir.

??? Error using ==> mpower

At least one operand must be scalar.

45
>> a.*b % a.*b=b.*a dır. Elemanter çarpım normal çarpımdan farklıdır.

ans =

1.0000 2.0000 3.0000

0 0 0

0.9722 1.6221 1.7885

>> a./b % Elemanter sağa bölme normal sağa bölmeden farklıdır.

Warning: Divide by zero.

ans =

1.0000 2.0000 3.0000

Inf Inf Inf

50.3993 39.4545 45.2895

>> a.\b % Elemanter sola bölme normal sola bölmeden farklıdır.

ans =

1.0000 0.5000 0.3333

0 0 0

0.0198 0.0253 0.0221

>> a.^b % Elemanter üs almada a matrisinin her bir elemanı, b matrisi karşılığındaki elemanı üs olarak alır.

ans =

1.0000 2.0000 3.0000

1.0000 1.0000 1.0000

1.3103 1.5245 1.5475

46
>>% ÖRNEK 16

>> a=magic(3) % a matrisini alalım.

a=

8 1 6

3 5 7

4 9 2

>> size(a) % a matrisinin boyutunu verir. a matrisi 3 satır ve 3 sütundan oluşan 3x3=9 elemanlı bir matristir.

ans =

3 3

>> a' % a matrisinin transpozesi (devriği) dir. Burada matrisin aynı indisli satır ve sütunları yer değiştirmiştir.

ans =

8 3 4

1 5 9

6 7 2

>> det(a) % a matrisinin determinantıdır. Determinant alabilmek için matris kare olmalıdır.

ans =

-360

>> inv(a) % a matrisinin çarpma işlemine göre tersi (inversi) dir.

% Sadece det ¹ 0 olan karesel matrislerin inversi vardır.

ans =

0.1472 -0.1444 0.0639

-0.0611 0.0222 0.1056

-0.0194 0.1889 -0.1028

47
>> rank(a) % a matrisinin rankıdır. Yani, a matrisinin tüm karesel alt matrislerinden,

% determinantı sıfırdan farklı olan en yüksek boyutlusunun buyutudur.

ans =
a=
3
8 1 6

3 5 7
>> diag(a) % Ana köşegen elemanlarını verir.
4 9 2
ans =

>> diag(a,1) % Ana köşegenin üst kısmındaki elemanları verir.

ans =

>> diag(a,-1) % Ana köşegenin alt kısmındaki elemanları verir.

ans =

>> [v,d]=eig(a) % a matrisinin, v özvektörlerini ve d özdeğerlerini verir.

v=

-0.5774 -0.8131 -0.3416

-0.5774 0.4714 -0.4714

-0.5774 0.3416 0.8131

48
d=

15.0000 0 0

0 4.8990 0

0 0 -4.8990

>>% ÖRNEK 17

>> m=magic(5) % m matrisini alıp inceleyelim.

m=

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

>> m(2) % m matrisinin 2. elemanı.

ans =

23

>> m(1:9) % m matrisinin 1. elemandan 9. elemana kadar olan elemanları.

ans =

17 23 4 10 11 24 5 6 12

>> m(1:2:9) % m matrisinin 2 artımla 1. elemandan 9. elemana kadar olan elemanları.

ans =

17 4 11 5 12

>> m(2, :) % m matrisinin 2. satırı.

ans =

23 5 7 14 16

49
>> m(2:4, :) % m matrisinin 2. 3. 4. satırlarından oluşan alt matrisi.

ans = m=
23 5 7 14 16 17 24 1 8 15
4 6 13 20 22 23 5 7 14 16
10 12 19 21 3 4 6 13 20 22

10 12 19 21 3
>> m(:, 2) % m matrisinin 2. sütunu. 11 18 25 2 9
ans =

24

12

18

>> m(:, 2:4) % m matrisinin 2. 3. 4. sütunlarından oluşan alt matrisi.

ans =

24 1 8

5 7 14

6 13 20

12 19 21

18 25 2

>> m(1,3) % m matrisinin 1. satır 3. sütun elemanı.

ans =

50
>> m([1,2], :) % m matrisinin 1. ve 2. satırları. m=
ans = 17 24 1 8 15
17 24 1 8 15 23 5 7 14 16
23 5 7 14 16 4 6 13 20 22

10 12 19 21 3

11 18 25 2 9
>> m(:,[1:3]) % m matrisinin 1. 2. 3. sütunları.

ans =

17 24 1

23 5 7

4 6 13

10 12 19

11 18 25

>> m([1, 2], [3, 4, 5]) % m matrisinin 1. 2. satırları ve 3. 4. 5. sütunlarından oluşan alt matrisi.

ans =

1 8 15

7 14 16

>> [i, j]=find(m<5); % m matrisinin 5 den küçük elemanlarının konumlarını bulur.

>> sonuc=[i, j]

sonuc =

3 1

1 3

5 4

4 5

51
>> m(1)=5 % m matrisinin 1. elemanını 5 yapar.
m=
m=
17 24 1 8 15
5 24 1 8 15
23 5 7 14 16
23 5 7 14 16
4 6 13 20 22
4 6 13 20 22
10 12 19 21 3
10 12 19 21 3
11 18 25 2 9
11 18 25 2 9

>> m(1:3)=5 % m matrisinin 1. 2. 3. elemanlarını 5 yapar.

m=

5 24 1 8 15

5 5 7 14 16

5 6 13 20 22

10 12 19 21 3

11 18 25 2 9

>> m(1:3,:)=5 % m matrisinin 1. 2. 3. satırlarını 5 yapar.

m=

5 5 5 5 5

5 5 5 5 5

5 5 5 5 5

10 12 19 21 3

11 18 25 2 9

52
>> m(:, 1)= [ ] % m matrisinin 1. sütunu siler. m=

m= 17 24 1 8 15

24 1 8 15 23 5 7 14 16

5 7 14 16 4 6 13 20 22

6 13 20 22 10 12 19 21 3

12 19 21 3 11 18 25 2 9

18 25 2 9

>> m(:, [2, 4])= [ ] % m matrisinin 2. ve 4. sütunu siler.

m=

17 1 15

23 7 16

4 13 22

10 19 3

11 25 9

>> c=[1:5]

c=

1 2 3 4 5

>> ek_satir=[ m; c ] % c vektörünü 6. satır olarak m matrisine ekler.

ek_satir =

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

1 2 3 4 5

53
>> ek_sutun=[ m, c' ] % c’ vektörünü 6. sütun olarak m matrisine ekler.
m=
ek_sutun =
17 24 1 8 15
17 24 1 8 15 1
23 5 7 14 16
23 5 7 14 16 2
4 6 13 20 22
4 6 13 20 22 3
10 12 19 21 3
10 12 19 21 3 4
11 18 25 2 9
11 18 25 2 9 5

>> sum(m) % m matrisinin her bir sütununun toplamını bulur.

ans =

65 65 65 65 65

>> sum(m') % m matrisinin her bir satırının toplamını bulur.

ans =

65 65 65 65 65

>> sum(diag(m)) % m matrisinin ana köşegen elemanlarının toplamını bulur.

ans =

65

54
>>% ÖRNEK 18

a11 x1 + a12 x2 + ... + a1n xn = b1 é a11 a12 ... a1n ù é x1 ù é b1 ù


êa úê ú ê ú
a11 x1 + a12 x2 + ... + a1n xn = b1 ê 21 a22 ... a2 n ú ê x1 ú = ê b2 ú
…………………………………………… ê ... . . ... ú ê . ú ê . ú
ê úê ú ê ú
am1 x1 + am 2 x2 + ... + amn xn = bm ë am1 am 2 ... amn û ë xn û ëbm û

A X = B

>>% n bilinmeyenli ve m tane denklemden oluşan lineer denklem sitemi ve onun matris biçimi verilmiştir.

>>% Görüldüğü bibi, AX=B dir. Burada A katsayılar matrisi, X bilinmeyenler sütun vektörü,

>>% B ise, sabitler sütun vektörüdür.

>>% X=A\B matris denklemi AX=B çözümünü gösterir.

>>% X=B/A matris denklemi XA=B çözümünü gösterir.

>>% Burada denklem sisteminin kökleri, X=A\B=inv(A)*B den bulunabilir.

>>% 2y+4z=2

>>% x+2y+2z=3

>>% 3x+4y+6z=-1

>>% Yukarıda verilen lineer denklem sisteminin çözüm kümesini bulalım.

>> A=[0 2 4; 1 2 2; 3 4 6]; % Katsayılar matrisi.

>> B=[2;3;-1]; % Sabitler sütun vektörü.

>> X=inv(A)*B % Bilinmeyenleri içeren sütun vektörü.

X=

-3.0000

5.0000

-2.0000

>>% Çözüm x=-3, y=5, z=-2 dir. Yani, çözüm kümesi, Ç={(-3, 5, -2)} şeklindedir.

55
>>% Çözümü başka bir yoldan, solve fonksiyonu ile de bulabiliriz.

>> [x,y,z]=solve('2*y+4*z=2','x+2*y+2*z=3','3*x+4*y+6*z=-1')

x=

-3

y=

z=

-2

>>% POLİNOMLAR

>>% MATLAB de polinomlar vektörlerle gösterilir ve vektörün elemanları, polinomda x in en büyük üssünden
>>% başlayarak azalan sıradaki katsayılarıdır. Polinom katsayıları, köşeli parantezler arasında, aralarında
>>% boşluk bırakılarak satır vektörü formatında ifade edilir.

>>% ÖRNEK 19

>>% P(x)=x3-2x+1 ve Q(x)=3x3 +5 polinomlarını alalım.

>> P=[1 0 -2 1], Q=[3 0 0 5] % Polinomların azalan üsse göre vektörel gösterimi. Katsayı vektörleri.

P=

1 0 -2 1

Q=

3 0 0 5

>> 2*P+5*Q % Skaler ile polinom çarpımı ve polinomların toplamı. Sonuç, 17x3 - 4x + 27 dir.%

% Burada polinom dereceleri eşittir. Dereceler farklı olsaydı toplama işlemi için,%

% düşük dereceli polinoma sıfır katsayıları ilave edilerek, dereceler eşitlenirdi.

ans =

17 0 -4 27

56
>> conv(P,Q) % Polinomların çarpmak için conv(P,Q) fonksiyonu kullanılır. %

% İkiden fazla polinomun çarpımı için conv fonksiyonunu tekrar tekrar kullanmak gerekir. %

% Sonuç, 3x6 - 6x4 + 8x3 - 10x + 5 dir.

ans =

3 0 -6 8 0 -10 5

>> [B,K]=deconv(P,Q) % Polinomların bölmek için [B,K]=deconv(P,Q) fonksiyonu kullanılır.

% Burada B bölüm, K ise kalanı gösterir.

% Bölüm= 0.3333x, kalan=-2x - 0.6667 dir.

B=

0.3333

K=

0 0 -2.0000 -0.6667

>> roots(P) % roots(P) fonksiyonu P polinomunun köklerini bulur.

ans =

-1.6180

1.0000

0.6180

>> solve('x^3-2*x+1=0') % Polinomların köklerini bulmak için solve fonksiyonu da kullanılabilir.

ans =

1/2*5^(1/2)-1/2

-1/2-1/2*5^(1/2)

57
>>poly([1 -1]) % poly([1 -1]) kökleri 1 ve -1 olan polinomu bulur. Sonuç, x2 - 1 dir.

ans =

1 0 -1

>>% P(x)=x3-2x+1 polinomunun türevini iki ayrı yoldan bulalım.

>> P=[1 0 -2 1], % Katsayılar vektörü.

P=

1 0 -2 1

>> polyder(P) % polyder(P) fonksiyonu P polinomunun türevini alır. Sonuç, 3x2 – 2 dir.

ans =

3 0 -2

>> diff('x^3-2*x+5','x') % diff fonksiyonu da P polinomunun x e göre türevini alır.

ans =

3*x^2-2

>>% NOT: Polinom fonksiyonlarına >>help polyfun komutu ile ulaşılabilir.

>> help polyfun

Interpolation and polynomials.

Data interpolation.

pchip - Piecewise cubic Hermite interpolating polynomial.

interp1 - 1-D interpolation (table lookup).

interp1q - Quick 1-D linear interpolation.

interpft - 1-D interpolation using FFT method.

interp2 - 2-D interpolation (table lookup).

interp3 - 3-D interpolation (table lookup).

interpn - N-D interpolation (table lookup).

griddata - Data gridding and surface fitting.

58
griddata3 - Data gridding and hyper-surface fitting for 3-dimensional data.

griddatan - Data gridding and hyper-surface fitting (dimension >= 2).

Spline interpolation.

spline - Cubic spline interpolation.

ppval - Evaluate piecewise polynomial.

Geometric analysis.

delaunay - Delaunay triangulation.

delaunay3 - 3-D Delaunay tessellation.

delaunayn - N-D Delaunay tessellation.

dsearch - Search Delaunay triangulation for nearest point.

dsearchn - Search N-D Delaunay tessellation for nearest point.

tsearch - Closest triangle search.

tsearchn - N-D closest triangle search.

convhull - Convex hull.

convhulln - N-D convex hull.

voronoi - Voronoi diagram.

voronoin - N-D Voronoi diagram.

inpolygon - True for points inside polygonal region.

rectint - Rectangle intersection area.

polyarea - Area of polygon.

Polynomials.

roots - Find polynomial roots.

poly - Convert roots to polynomial.

polyval - Evaluate polynomial.

polyvalm - Evaluate polynomial with matrix argument.

residue - Partial-fraction expansion (residues).

polyfit - Fit polynomial to data.

polyder - Differentiate polynomial.

59
polyint - Integrate polynomial analytically.

conv - Multiply polynomials.

deconv - Divide polynomials.

>>% ARADEĞER HESAPLARI

>>% interp fonksiyonu polinom tekniğini kullanarak, interft fonksiyonu ise, Fourier dönüşümünü
>>% kullanarak ara değer hesabı yapar.

>>% interp1 bir boyutlu, interp2 iki boyutlu, interp3 üç boyutlu interpn n boyutlu aradeğer fonksiyonlarıdır.
>>% interft ise, bir boyutlu aradeğer hesabı yapar. Ara değer hesaplarında veriler, artan ya da azalan
>>% değerlerine göre sıralanmalıdır.

>>% ÖRNEK 20

>>% x ve y değerlerini içeren verilerden hareketle, veri tablosunda olmayan, xi=5.45678 ara değerine karşılık
>>% gelen yi değerini bulalım.

>> x=[1 :. 8 : 10]; y=[10 :.8 :19];

>> y=interp1(x, y, 5.45678) % yi=intp1(x,y,xi) formatında bir boyutlu ara değer fonksiyonu.

y=

14.4568

>>% Şimdi iki boyutlu ara değer hesabı için aşağıdaki tabloyu inceleyelim. Tabloda bir motorun belli
>>% devirlerde ve belli zamanlarda silindir kafası sıcaklık değerleri gösterilmiştir. Buna göre 3.25 saniyedeki
>>% 3500 devir/dakika ya karşılık gelen sıcaklık değerini hesaplayalım.

Motor hızı

(dev/dak) 2000 3000 4000 5000 6000

Zaman (s) Sıcaklık (oC)

0 0 0 0 0 0

1 20 110 176 190 240

2 60 180 220 285 327

3 68 240 349 380 428

4 77 320 450 510 620

5 110 405 503 623 785

60
>> x=[2000 3000 4000 5000 6000]; % Motor hızları.

>> y=[ 0 1 2 3 4 5 ]; % Zaman değerleri.

>> z=[ 0 0 0 0 0 % Sıcaklık değerleri.

20 110 176 190 240

60 180 220 285 327

68 240 349 380 428

77 310 450 510 620

110 405 503 623 785];

>> y=interp2(x,y,z,3500,3.25) % yi=interp2(x,y,z,xi,zi) formatında iki boyutlu ara değer fonksiyonu.

y=

315.8750

61
BÖLÜM IV
>>% GRAFİK İŞLEMLERİ

>>% MATLAB da hemen her türlü grafiği çizdirmek mümkündür. En temel grafik çizdirme fonksiyonu olan
>>% plot fonksiyonunun genel hali: plot(x,y, ' çizgi türü ' ) şeklindedir.

>>% ÖRNEK 1

>>% y = e 4cos x fonksiyonunun grafiğini, π/15 artımla 0 £ x £ 4p aralığında çizdirelim.

>> x=0: pi/15: 4*pi;

>> y=exp(4*cos(x));

>> plot(x,y)

>>% Aynı grafiği her bir veri noktası mavi + olacak şekilde çizdirelim.

>> plot( x, y, 'b+' ) % 'b+' blue + çizgi türünü ifade eder.

62
>>% Şimdi title ile grafik başlığını, xlabel ve ylabel ile eksen isimlerini ve grid on ile de kılavuz
>>% çizgilerini grafiğe ekleyelim.

>> title('y=exp(4cosx) in grafiği'); % grafik başlığı

>> xlabel('x'); ylabel('y'); % eksen isimleri

>> grid on % kılavuz çizgileri

63
>>% NOT: Çizgi türü kodları aşağıdaki tabloda verilmiştir.

>>% Grafiğe bilgi eklemek için kullanılan komutlar ise şunlardır:

title ('text') grafiğin üst tarafına başlık ekler.


xlabel('text') x-eksenine isim verir.
ylabel('text') y-eksenine isim verir.
grid on klavuz çizgileri ekler.
grid off klavuz çizgilerini kaldırır.
text(x,y,'text') (x, y) kesişim noktasını adlandırır.
gtext('text') girdiğiniz yazı mouse ile tıkladığınız yerde belirir.

>>% Bu komutlar, plot komutundan sonra istenilen sırayla kullanılabilir.

>>% Grafiğe bilgi ekleme işlemlerini ve çizgi türlerini grafiği çizdirdikten sonra grafik ekranından, yani
>>% figür penceresinden yapmak da mümkündür. Ayrıca bütün diğer grafik işelemlerini de ( bakış açısını
>>% değiştirme, renk haritası ekleme, eğri uydurma, data analizi vs. gibi) figür penceresinden kolayca
>>% yaptırabiliriz.

>>% Çoklu grafikler çizdirmemiz gerektiğinde ise, en basit olarak plot fonksiyonunu veya hold on, hold off
>>% fonksiyonlarını kullanılabiliriz. Örneğin, y1=sinx, y2=cosx eğrilerini aynı grafik üzerinde iki farklı
>>% yoldan çizdirelim:

>>% 1.Yol: Tek bir plot fonksiyonunda sırasıyla değişkenleri yazarak.

>> x=-2*pi: pi/100: 2*pi;

>> y1=sin(x);

>> y2=cos(x);

>> plot( x, y1, 'r', x, y2, 'g' ) % İki fonksiyon eğrisini de aynı grafikte çizer.

>>% 2.Yol: hold on ve hold off fonksiyonlarını kullanarak. hold on fonksiyonu bir önceki grafiği dondurur ve
>>% aynı düzlemde diğer grafiklerin çizilmesine izin verir. hold off fonksiyonu ile de dondurulan grafikler
>>% tekrar serbest bırakılır.

>> x=-2*pi: pi/100: 2*pi;

>> y1=sin(x);

64
>> plot( x, y1, 'r' ) % 1. grafiği çizer.

>> hold on % Grafiği dondurur.

>> y2=cos(x);

>> plot( x, y2, 'g' ) % 2. grafiği çizer.

>>hold off % Grafikleri tekrar serbest bırakır.

>>% Ayrıca, aynı düzlem üzerinde ve aynı eksen takımını kullanarak (veya kullanmayarak), tek bir grafik
>>% penceresinde birden fazla grafiği grup halinde gösterebiliriz. Bunun için subplot fonksiyonu
>>% kullanılır. subplot komutu bir grafik ekranını bölmeye yarar. Kullanımı subplot(m,n,p) şeklinde olup,
>>% ekranı m tane satır n tane sütundan oluşan p tane grafik ekranı haline getirir. Mesela subplot(2,2,1)
>>% komutu ekranı dörde böler ve bunlardan birincisini aktif hale getirir. Şöyle bir tablo yararlı olabilir:

>>% Şimdi bunu bir örnek üzerinde inceleyelim.

>> x=linspace(-2*pi,2*pi);

>> subplot(2,2,1) % 1. satır 1. grafik

>> plot(x,sin(x))

>> subplot(2,2,2) % 1. satır 2. grafik

>> plot(x,cos(x))

>> subplot(2,2,3) % 2. satır 1. grafik

65
>> plot(x,tan(x))

>> subplot(2,2,4) % 2. satır 2. grafik

>> plot(x,cot(x))

>>% Aşağıda harmonik dalga grafikleri de benzer şekilde subplot komutuyla gösterilmiştir.

>> subplot(3, 1, 1); % 1. satır 1. grafik

>> t=0: 0.01: 1;

>> y=sin(2*pi*2*t);

>> plot(t,y)

>> title('Birinci Harmonik');

>> subplot(3, 1, 2); % 2. satır 2. grafik

>> t=0: 0.01: 1;

>> z=sin(2*pi*10*t);

>> plot(t,z)

>> title('İkinci Harmonik');

>> subplot(3, 1, 3); % 3. satır 3. grafik

>> w=y+z;

66
>> plot(t,w)

>> title('Harmonik Dalgaların Toplamı')

67
>>% İKİ BOYUTLU GRAFİKLER

>>% İki boyutlu (2D) grafik fonksiyonları: plot, loglog, semilogx, semilogy, plotyy, ezplot, fplot dır.

>>% ÖRNEK 2

>>% plot(x,y) x ve y eksenlerini lineer olarak ölçeklendirir ve verilerin grafiğini çizer. (Tek değişkenli
>>% fonksiyonların grafiklerini çizer.)

>>% Burada x’ler bağımsız değişken y’ler ise, bağımlı değişkeni göstermektedir. x ve y nokta sayıları birbirine
>>% eşit olmalıdır.

>> x=[1 2 3 4 5];

>> y=[25 0 20 5 15];

>> plot(x,y)

>> title('Hız-Zaman Grafiği');

>> xlabel('zaman(da)'); ylabel('hız(km/sa)');

>>grid on

>>% ÖRNEK 3

>>% Görüldüğü gibi plot fonksiyonu, x ve y eksenlerindeki değerlerin artım miktarlarının eşit aralıklı olduğu
>>% doğrusal grafikleri çizmekte kullanılır. Eşit eksen artım değerli olmayan logaritmik grafikleri çizmek için
>>% ise loglog(x,y), semilogy(x,y), semilogx(x,y) fonksiyonları kullanılmaktadır. Burada logaritmik grafikler,
>>% eksenler gözönüne alınarak ya tam logaritmik (loglog), ya da yarı logaritmik (semilog) olmak üzere ikiye
>>% ayrılmıştır.

>>% Logaritmik grafikler genel olarak çok büyük veya çok değerli verileri anlaşılabilir bir ölçeğe uyarlar ya da
>>% doğrusal olmayan verilere uygun bir çizim zemini sağlarlar.

68
>>% loglog(x,y): x ve y eksenlerinde 10 tabanlı logaritmik eksen kullanılır ve plot( log10(x), log10(y) )
>>% ile aynı sonucu verir. Her iki eksen de logaritmik ölçeklidir.

>>% semilogy(x,y): y ekseninde 10 tabanlı logaritmik eksen kullanılır ve plot( x, log10(y) ) ile aynı
>>% sonucu verir. x ekseni lineer, y ekseni ise logaritmik ölçeklidir.

>>% semilogx(x,y): x ekseninde 10 tabanlı logaritmik eksen kullanılır ve plot( log10(x), y ) ile aynı
>>% sonucu verir. x ekseni logaritmik, y ekseni ise lineer ölçeklidir.

>>% Bir maddenin tanecik ayrışım eğrisini hem lineer hem de logaritmik ölçekte çizdirelim.

>> n=[3 5 9 17 33 65]';

>> sn=[2.57e-1 6.46e-2 1.51e-2 3.96e-3 9.78e-4 2.45e-4]';

>> plot(n,sn,'r*') % Grafik gösterimi zayıf

69
>>loglog(n,sn,'r*') % Grafik gösterimi daha belirgin

>>% ÖRNEK 4

>>% Bir kondansatörün deşarj süresince kaydedilen, kondansatörün uçları arasındaki gerilim değerleri
>>% aşağıdaki tabloda verilmiştir. Tablo incelendiğinde gerilim değerlerindeki azalma miktarının, zaman
>>% değerlerindeki artma miktarından çok çok fazla olduğu görülür. Bu nedenle grafikte, gerilim eksenini
>>% (y-ekseni) logaritmik olarak göstermek, yani semilogy(x,y) fonksiyonunu kullanmak daha yerinde olur.

Zaman (dk) Gerilim (volt)

6 498

10 162

17 23

25 9.6

32 1.5

>> zaman=[ 6 10 17 25 32 ];

>> gerilim=[ 498 162 23 9.6 1.5 ];

70
>>plot(zaman, gerilim) % x ve y eksenleri lineerdir.

>>semilogy(zaman, gerilim) % y-ekseni logaritmik, x-ekseni lineerdir.

71
>>% ÖRNEK 5

>>% Bazı durumlarda verileri y-ekseninin hem sol hem de sağ tarafında ölçeklemek gerekebilir. Böyle iki tane
>>% y-ekseni olan grafikleri çizdirmek için plotyy fonksiyonu kullanılır. Fonksiyonun genel yazım biçimi
>>% şöyledir: plotyy(x1, y1, x2, y2, 'fun1','fun2') Bu fonksiyon sol y-eksenine fun1(x1,y1) grafiğini,
>>% sağ y- eksenine de fun2(x2,y2) grafini çizecektir.

>>% Örnek 4 deki grafikleri plotyy fonksiyonunuyla iki y-ekseni olan tek bir grafikte çizdirelim.

>> zaman=[ 6 10 17 25 32 ];

>> gerilim=[ 498 162 23 9.6 1.5 ];

>> plotyy(zaman, gerilim, zaman, gerilim,'plot','semilogy')

>>% Şimdi iki ayrı fonksiyon için plotyy yi kullanalım.

>>x=1: .1 :10;

>>y1=exp(-x).*sin(x);

>>y2=exp(x).*cos(x);

>>plotyy(x, y1, x, y2)

72
>>% ÖRNEK 6

>>% İki boyutlu iki değişkenli fonksiyonların grafiklerini, kabataslak bir fikir alabilmek için, ezplot ya da
>>% onunla hemen hemen aynı işleve sahip fplot fonksiyonlarıyla çizdirmek mümkündür. Genel yazım
>>% biçimleri: ezplot( ‘fun’, [xmin, xmax], [ymin, ymax] ) şeklindedir.

>>% y=sinx/1+x2 fonksiyonunun grafiğini çizdirelim.

>> ezplot('sin(x)/1+x^2') %x-ekseninin varsayılan sınırları [ -2*pi, 2*pi ] aralığıdır.

73
>>% ÖRNEK 6

>>% x2+ y2 = 4 denklemi ile tanımlanan eğriyi ezplot fonksiyonu ile çizdirelim.

>> ezplot( 'x^2+y^2=4', [-3, 3], [-3,3] )

>>% ÖRNEK 7

>>% f: { 2cos(t), 2sin(t) : 0 ≤ t ≤ 20 } noktalar kümesiyle t ye bağlı parametrik olarak tanımlanmış grafiği,
>>% ezplot fonksiyonu ile çizdirelim.

>> ezplot( '2*cos(t)' , '2*sin(t)' )

74
>>% ÖRNEK 8

>>% (x,y) = ( r(Ѳ)cos(x),r(Ѳ)sin(y) ), r(Ѳ)=sin(x)/x (cochleoid) ile tanımlanan polar grafiği ezplot fonksiyonu ile
>>% çizdirelim.

>> ezplot( '(sin(t)/t)*cos(t)' , '(sin(t)/t)*sin(t)', [-6*pi, 6*pi] )

75
>>% ÖRNEK 9

>>% fplot fonksiyonu ezplot fonksiyonu ile hemen hemen aynı işlevi görür. fplot ile parametrik ve polar
>>% koordinatlarda grafikler çizilemez ancak fplot fonksiyonu aynı grafik üzerinde birden fazla grafiğin
>>% çizilmesine ve eğrilere çizim sembolleri ve renk eklenmesine olanak tanır.

>>% y=x, y=x2, y=x3, y=x4 grafiklerini fplot fonksiyonu ile çizdirelim.

>> fplot ( '[x, x^2, x^3, x^4]', [-1, 1] ) % Fonksiyonlar vektör elemanları olarak girilmiştir.

>>% ÖRNEK 10

>>% Verileri kutupsal koordinatlarda (polar grafikler için) polar(θ, ρ) fonksiyonuyla çizdirebiliriz. polar(θ, ρ)
>>% fonksiyonu, radyan olarak ρ (rho) değerlerine karşı, θ (theta) açısının kutupsal koordinatlarını kullanarak
>>% çizim yapar.

>>% 2g(1+cos θ) denklemi, θ açısının bir fonksiyonu olarak bir cardioid mikrofonun kazancını gösterir.
>>% Burada g mikrofon kazanç sabiti, θ ise radyan cinsinden, mikrofon ekseni ile ses kaynağı arasındaki
>>% açıdır. g=0.5 için, ses kaynağının yönüne bağlı olarak mikrofon kazancının polar grafiğini çizdirelim.

>> t=0: pi/20: 2*pi;

>> r=2*0.5*(1+cos(t));

>> polar(t, r)

76
>>% ÖRNEK 11

>>% y=I sin2t.cos2t I grafiğini kartezyen ve polar kaoordinatlarda çizdirelim.

>> t=linspace(0,2*pi,200);

>> r=abs(sin(2*t).*cos(2*t));

>> subplot(2,1,1)

>> plot(t,r)

>> subplot(2,1,2)

>> polar(t,r)

77
>>% NOT: İki boyutlu grafikler ile ilgili bilgilere >>help graph2d komutuyla ulaşılabilir.

>> help graph2d

Two dimensional graphs.

Elementary X-Y graphs.

plot - Linear plot.

loglog - Log-log scale plot.

semilogx - Semi-log scale plot.

semilogy - Semi-log scale plot.

polar - Polar coordinate plot.

plotyy - Graphs with y tick labels on the left and right.

Axis control.

axis - Control axis scaling and appearance.

zoom - Zoom in and out on a 2-D plot.

78
grid - Grid lines.

box - Axis box.

rbbox - Rubberband box.

hold - Hold current graph.

axes - Create axes in arbitrary positions.

subplot - Create axes in tiled positions.

Graph annotation.

plotedit - Tools for editing and annotating plots.

title - Graph title.

xlabel - X-axis label.

ylabel - Y-axis label.

texlabel - Produces the TeX format from a character string.

text - Text annotation.

gtext - Place text with mouse.

Hardcopy and printing.

print - Print graph or Simulink system; or save graph to M-file.

printopt - Printer defaults.

orient - Set paper orientation.

See also graph3d, specgraph.

79
>>% ÜÇ BOYUTLU GRAFİKLER

>>% Üç boyutlu (3D) grafikler temel olarak iki boyutlu (2D) grafiklere üçüncü boyut olan z-ekseninin
>>% eklenmesiyle elde edilir. Temel olarak üç boyutlu çizgi, ağ ve yüzey grafiklerini inceleyelim.

>>% ÖRNEK 12

>>% plot3(x,y,z) üç boyutlu uzayda x, y, z elemanlarıyla oluşan noktalardan geçen bir çizgi grafiği oluşturur.
>>% Burada x, y, z nin aynı boyutlu vektörler olması gerekir. Aşağıdaki üç boyutlu çizgi grafikte olduğu gibi.

>> x=[10 20 30 40 ];

>> y=[10 20 30 40 ];

>> z=[0 230 75 600];

>> plot3(x,y,z);

>>title('Üç Boyutlu Bir Doğru Grafiği');

>>xlabel('x-ekseni'); ylabel('y-ekseni'); zlabel('z-ekseni');

>> grid on

80
>>% ÖRNEK 13

>>% Benzer olarak üç boyutlu ilginç bir çizgi grafik olan heliks i plot3 fonksiyonu ile çizdirelim.

>> t=0: pi/50: 10*pi;

>> plot3(sin(t),cos(t),t,'r');

>> title('Heliks Grafiği');

>> xlabel('x-ekseni'); ylabel('y-ekseni'); zlabel('z-ekseni');

>> text(0,0,0,'Orijin');

>> grid on

81
>>% ÖRNEK 14

>>% Üç boyutta iki değişkenli çizgi grafikler için, tıpkı iki boyutta olduğu gibi ezplot fonksiyonu kullanılır.

>>% xyz düzleminde { x(t)=cost, y(t)=sint, z(t)=sin(5t) } ile tanımlanan çizgisel parametrik eğriyi –π ≤ t ≤ π
>>% aralığında ezplot3 fonksiyonu ile çizdirelim.

>> ezplot3 ( 'cos(t)', 'sin(t)', 'sin(5*t)', [-pi pi] )

>>% ÖRNEK 15

>>% z=x2+y2 gibi üç boyutlu fonksiyonların yüzeyini gösterecek, üç boyutlu ağ grafik çizmek için, meshgrid ve
>>% mesh fonksiyonları kullanılır. Önce meshgrid fonksiyonu ile xy-düzleminde noktaların bir ızgarası
>>% oluşturulur ve sonra mesh fonksiyonu ile yüzey çizdirilir.

>>% z=x2+y2 üç boyutlu parabolünün ağ grafiğini, meshgrid ve mesh fonksiyonlarını kullanarak çizdirelim.

>>% Aynı grafik daha pratik olarak, ezmesh


>> x_nok=[-10: 1: 10]; >>% fonksiyonuyla şöyle de çizdirilebilir:

>> y_nok=[-10: 5: 10]; >> ezmesh( 'x.^2+y.^2', [-10: 1: 10], [-10: 5: 10] )

>> [x,y]=meshgrid(x_nok, y_nok); % Izgara için oluşturulan matris.

>> z=x.^2+y.^2 ; % Matris elemanları olduğu için elemanter üs alma yapıldı.

>> mesh(x,y,z);

>>title('z=x^2+y^2 Parabolünün Ağ Grafiği');

>> xlabel('x-ekseni'); ylabel('y-ekseni'); zlabel('z-ekseni')

82
>>% Ortaya çıkan üç boyutlu ağ, x-ekseni yönünde 4 birim, y-ekseni yönünde 1 birim uzunluktaki
>>% dikdörtgenlerden oluşan bir paraboldür.

>>% NOT: meshgrid fonksiyonu ile oluşturulan ızgaranın matris yapısı, aşağıdaki örnekte incelenebilir.

>> x=[ 1 2 3 ];

>> y=[-1 -2 -3 ];

>> [X,Y]=meshgrid(x,y)

X=

1 2 3

1 2 3

1 2 3

Y=

-1 -1 -1

-2 -2 -2

-3 -3 -3

83
>>% ÖRNEK 16

>>% z=5cosx.siny fonksiyonunun grafiğini, - π ile +π aralığında, π/50 artımlı olarak üç boyutlu düzlemde
>>% mesh ve meshgrid fonksiyonlarıyla çizdirelim.

>> [x,y]=meshgrid( -pi: pi/50: pi, -pi: pi/50: pi ); >>% Aynı grafik daha pratik olarak, ezmesh
>>% fonksiyonuyla şöyle de çizdirilebilir:
>> z=5*cos(x).*sin(y);
>> ezmesh('5*cos(x).*sin(y)',[-pi: pi/50: pi],[-pi: pi/50: pi])
>> mesh(z) % mesh(x,y,z) ile aynıdır.

>> title('z=5cosx.siny Fonksiyonunun Ağ Grafiği');

>> xlabel('x-ekseni'); ylabel('y-ekseni'); zlabel('z-ekseni');

>>% ÖRNEK 17

>>% Ağ grafiklerinin içi renkle doldurulduğunda yüzey grafikleri elde edilir. Dolayısıyla üç boyutlu ağ
>>% grafiklerini üç boyutlu yüzey grafiği olarak çizdirmek mümkündür. Bunun için surf(x,y,z) fonksiyonu
>>% kullanılır.

>>% Daha önce ağ grafiği olarak çizdirdiğimiz, z=x2+y2 üç boyutlu parabolünün yüzey grafiğini, surf(x,y,z)
>>% fonksiyonu ile çizdirelim.

84
>>% Aynı grafik daha pratik olarak, ezsurf
>> x_nok=[-10: 1: 10];
>>% fonksiyonuyla şöyle de çizdirilebilir:
>> y_nok=[-10: 5: 10];
>> ezsurf( 'x.^2+y.^2 ', [-10: 1: 10], [-10: 5: 10] )

>> [x,y]=meshgrid(x_nok, y_nok); % Izgara için oluşturulan matris.

>> z=x.^2+y.^2 ; % Matris elemanları olduğu için elemanter üs alma yapıldı.

>> surf(x,y,z);

>>title('z=x^2+y^2 Parabolünün Yüzey Grafiği');

>> xlabel('x-ekseni'); ylabel('y-ekseni'); zlabel('z-ekseni')

>>% ÖRNEK 18
–(x2+y2)
>>% f(x,y)=xye fonksiyonunun -2 ≤x ≤2 ve 0≤ y≤ 2 aralıklarında üç boyutlu yüzey grafiğini surf
>>% fonksiyonu ile çizdirelim.

85
>> x=(-2:.2:2);
>>% Aynı grafik daha pratik olarak, ezmesh
>> y=(-2:.2:2); >>% fonksiyonuyla şöyle de çizdirilebilir:

>> Z=X.*Y.*exp(-(X.^2+Y.^2)); >> ezmesh( 'X.*Y.*exp(-(X.^2+Y.^2))', [-2:.2:2], [-2:.2:2] )

>> surf(X,Y,Z);

>> xlabel('x-ekseni'); ylabel('y-ekseni'); zlabel('z-ekseni')

>>% ÖRNEK 19

>>% x2 + y2 + z2 = 9 küresinin üst yarısının grafiğini ezsurf fonksiyonu ile çizdirelim.

>>% Denklem düzenlenirse, z=sqrt(9- x2 - y2) olur.

86
>> ezsurf('sqrt(9- x^2 - y^2)', [-4 4], [-4 4] )

>>% NOT: Yukarıdaki örneklerde de görüldüğü gibi çizdirilen grafiklere figür ekranından renk haritası
>>% eklemek ve figür ekranında grafiğin bakış açısını değiştirmek mümkündür.

>>% NOT: Hem iki boyutta hem de üç boyutta, grafikleri doğrudan çizdirmek için plot, mesh, surf gibi grafik
>>% çizdirme fonksiyonlarının başına –ez ekinin getirildiği ezplot, ezplot3, ezmesh, ezsurf fonksiyonları
>>% kullanılabilir.

>>% ÖRNEK 20

>>% Bazen z=f(x,y) şeklindeki iki değişkenli fonksiyonlarda, düzey eğrilerini de çizdirmek gerekebilir. Bunun
>>% için ağ grafiklerde ezmeshc, yüzey grafiklerde ezsurfc fonksiyonları kullanılır. Sadece düzey eğrilerini
>>% göstermek istediğimizde ise, ezcontour (ağ gösterimi için) ya da ezcontourf (yüzey gösterimi için)
>>% fonksiyonları yeterli olacaktır.

87
>>% z=y2 – x2 fonksiyonunu, düzey eğrileriyle birlikte ezmesc fonksiyonuyla çizdirelim. Sonra hemen altında
>>% ezcontour fonksiyonuyla sadece düzey eğrilerini gösterelim.

>> subplot(2,1,1)

>> ezmeshc( 'y^2-x^2', [-3 3], [-3 3] )

>> subplot(2,1,2)

>> ezcontour( 'y^2-x^2', [-3 3], [-3 3] )

88
>>% NOT: Grafik çizimlerinde xlabel, ylabel ve title adlandırmalarında ya da grafik üzerinde legend, text
>>% veya gtext kullanımlarında, hatta eksen centiklerinin adlandırılmasında a, b, w, l gibi Yunan
>>% karakterlerini ya da km2, £ , ¥ , ® gibi sembolleri eklemek gerekebilir. Bunların MATLAB kod
>>% sistemindeki kullanımları aşağıdaki tabloda verilmiştir. MATLAB de bu işlemler yazı dizgeleri
>>% (text strings) olarak adlandırılır.

Yunan Karakterleri ve Semboller

Krakter Sembol Krakter Sembol Krakter Symbol

\alpha \upsilon \sim ~

\beta \phi \leq

\gamma \chi \infty

\delta \psi \clubsuit

\epsilon \omega \diamondsuit

\zeta \Gamma \heartsuit

\eta \Delta \spadesuit

\theta \Theta \leftrightarrow

\vartheta \Lambda \leftarrow

\iota \Xi \uparrow

\kappa \Pi \rightarrow

\lambda \Sigma \downarrow

\mu µ \Upsilon \circ º

\nu \Phi \pm ±

\xi \Psi \geq

\pi \Omega \propto

\rho \forall \partial

89
\sigma \exists \bullet •

\varsigma \ni \div ÷

\tau \cong \neq

\equiv \approx \aleph

\Im \Re \wp

\otimes \oplus \oslash

\cap \cup \supseteq

\supset \subseteq \subset

\int \in \o

\rfloor \lceil \nabla

\lfloor \cdot · \ldots ...

\perp \neg ¬ \prime ´

\wedge \times x \0

\rceil \surd \mid |

\vee \varpi \copyright ©

\langle \rangle

90
>>% Tablo da verilen tüm karakterler, ayrıca aşağıdaki özel değiştiriciler (stream modifier) ile kullanılabilir:

v \bf{} - Koyu yazıtipi (bold font ).

v \it{} - İtalik yazıtipi (italics font).

v \sl{} - yazıtipi (oblique font, nadiren kullanılır).

v \rm - Normal yazıtipine dönüş.

v \füntname{fontname} – Kullanılacak yazıtipi (font) ailesinin adını bülirler.

v \fontsize{fontsize} – FontUnits olarak yani punto olarak yazıtipi boyutunu belirler.

v _{...}- Parantez içindeki karakterler ya da yazı altindis olarak gösterilir.

v ^{...}- Parantez içindeki karakterler ya da yazı üstindis olarak gösterilir.

>>% Genel kullanımda tabloda verilen yunan karakterlerini ve sembollerini üç şekilde ifade edebiliriz:

>>% Eşitlik : b=3 için ‘\beta=3’ (equal)


>>% Üst indis : b3 için ‘\beta^3’ (subscript)
>>% Alt indis : b3 için ‘\beta_3’ (superscript)

>>% Ayrıca bu gösterim mantığı m3 veya K12 gibi normal yazı işlemleri için de geçerlidir.

>>% Alt indis veya üst indislerde birden fazla karakter kullanılacak ise bu durumda { } şeklindeki süslü

>>% parantez kullanılmalıdır. Örneğin;

>>% x ekseninde "-co1 ışıldamasına göre yarılanma değerleri " görünmesini

>>% istersek, >> xlabel ('-\gamma{_0^1} ışıldamasına göre yarılanma değerleri ') komutu kullanılır.

>>% y ekseninde "Hız katsayısı: Ko=10-12 " görünmesini istersek, >> ylabel ('Hız katsayısı: K_o=10^{-12}')

>>% komutu kullanılır.

91
>>% NOT: Üç boyutlu grafiklerle ilgili bilgilere >>help graph3d komutuyla ulaşılabilir.

>> help graph3d

Three dimensional graphs.

Elementary 3-D plots.

plot3 - Plot lines and points in 3-D space.

mesh - 3-D mesh surface.

surf - 3-D colored surface.

fill3 - Filled 3-D polygons.

Color control.

colormap - Color look-up table.

caxis - Pseudocolor axis scaling.

shading - Color shading mode.

hidden - Mesh hidden line removal mode.

brighten - Brighten or darken color map.

colordef - Set color defaults.

graymon - Set graphics defaults for gray-scale monitors.

Lighting.

surfl - 3-D shaded surface with lighting.

lighting - Lighting mode.

material - Material reflectance mode.

specular - Specular reflectance.

diffuse - Diffuse reflectance.

surfnorm - Surface normals.

92
Color maps.

hsv - Hue-saturation-value color map.

hot - Black-red-yellow-white color map.

gray - Linear gray-scale color map.

bone - Gray-scale with tinge of blue color map.

copper - Linear copper-tone color map.

pink - Pastel shades of pink color map.

white - All white color map.

flag - Alternating red, white, blue, and black color map.

lines - Color map with the line colors.

colorcube - Enhanced color-cube color map.

vga - Windows colormap for 16 colors.

jet - Variant of HSV.

prism - Prism color map.

cool - Shades of cyan and magenta color map.

autumn - Shades of red and yellow color map.

spring - Shades of magenta and yellow color map.

winter - Shades of blue and green color map.

summer - Shades of green and yellow color map.

Transparency.

alpha - Transparency (alpha) mode.

alphamap - Transparency (alpha) look-up table.

alim - Transparency (alpha) scaling

Axis control.

axis - Control axis scaling and appearance.

zoom - Zoom in and out on a 2-D plot.

93
grid - Grid lines.

box - Axis box.

hold - Hold current graph.

axes - Create axes in arbitrary positions.

subplot - Create axes in tiled positions.

daspect - Data aspect ratio.

pbaspect - Plot box aspect ratio.

xlim - X limits.

ylim - Y limits.

zlim - Z limits.

Viewpoint control.

view - 3-D graph viewpoint specification.

viewmtx - View transformation matrix.

rotate3d - Interactively rotate view of 3-D plot.

Camera control.

campos - Camera position.

camtarget - Camera target.

camva - Camera view angle.

camup - Camera up vector.

camproj - Camera projection.

High level camera control.

camorbit - Orbit camera.

campan - Pan camera.

camdolly - Dolly camera.

camzoom - Zoom camera.

94
camroll - Roll camera.

camlookat - Move camera and target to view specified objects.

cameratoolbar - Interactively manipulate camera.

High level light control.

camlight - Creates or sets position of a light.

lightangle - Spherical position of a light.

Graph annotation.

title - Graph title.

xlabel - X-axis label.

ylabel - Y-axis label.

zlabel - Z-axis label.

text - Text annotation.

gtext - Mouse placement of text.

plotedit - Experimental graph editing and annotation tools.

Hardcopy and printing.

print - Print graph or Simulink system; or save graph to M-file.

printopt - Printer defaults.

orient - Set paper orientation.

vrml - Save graphics to VRML 2.0 file.

See also graph2d, specgraph.

95
>>% NOT: MATLAB deki grafik çeşitleri aşağıda özet olarak gösterilmiştir.

96
BÖLÜM V
>>% DENKLEMLER-DENKLEM SİSTEMLERİNİN ÇÖZÜMÜ

>>% CEBİRSEL DENKLEMLER

>>% Cebirsel denklemlerin sembolik çözümünü solve fonksiyonu verir; solve fonksiyonunun genel hali:

>>% syms x y z …

>>% [x,y,z,…]=solve(denk1,denk2,denk3,…,x,y,z,…) şeklindedir.

>>% ÖRNEK 1

>>% x2-x-6=0 denkleminin çözümünü bulalım.

>> syms x

>> solve(x^2-x-6,x)

ans =

-2

>>% Çözüm kümesi, Ç={3,2} olarak bulunur.

>>% Benzer olarak, x12-3x10+x7-120x2+67=0 denkleminin köklerini bulalım.

>> syms x

>> solve(x^12-3*x^10+x^7-120*x^2+67,x)

ans =

.74720356628315882129201933741592

1.8739449545046381201418339113910

1.3799412975372923656562133279358+.79883587021658777179945832073383*i

.50217039300299764820601368779329+1.4261986019933698713398249020469*i

-.51246479578529006009603072834460+1.4418562120833487079385352327090*i

-1.3468332163973951506034599502807+.80004143504146966877333266198056*i

-.74577493701228339964228021354946

-1.9210009404907231481170457094651

-1.3468332163973951506034599502807-.80004143504146966877333266198056*i

97
-.51246479578529006009603072834460-1.4418562120833487079385352327090*i

.50217039300299764820601368779329-1.4261986019933698713398249020469*i

1.3799412975372923656562133279358-.79883587021658777179945832073383*i

>> double(ans) % double(ans) fonksiyonu, elde edilen sonucu dört haneli hale getirir.

ans =

0.7472

1.8739

1.3799 + 0.7988i

0.5022 + 1.4262i

-0.5125 + 1.4419i

-1.3468 + 0.8000i

-0.7458

-1.9210

-1.3468 - 0.8000i

-0.5125 - 1.4419i

0.5022 - 1.4262i

1.3799 - 0.7988i

>>% ÖRNEK 2

>>% x+2y=1

>>% x-y=2

>>% denklem sisteminin çözüm kümesini bulalım.

>> syms x y

>> [x,y]=solve(x+2*y-1,x-y-2,x,y) % Denklemler sıfıra eşitlenerek işlem yapıldı.

x=

5/3

y=

-1/3

98
>>% ÖRNEK 3

>>% x2+xy+y=3

>>% x2-4x+3=0

>>% denklem sisteminin çözüm kümesini bulalım.

>> syms x y >>% ya da aynı sonuç aşağıdaki gösterimle de bulunabilir

>> [x,y]=solve(x^2+x*y+y-3,x^2-4*x+3,x,y) >> [x,y]=solve('x^2+x*y+y=3','x^2-4*x+3=0','x','y')

x= x=

1 1

3 3

y= y=

1 1

-3/2 -3/2

>>% Yani çözüm kümesi, Ç={(1,1),(3,-3/2)} şeklindedir.

>>% ÖRNEK 4

>>% sin(x+y)-ex y=0

>>% x-y=2

>>% denklem sisteminin çözüm kümesini bulalım.

>> syms x y

>> [x,y]=solve(sin(x+y)-exp(x)*y,x-y-2,x,y)

x=

2.0992000712861186211615062078174

y=

.992000712861186211615062078174e-1

99
>>% ÖRNEK 5

>>% tx+zy-1=0

>>% 2tx-3zy+2=0

>>% denklem sistemde x ve y parametre olmak üzere çözüm kümesini t ve z ye göre bulalım.

>> syms x y t z

>> [t,z]=solve(t*x+z*y-1,2*t*x-3*z*y+2,t,z)

t=

1/5/x

z=

4/5/y

>>% Yani, Ç={1/5x , 4/5y} olacaktır. Gösterimden emin olmak için pretty fonksiyonu ile kontrol edilebilir.

>>% ÖRNEK 6

>>% fzero: Fonksiyon fonksiyonu; tek değişkenli bir fonksiyonun sıfırını hesaplar.

>>% cosx fonksiyonunun 0 ile π arasındaki kökünü bulalım, yani cosx=0 denklemini çözelim.

>> fzero( 'cos(x)', [0 pi] )

ans =

1.5708

>>% Benzer olarak 2eX - 5=0 denkleminin çözümünü, başlama değerini 1 alarak bulalım.

>> fzero( '2*exp(x)-5' , 1 )

ans =

0.9163

>>% NOT: MATLAB de ileri düzey nümerik analiz ve matematiksel işlemler için fonksiyon fonksiyonları
>>% kullanılır. Ayrıntılı bilgi için >> help funfun komutu kullanılabilir.

>>% DİFERANSİYEL DENKLEMLER

>>% Doğrusal diferansiyel denklemlerin analitik çözümü mümkündür. Bu amaçla,

>>% adi diferansiyel denklemlerin simgesel çözümü için dsolve fonksiyonu kullanılır.

>>% dsolve fonksiyonunun genel formatı: dsolve('denk1','denk2',…,'şart1','şart2',…,'v',…) şeklindedir.

>>% D harfi v bağımsız değişkenine göre türevi (yani d/dt yi) gösterir.

>>% Örneğin, D3y, y(x) ya da y(t) nin 3. türevini ifade eder. Varsayılan bağımsız değişken t dir.

100
>>% ÖRNEK 7

dy
>>% = 1 + y 2 diferansiyel denkleminin çözümünü bulalım.
dt

>>dsolve('Dy=1+y^2','t')

ans =

tan(t+C1)

>>% ÖRNEK 8

d2y
>>% 2
= - a 2 y , y(0)=1, y’(π/a)=0 diferansiyel denkleminin çözümünü bulalım.
dt

>> dsolve('D2y=-a^2*y','y(0)=1','Dy(pi/a)=0', 't')

ans =

cos(a*t)

>>% ÖRNEK 9

d2y dy
>>% 2
+ 3 + y = 0 diferansiyel denkleminin çözümünü bulalım.
dt dt

>> dsolve('D2y+3*Dy+y=0', 't')

ans =

C1*exp(1/2*(5^(1/2)-3)*t)+C2*exp(-1/2*(5^(1/2)+3)*t)

>>% ÖRNEK 10

>>% y(1)=0 şartı altında xy’+y=2e2X birinci dereceden diferansiyel denklemin çözümünü bulalım.

>> dsolve('x*Dy+y=2*exp(2*x)','y(1)=0','x')

ans =

(exp(2*x)-exp(2))/x

>> pretty(ans)

exp(2 x) - exp(2)

--------------------------

101
>>% ÖRNEK 11

>>% y(0)=-1/2 ve y’(0)=4 koşulları altında y”-4y=4x2

>>% ikinci dereceden diferansiyel denklemin çözümünü bulalım.

>> dsolve('D2y-4*y=4*x^2','y(0)=-1/2','Dy(0)=4','x')

ans =

exp(2*x)-exp(-2*x)-1/2-x^2

>>% ÖRNEK 12

>>% y(0)=0, y’(0)=0 koşulları altında y”+6y’+13y=10sin5t

>>% ikinci dereceden diferansiyel denklemin çözümünü bulalım.

>> dsolve('D2y+6*Dy+13*y=10*sin(5*t)','y(0)=0','Dy(0)=0','t')

ans =

125/174*exp(-3*t)*sin(2*t)+25/87*exp(-3*t)*cos(2*t)-10/87*sin(5*t)-25/87*cos(5*t)

>> pretty(ans)

125 25 10 25

--- exp(-3 t) sin(2 t) + --- exp(-3 t) cos(2 t) - --- sin(5 t) - --- cos(5 t)

174 87 87 87

>>% ÖRNEK 13

>>% y’(0)=0 koşulu altında (y’)2 + y2 =1 diferansiyel denklemin çözümünü bulalım.

>> dsolve('(Dy)^2+y^2=1','Dy(0)=0','t')

ans =

-1

cos(t)

-cos(t)

>>% ÖRNEK 14

d y d x
>>% y(0)=0 ve x(0)=1 koşulları altında = 3 y + 4x , = -4 y + 3 x
dt dt
102
>>% diferansiyel denklem sisteminin çözümünü bulalım.

>> [x,y]=dsolve('Dy=3*y+4*x','Dx=-4*y+3*x','y(0)=0','x(0)=1','t')

x=

exp(3*t)*cos(4*t)

y=

exp(3*t)*sin(4*t)

>>% Analitik çözümleri bulunmayan diferansiyel denklemlerin ise sayısal çözümleri mümkündür.

>>% Benzer biçimde, analitik çözümleri bulunan yüksek dereceden çok sayıda diferansiyel denklem

>>% takımının da sayısal çözümleri daha pratik olmaktadır. MATLAB de ode (ordinary differential equations)

>>% çözüm fonksiyonları, analitik çözüm içersin ya da içermesin bütün diferansiyel denklemlerin

>>% çözümünde kullanılabilir. ode fonksiyonları sayısal integrasyon yolu ile çözümü sağlar (benzetim).

>>% Bu fonksiyonlar başlangıç koşulları ile bir başlangıç zamanından başlayıp, zaman aralığı boyunca adım

>>% adım ilerleyerek her bir zaman adımında bir çözüm hesaplar. Eğer bir zaman adımında elde edilen

>>% çözüm, fonksiyonun hata tolerans ölçütünü karşılarsa bu başarılı bir adım sayılır; karşılamazsa fonksiyon

>>% adım boyunu kısaltarak tekrar deneme yapar.

>>% MATLAB de değişik yöntemler kullanan “ ode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb ”

>>% gibi çok sayıda ode çözücü vardır. Şimdi Dormand-Prince çiftini kullanan ve belirgin Runge-Kutta (4,5)

>>% yöntemine dayanan ode45 fonksiyonu ile diferansiyel denklem çözücülerinin genel formatını

>>% inceleyelim:

>>% [T,Y]=ode45(odefun,Tspan,Y0) dır.

>>% Burada [T,Y], y’=f(t,y) ye karşılık gelen bir sütun vektörü üretir.

>>% odefun, m-dosyası şeklinde tanımlanmış difreransiyel denklemlerin sağ tarafını ifade eder.

>>% Tspan, [T0 Tson] biçiminde tanımlanan integral etme zaman değerleri anlamına gelir.

>>% y0, başlangıç zamanı, T0 da başlangıç koşulları değerini içeren sütun vektörünü ifade eder.

>>% ÖRNEK 15

d2y dy
>>% Literatürde sıkça karşımıza çıkan, 2
+ m ( y 2 - 1) + y = 0
dt dt
>>% Van Der Pol denkleminin sayısal çözümünü, ode45 fonksiyonunu kullanarak bulalım.

103
>>% Önce denklemi yeniden düzenleyerek 1. dereceden diferansiyel denklem halinde ifade etmemiz

d2y dy
>>% gerekir. 2
+ m ( y 2 - 1) + y = 0 ise, y’’=F(t,y,y’) = m y’(1-y2) – y dir.
dt dt
>>% Burada y1 = y ve y2 = y& biçiminde yeni değişkenler tanımlanırsa, denklemimizin son hali,

y&1 = y2

y& 2 = m (1- y12) y2 - y1 olur.

>>% Şimdi, örneğin m = 2 için y1 ve y2 nin geçerli değerlerine dönderecek bir m-dosyasını yazıp vdpmu.m
>>% olarak kaydedelim. (Bkz: Bölüm VI)

function dy = vdpmu(t,y);

mu=2;

dy=[y(2); mu*(1-y(1)^2)*y(2)-y(1)];

>>% vdpmu.m olarak kaydedilen bu dosya artık komut satırından çağırılabilecektir.

>>% Burada seçeceğimiz y(1)=1, y(2)=0 başlangıç koşulları altında ve [0 30] zaman aralığında çözüm,

>>tspan=[0 30];

>>y0=[1;0];

>> [t,y]=ode45('vdpmu',tspan,y0)

t=

0.0001

0.0001

0.0002

0.0002

29.6381

29.7286

29.8190

29.9095

30.0000

104
y=

1.0000 0

1.0000 -0.0001

1.0000 -0.0001

1.0000 -0.0002

1.0000 -0.0002

… …

1.7776 -0.3800

1.7426 -0.3926

1.7065 -0.4060

1.6691 -0.4205

1.6304 -0.4363

>>% t sütun vektörü t çözümün zaman noktası değerlerini ifade eder. Bu zaman değerleri integral almada

>>% kullanılan zaman adımları (gerektiğinde bu da ayarlanabilir) olmayıp, grafik için belirlenen uygun

>>% adımlardır. y matrisinde ise, 1. sütun y(:,1) biçiminde t zaman noktalarında çözümün kendisi; 2. sütun

>>% y(:,2) biçiminde t zaman noktalarında çözümün 1. türevidir.

>> plot(t,y(:,1),'o')

105
>> NOT: Yukarıdaki örnekte de görüldüğü gibi yüksek dereceden bir diferansiyel denklemin sayısal çözümü 3

>> adımda gerçekleşmektedir: 1- Verilen denklem 1. dereceden diferansiyel denklem takımı olacak şekilde

>> düzenlenir. 2- Hazırlanan 1. dereceden sistem bir m-dosyasında kodlanır. 3-Uygun ode fonksiyonu ile

>> çözüme gidilir; sonuçlar yorumlanır.

>>% ÖRNEK 16

>>% y(1)=1, y(2)=0 başlangıç koşulları altında, [0 3000] zaman aralığında m = 1000 için van der Pol

>>% denklemini çözelim. ode45 burada yetersiz kalacaktır, yerine ode15s kullanılmalıdır.

>>% 1-) 1. dereceden diferansiyel denklem takımına dönüştürelim.

d2y dy
>>% 2
+ m ( y 2 - 1) + y = 0 ise, y’’=F(t,y,y’) = m y’(1-y2) – y dir.
dt dt
>>% Burada y1 = y ve y2 = y& biçiminde yeni değişkenler tanımlanırsa, denklemimizin son hali,

y&1 = y2

y& 2 = m (1- y12) y2 - y1 olur.

>>% 2-) 1. dereceden diferansiyel denklem sistemini bir m-dosyasında saklayalım.

function dy = vdpmu(t,y);

mu=1000;

dy=[y(2); mu*(1-y(1)^2)*y(2)-y(1)];

>>% 3-) ode15s fonksiyonu ile çözümü bulup, grafiğini çizdirelim.

>> [t,y]=ode15s('vdpmu',[0 3000],[1;0])

t=

1.0e+003 *

0.0000

0.0000

0.0000

2.7982

106
2.8220

2.8458

2.8696

3.0000

y=

1.0e+003 *

0.0010 0

0.0010 -0.0000

0.0010 -0.0000

0.0010 -0.0000

… …

0.0020 -0.0000

0.0020 -0.0000

0.0019 -0.0000

0.0019 -0.0000

0.0018 -0.0000

>> plot(t,y(:,1),'o')

107
>>% ÖRNEK 17

>>% y’’’ - 3y’’ - y’y = 0 biçiminde verilen bir diferansiyel denklemde, başlangıç koşulları y(0)=0, y’(0)=1,

>>% y’’(0)=-1 olarak tanımlanmıştır. Denklemin çözümünü bulalım.

>>% y1=y, y2=y’, y3=y’’ değişken değişimi yapılırsa,

>>% y1’= y2

>>% y2’= y3

>>% y3’ = 3y3 + y2y1 olur.

>>% 1.dereceden denklem sisteminin m- dosyası,

function dy=diffonk(t,y);

dy=[y(2);y(3);3*y(3)+y(2)*y(1)];

>>% [0 1] aralığında çözüm,

>> [t,y]=ode45('diffonk',[0 1],[0; 1; -1])

t=

0.0001

0.0001

0.0002

0.0002

0.9313

0.9485

0.9657

0.9828

1.0000

108
y=

0 1.0000 -1.0000

0.0001 0.9999 -1.0002

0.0001 0.9999 -1.0003

0.0002 0.9998 -1.0005

0.0002 0.9998 -1.0006

… … …

-0.4417 -4.0297 -15.9915

-0.5132 -4.3110 -16.8015

-0.5897 -4.6066 -17.6459

-0.6714 -4.9170 -18.5255

-0.7586 -5.2427 -19.4404

>> plot(t,y(:,1),t,y(:,2),'*',t,y(:,3),'o') % y(:,1) çözüm, y(:,2) çözümün 1.türevi, y(:,3) çözümün 2.türevidir.

109
>>% ÖRNEK 18

>>% y’ = 2cos2 (y) diferansiyel denklemini ode23 fonksiyonunu kullanarak çözelim.

function dy= diffonk(x,y);


dy= 2*x*(cos(y))^2;

>> [x,y]=ode23('diffonk',0,2,pi/4)

Warning: Obsolete syntax. Use ode23(fun,tspan,y0,...) instead.

> In funfun\private\odearguments at 41

In ode23 at 172

x=

0.2000

0.4000

0.6000

0.8000

1.0000

1.2000

1.4000

1.6000

1.8000

2.0000

y=

0.7854

0.8050

0.8593

0.9367

1.0232

1.1071

1.1818

110
1.2451

1.2970

1.3393

1.3735

>> plot(x,y(:,1))

>>% ÖRNEK 19

>>% y1’= y2y3, y1(0)=0

>>% Y2’= - y1y3, y1(0)=1

>>% Y3’= -0.51y1y2, y1(0)=1

>>% diferansiyel denklemini çözelim.

111
function dy=rig(t,y)

dy=[y(2)*y(3);-y(1)*y(3);-0.51*y(1)*y(2)];

>> [t,y]=ode45('rig',[0 12],[0; 1; 1])

t=
0
0.0001
0.0001
0.0002
0.0002

11.4847
11.6136
11.7424
11.8712
12.0000

y=

0 1.0000 1.0000

0.0001 1.0000 1.0000

0.0001 1.0000 1.0000

0.0002 1.0000 1.0000

0.0002 1.0000 1.0000

… … …

-0.2936 -0.9540 0.9763

-0.4098 -0.9102 0.9548

-0.5169 -0.8539 0.9279

-0.6135 -0.7874 0.8974

-0.6987 -0.7128 0.8650

112
>> plot(t,y(:,1),'-',t,y(:,2),'-.',t,y(:,3),'.')

>>% ÖRNEK 20

>>% (Örnek 12 de analitik olarak çözdüğümüz) y(0)=0, y’(0)=0 başlangıç koşulları altında

>>% y”+6y’+13y=10sin5t ikinci dereceden diferansiyel denklemin sayısal çözümünü bulalım.

>>% y1=y, y2=y’ değişken değişimi yapıldığında,

>>% y1’= y2

>>% y2’= -6y2 - 13y1 + 10sin5t olur.

>>% 1.dereceden denklem sisteminin m- dosyası,

function dy=diffonk(t,y);

dy=[y(2);-6*y(2)-13*y(1)+10*sin(5*t)];

113
>> [t,y]=ode45('diffonk',[0 1],[0 ; 0])

t=

0.0192

0.0383

0.0575

0.0767

0.9534

0.9650

0.9767

0.9883

1.0000

y=

0 0

0.0001 0.0088

0.0004 0.0339

0.0014 0.0732

0.0033 0.1244

… …

0.1325 -1.6244

0.1135 -1.6448

0.0942 -1.6603

0.0748 -1.6708

0.0553 -1.6763

114
>> plot(t,y(:,1))

115
BÖLÜM VI
MATLAB de PROGRAMLAMA

Daha önceki bölümlerde komutlarımızı interaktif modda, yani komut satırında yazıyor ve işletiyorduk (run).
Programlama mantığı çerçevesinde artık kodlarımızı bir dosyaya yazıp bu dosya üzerinden çalıştıracağız. Bu
dosyalar, m dosyaları (m-files) olarak adlandırılır ve genel olarak *.m şeklinde gösterilir. m kelimesi MATLAB
ın ilk harfinden gelir. Tıpkı C++ dilindeki .c gibi.

M-dosyalarının iki türü vardır:

1. Düzyazı (script) m dosyaları: Bir dizi MATLAB deyimini otomatik olarak icra eder. Böylece her
seferinde klavyedan komutları tekrar tekrar girmeye gerek kalmaz. Örnek,

% r yarıçapı ile verilen bir kürenin alan ve hacmini bulur.


r=10,
s=4*pi*r^2,
v=4/3*pi*r^3,

r =

10

s =

1.256637061435917e+003

v =

4.188790204786391e+003

Farklı r yarıçap değerleri için alan ve hacimler kolayca hesaplanabilir.

2. Fonksiyon (function) m dosyaları: Giriş olarak argümanlar kabul eder ve çıkış olarak bu argümanlara
karşılık gelen çözümü üretir. Fonksiyonların genel yazım formatı:

function [out1,out2,... ,outN] = fonksiyon_adı (in1,in2,...,inM)

Şeklindedir. Bu format, yani fonksiyon tanım satırı, m-dosyasının ilk satırında olmalıdır. Fonksiyon,
fonksiyon_adı ile çağrılır ve fonksiyon_adı.m olarak saklanır. (in1,in2,...,inM) giriş argümanlarını,
(out1,out2,... ,outN) ise çıkış argümanlarını gösterir. M ve N sıfır veya herhangi bir pozitif tamsayı olabilir.

Örnek olarak, iki sayının karelerinin ortalamasını alan hesapla(a,b) fonksiyonunu yazalım.

%İstenen iki sayının karelerinin ortalamasını alır.

function y=hesapla(a,b)

y=(a^2+b^2)/2;

hesapla.m dosya adı ile varsayılan olarak work klasörüne kaydettiğimiz m dosyamız artık kullanıma hazırdır.
Komut satırında, örneğin hesapla(2,3) yazıp, enter tuşuna basarsak sonuç aşağıdaki gibi ekrana gelir:

116
>> hesapla(2,3)

ans =

6.5000

M-Dosyalarında değişken kullanımı:

1. Bir değişkeni atamadan önce atamanın sağ tarafında bir değer olmalıdır.

2. Bir değişkenin üzerine başka bir değer atanırsa, eski değişkenin değeri atanan yeni değişkenin değeri
olur.

3. Değişken adları bir harfle başlamalıdır; sonra herhangi bir harf, rakam veya altçizginin kombinasyonu
gelebilir. MATLAB büyük küçük harfleri ayırt eder, yani büyük A ile küçük a ayrı ayrı değişkenlerdir.

4. Değişken uzunluğu herhangi bir uzunlukta olabilir, ancak MATLAB değişken adının ilk 63 karaterini
dikkate alır. Diğer bir deyişle maksimum değişken adı uzunluğu 63 karakter olmalıdır.

5. Komut satırında bir değişkene kesinlikle MATLAB ın kendi hazır m dosyalarının isimlerinden biri
verilmemelidir. Aksi takdirde MATLAB ın kendi m dosyası clear all komutu kullanılmadıkça
işletilemez. Daha önce kullanılan değişkenler whos komutu ile görüntülenebilir. Ayrıca bir
değişkene verilen adın daha önce kullanılıp kullanılmadığı, isvarname fonksiyonuyla kontrol
edilebilir. Eğer verilen ad geçerli ise 1, değilse 0 değeri gösterilir. Örnek,

>> isvarname hesapla

ans =

Bir MATLAB Programının Anatomisi

1. Adım: MATLAB ı çalıştıralım. MATLAB ekranında File*New*M file komutuyla veya komut satırından edit
komutunu yazıp Enter’a basarak ya da fareyle File-New-M-File ı seçerek etkileşimli m dosyası yazmak için
Editor/Debugger ekranına geçelim. Burada herhangi bir metin (text) editöründe de (örneğin Not Defteri veya
Word Programı gibi) MATLAB m dosya kodu yazabiliriz. Ancak programın çeşitli aşamalarını test edebilmek
ve hataları anında düzeltip yeni sonuçları görebilmek için MATLAB ın kendi editörünü kullanmak daha doğru
olacaktır.

2. Adım: Program kodunu yazalım.

3. Adım: Kodu kaydedelim. Yazdığımız MATLAB kodunu Ctrl+S tuş kombinasyonu veya File*Save komutu ile
ya da save ikonuna tıklayarak, gelen pencerede (m dosyaları için varsayılan çalışma klasörü olan work e)
kaydedelim. MATLAB ı ilk açtığımızda work klasörü aktif, yani geçerli klasör olarak ekrana gelir. Bu nedenle
kolaylık olsun diye ilk başlarda m dosyalarımızı work klasörüne kaydedebiliriz. İleriki aşamalarda ise bir konu
başlığı altında ayrı bir klasör açıp, m dosyalarını buraya kaydetmek ve yine bu klasörden çalıştırmak
gerekebilir.

4. Adım: Programı çalıştıralım. Bunun için MATLAB Editor/Debugger pencerisinde Run ikonuna tıklayarak
veya F5 kısayol tuşuyla ya da komut penceresinde, kaydettiğimiz m file dosyasının adını ekrana yazıp, enter
tuşuna basarak programımızı çalıştırabiliriz.

117
Veri Giriş-Çıkışları Ve Hata Bildirimleri İçin Kullanılan Önemli Fonksiyonlar

input fonksiyonu: input fonksiyonu kullanıcıdan bir veri girişi istendiğinde kullanılır. Genel sözdizimi:

kullanıcı_girişi = input('prompt')
kullanıcı_girişi = input('prompt', 's')

şeklindedir. s takısı giriş olarak bir karakter dizge girişi, yani genelde metinsel bir ifade gerektiğinde kullanılır.
prompt, geçerli çalışma ortamında değişkenler kullanarak işleme konacak herhangi bir ifade olabilir.
input('prompt') kullanıcının klavyeden yapacağı bir giriş için bekler ve girilen değeri kullanıcı_girişine
döndürür. input('prompt','s') ise bir değişken adı veya sayısal değerden ziyade girilen dizgeyi bir metin
değişkeni olarak döndürür. Örnek,

a=input('Bir sayı giriniz: ')

Bir sayı giriniz:

disp fonksiyonu: disp fonksiyonu genelde, program işleyişinde ya da veri girişi hata uygulamalarında metin
dizgesel ifadeleri göstermek için kullanılır. Genel yazım formatı:

disp('prompt')

şeklindedir. disp(x) komutu ise, bir dizi veya metni görüntüler. Dizi görüntülemede dizinin adı yazılmaz ve boş
bir dizi görüntülenmez. x bir karakter dizgesi ise metin olarak görüntülenir.

disp(' ') komutu kendisinden önce ve sonra gelecek satır arasında bir satır boşluk sağlar. Tek tırnaklar
arasındaki boşluk sayısının önemi yoktur. Örnek,

disp('Uyarı: Tanımlanmamış sembol girdiniz!')


disp(' ')
x=[1 2 3 4 5];
disp(x)

Uyarı: Tanımlanmamış sembol girdiniz!

1 2 3 4 5

Veri çıkışlarında, sayısal sonuçları aynı satırda gösterebilmek için, sayısal sonucu metne bağlayan num2str
fonksiyonu disp fonksiyonu ile kullanılabilir. Örnek,

x=5;
disp(['İşlemin sonucu: ',num2str(x),' dir.'])

İşlemin sonucu: 5 dir.

118
fprintf fonksiyonu: fprintf komutu, formatlı program çıkışını ekranda göstermek için kulanılır. Genel yazım
biçimi:

fprintf('format' ,A, ...)

şeklindedir. 'format' stringinde belirtilen formatta A dizisi veya ek dizi argümanlarının elemanlarını gösterir.
Daha basit bir yazım biçimi ise,

fprintf('format' ,liste, ...)

şeklindedir. Burada liste, virgülle ayrılan değişken adlarını listeler. Komuttaki format stringinin genel formatı:

% [ -/+/0 ] [sayı1. sayı2] Kod

şeklindedir. Burada yüzde işareti % sabittir ve mutlaka bulunmalıdır. Köşeli parantez içindeki kısımlar isteğe
bağlıdır. Bayrak (flag) olarak adlandırılan [-/+/0] gösteriminde – işareti, çıkışın sola hizalı olacağını; + işareti,
önünde sürekli + işaretinin olacağını ve 0 işareti de sayı alanında boş hanelerin 0’larla doldurulacağını
gösterir. Sayı alanı ve kesinliği, sayı1 ve sayı2 ile belirlenir. Yazdırılacak rakamların minimum alan genişliğini
sayı1, ondalık göstergesi olan noktanın sağındaki rakam sayısını ise sayı2 ifade eder. Kod, denetim ve veri
türü bilgisini daha doğrusu dönüşüm karakterlerini içerir. % işaretinden sonra yazılacak ifadelerin arasında
boşluk bırakılmamalıdır.

% -12.5f

İşaretleyici Değiştirici Alan genişliği Tamlık Format tanımlayıcı


-zorunlu- -isteğe bağlı- -isteğe bağlı- -isteğe bağlı- -zorunlu-

Kaçış (Kontrol) Kodları Dönüşüm (Biçim) Kodları


Karakter Tanımı Belirteç Tanımı
\n Yeni bir satıra başlar (return or Enter) %e Küçük harfle bilimsel notasyon
\r Yeni satırın başı (linefeed) Carriage return %E Büyük harfle bilimsel notasyon
\b Geriboşluk karakteri (backspace) %f Sabit nokta (ondalık) notasyon
\t Yatay sekme karakteri (Tab) %g En kısa olmasına göre %e veya %f
\f Formfeed karakteri %G %g ile aynı ancak E kullanır
'' Apostrof karakteri (iki tek tırnak) %s karakter dizgesi tanımlar
\\ Ters bölü karakteri (backslash) %c Tekil karakter
%% Yüzde işareti karakteri %d İşaretli ondalık notasyon

Örnekler:
fprintf('Islem sonucu %d bulunmustur. \n', 2007);

Islem sonucu 2007 bulunmustur.

fprintf('Islem sonucu %7.2f bulunmustur. \n', 2007);

Islem sonucu 2007.00 bulunmustur.

119
Program Yazımında Sıkça Kullanılan Koşul Deyimleri (CONDITIONAL STATEMENTS)

if (eğer) Deyimi: if deyimin genel formatı:

if mantıksal ifade

deyim

end

şeklindedir. Eğer mantıksal ifade doğru ise deyim de belirtilen işlem yapılır ve end ile işlem sona erdirilir.

Örnek 1:

a=input('Bir sayı giriniz: ');

if a>0
disp('Pozitif bir sayı girdiniz.')
end

Bir sayı giriniz: 4


Pozitif bir sayı girdiniz.

Örnek 2:

Birden fazla if ifadesi ard arda kullanabilir. Burada, her if ifadesi end ile sonlandırılmalı, yani kaç tane if varsa
o kadar da end olmalıdır.

a=input('Bir sayı giriniz: ');

if a>0
disp('Pozitif bir sayı girdiniz.')
end

if a==0
disp('İşaretsiz bir sayı girdiniz.')
end

if a<0
disp('Negatif bir sayı girdiniz.')
end

Bir sayı giriniz: 4


Pozitif bir sayı girdiniz.
Bir sayı giriniz: 0
İşaretsiz bir sayı girdiniz.
Bir sayı giriniz: -5
Negatif bir sayı girdiniz.

120
else (başka) Deyimi: else deyiminin genel formatı:

if mantıksal ifade
deyim takımı-1
else
deyim takımı-2
end

şeklindedir. Eğer mantıksal ifade doğru ise deyim takımı-1’de belirtilen, yanlış ise deyim takımı-2’de belirtilen
işlem yapılır ve end ile işlem sona erdirilir. else deyim takımı-2 şeklindeki yazım da doğrudur, ancak else den
sonra en az bir boşluk bırakılmalıdır.

Örnek:

if a < 50
sonuc= 5*a
else
sonuc= 2*a
end

Bir a degeri giriniz: 9

sonuc =

45
Bir a degeri giriniz: 100

sonuc =

200

Bir a degeri giriniz: 50

sonuc =

100

elseif (eğer-başka) Deyimi: elseif deyiminin genel formatı:

if mantıksal ifade-1
deyim takımı-1

elseif mantıksal ifade-2


deyim takımı-2
.
.
.
elseif
deyim takımı-n

end

121
şeklindedir. Eğer mantıksal ifade-1 doğru ise deyim takımı-1’de belirtilen işlem gerçekleştirilir; değilse başka
bir mantıksal ifade-2 verilir ve eğer bu ikinci şart doğru ise deyim takımı-2’de belirtilen işlem gerçekleştirilir
ve bu durum deyim takımı-n e kadar böylece sürüp gider.

Örnek 1:

a=input('Bir sayı giriniz: ');

if a>0
disp('Pozitif bir sayı girdiniz.')

elseif a==0
disp('İşaretsiz bir sayı girdiniz.')

elseif a<0
disp('Negatif bir sayı girdiniz.')

end

Bir sayı giriniz: 9


Pozitif bir sayı girdiniz.
Bir sayı giriniz: 0
İşaretsiz bir sayı girdiniz.
Bir sayı giriniz: -7
Negatif bir sayı girdiniz.

Örnek 2:

ì x + y x ³ 0 ve y ³ 0
ï
f (x) = íx +1/ y x ³ 0 ve y < 0 fonksiyonu için, if-elseif-end yapısıyla bir program yazalım.
ï x. y x < 0 veya y < 0
î

clear all, close all, clc

% x ve y fonksiyon girdi değişkenleri,


% f ise, fonksiyonun aldığı değeri gösteren çıktı değişkenidir.

x=input('x değerini giriniz: ');


y=input('y değerini giriniz: ');

if x>=0 & y>=0


f=x+y

elseif x>=0 & y<0


f=x+1/y

elseif x<0 | y<0


f=abs(x*y)

end

122
x değerini giriniz: 9
y değerini giriniz: -4

f =

8.7500

Örnek 3: if-elseif-else deyimlerini birlikte kullanarak basit bir hesap makinesi programı yazalım.

clear all; close all; clc;


disp('bhm: basit hesap makinesi')
disp('==========================')
disp( ' ' )

a=input('İlk sayıyı giriniz: ');


b=input('İkinci sayıyı giriniz: ');
c=input('Yapacağınız işlemin sembolünü giriniz: +, -, *, /, ^ ===> ', 's');

if c=='+'
sonuc=a+b

elseif c=='-'
sonuc=a-b

elseif c=='*'
sonuc=a*b

elseif c=='/'
if b==0
disp('Uyarı: Bölme işleminde bölen sayı sıfır olamaz!')
else
sonuc=a/b
end

elseif c=='^'
sonuc=a^b

else
disp('Uyarı: Tanımlanmamış işlem sembolü girdiniz!')
end

bhm: basit hesap makinesi


==========================

İlk sayıyı giriniz: 5


İkinci sayıyı giriniz: 9
Yapacağınız işlemin sembolünü giriniz: +, -, *, /, ^ ===> *

sonuc =

45

123
switch-case-otherwise (değiştir-durum-aksi durum) Yapısı: switch-case-otherwise yapısı, yukarıda
gördüğümüz if, else ve elseif yapılarının kullanımına bir alternatif oluşturur. Aslında switch-case-otherwise ile
yapılan herşey if yapılarıyla da yapılabilir ama switch-case-otherwise ile yazılan programlar daha okunabilir
bir özelliğe sahiptir. switch-case-otherwise yapısının genel formatı:

switch giriş ifadesi (skaler veya karakter dizgesi)

case ifadesi
deyim grubu-1

case ifadesi
deyim grubu-2
.
.
.
otherwise
deyim grubu-n

end

şeklindedir. Giriş ifadesi, her bir case değeri ile karşılaştırılır ve sonuç deyim gurubuyla verilir. Burada her bir
case değeri ayrı bir satırda olmalıdır. Giriş ifadesi hiçbir case değerini karşılamıyorsa otherwise ile belirtilen
deyim grubu yürütülür.

Örnek 1: Girilen bir açı değerinin hangi bölgede olduğunu ve sinüs değerinin işaretini bulmak için
aşağıdaki kodu switch-case-otherwise yapısıyla yazalım.

angle=input('Derece cinsinden bir açı değeri giriniz: ');

switch fix(angle/90)

case 0
disp('I. Bölgede ve sinüsü pozitif')
case 1
disp('II. Bölgede ve sinüsü pozitif')
case 2
disp('III. Bölgede ve sinüsü negatif')
case 3
disp('IV. Bölgede ve sinüsü negatif')
otherwise
disp('0 ile 360 derece arasinda bir deger giriniz')

end

Derece cinsinden bir açı değeri giriniz: 275


IV. Bölgede ve sinüsü negatif

Yazdığımız kodda, açı değerleri 90 a bölünüp, sonuç fix fonksiyonu ile 0 a doğru en yakın tamsayıya
yuvarlatıldı ve böylece analitik düzlemin bölgeleri 0, 1, 2, 3 sayı durumlarıyla belirtilmiş oldu.

124
Örnek 2: Girilen açı değeri ile yönü veren bir kod yazalım.

angle=input('Bir açı değeri giriniz: ');

switch angle

case {0,360}, disp('Kuzey')

case {-180,180}, disp('Güney')

case {-270,90}, disp('Doğu')

case {-90,270}, disp('Batı')

otherwise, disp('Böyle bir yön yoktur.')

end

Bir açı değeri giriniz: 85


Böyle bir yön yoktur.

for (için) Döngüsü: for döngüsü, bir komut ifadesini ya da bir komut ifadesi grubunu önceden saptanan bir
sayı kere yürütür, yani bir grup bilginin birkaç defa değerlendirilmesinde kullanılır. Bir for döngüsününnün
genel formatı:

for döngüdeğişkeni=ifade

deyimler

end

şeklindedir. Örneğin ifade döngüdeğişkeni=m:j:n şeklinde ise burada m:j:n, j artım miktarlı ilk değeri m, son
değeri n olan bir sayı aralığıdır. Her for döngüsü end ile kapatılmalıdır.

Örnek 1: for döngüsünü kullanarak, MATLAB yazısını ekranda 5 kez bastıralım.

for i=1:5
disp('MATLAB')
end

MATLAB
MATLAB
MATLAB
MATLAB
MATLAB

Örnek 2: 1 den 5 e kadar sayıların karelerini ekrana farklı şekillerde yazdıralım.

for i=1:5
x=i^2
end

125
x =

x =

x =

x =

16

x =

25

Sadece son değerin, 5 in karesini yazdırmak istersek,

for i=1:5
x=i^2;
end
x

x =

25

Matris endeksleme ile sonucu sütun şeklinde yazdıralım.

for i=1:5
x(i,:)=i^2;
end
x

x =

1
4
9
16
25

Matris endeksleme ile sonucu satır şeklinde yazdıralım.

for i=1:5
x(:,i)=i^2;
end
x

x =

1 4 9 16 25

126
Vektör endeksleme ile sonucu satır şeklinde yazdıralım.

for i=1:5
x(i)=i^2;
end
x

x =

1 4 9 16 25

Örnek 3: 1 den n e kadar pozitif tek ve çift tamsayıların kareleri toplamlarını bulan bir kod yazalım.

% 1 den n’e kadar pozitif tek ve çift tamsayıların


% kareleri toplamını bulan program.

clear all;clc

n=input('n pozitif tamsayı değerini giriniz: ');

c=0;
t=0;

for i=1:n
if mod(i,2)==0
c=c+i^2;
elseif mod(i,2)==1
t=t+i^2;
end
end

disp(['1 den ',num2str(n), ' e kadar çift tamsayıların kareleri toplamı: ',...
num2str(c),' dir.'])

disp(['1 den ',num2str(n), ' e kadar tek tamsayıların kareleri toplamı: ',...
num2str(t), ' dir.'])

n pozitif tamsayı değerini giriniz: 100


1 den 100 e kadar çift tamsayıların kareleri toplamı: 171700 dir.
1 den 100 e kadar tek tamsayıların kareleri toplamı: 166650 dir.

Burada mod(i,2)==0 ifadesi ile çift sayıları (2 ile bölündüklerinde kalan 0 dır),mod(i,2)==1 ifadesi ile de tek
sayıları (2 ile bölündüklerinde kalan 1 dir) belirledik. Tek ve çift sayıların kareleri toplamı için, başlangıçları 0
alarak for döngüsüyle sonuca ulaştık.

127
Örnek 4: İç-içe for döngüsünü kullanarak çarpım taplosu kodu yazalım.

clear all, clc

disp(' 1 2 3 4 5 6 7 8 9 10')
disp(' --- --- --- --- --- --- --- --- --- ---')

for i =1:10
fprintf(' %2.0f',i);
for j=1:10
fprintf(' %3.0f',i*j);
end
fprintf('\n');
end

1 2 3 4 5 6 7 8 9 10
--- --- --- --- --- --- --- --- --- ---
1 1 2 3 4 5 6 7 8 9 10
2 2 4 6 8 10 12 14 16 18 20
3 3 6 9 12 15 18 21 24 27 30
4 4 8 12 16 20 24 28 32 36 40
5 5 10 15 20 25 30 35 40 45 50
6 6 12 18 24 30 36 42 48 54 60
7 7 14 21 28 35 42 49 56 63 70
8 8 16 24 32 40 48 56 64 72 80
9 9 18 27 36 45 54 63 72 81 90
10 10 20 30 40 50 60 70 80 90 100

while (süresince-iken) Döngüsü: while döngüsü, denetleyen deyim doğru (1) olduğu sürece bir ifadeyi veya
ifade grubunu yürütür. Bir while döngüsünün genel formatı:

while ifade

deyimler

end

şeklindedir. Her while döngüsü end ile kapatılmalıdır. Eğer döngü sonsuz çevrime girerse, işlem Ctrl+C ile
durdurulabilir.

Örnek 1: 1 den 10 a kadar sayıların karelerinin terslerini bulan ve karelerinin terslerinin sayısına göre grafiğini
çizen bir program yazalım.

% 1 den 10 a kadar sayıların karelerinin terslerini bulur.


% Grafiğini çizer.
i=1;
while i<11
kt(i)=1./i^2;
i=i+1;
end
kt

plot(kt)
xlabel('sayı'),ylabel('karesinin tersi')

128
kt =

Columns 1 through 2

1.000000000000000 0.250000000000000

Columns 3 through 4

0.111111111111111 0.062500000000000

Columns 5 through 6

0.040000000000000 0.027777777777778

Columns 7 through 8

0.020408163265306 0.015625000000000

Columns 9 through 10

0.012345679012346 0.010000000000000

Örnek 2: n! hesabında n in hangi değeri için sonucun 1000 den küçük olacağını bulan bir kod yazalım.

clear all, close all, clc

n=1;
while prod(1:n)<1E3
n=n+1;
end

sonuc=n-1

sonuc =

129
Örnek 3: Kullanıcıdan istediği miktarda sayı girmesini, işlemi bitirmek için enter a basmasını ve sonuçta kaç
sayı girdiğini, girdiği sayıların toplamını, ortalamasını ve standart sapmayı veren bir program yazalım.

clear all, close all, clc

data=input('Bir sayı giriniz (İşlemi bitirmek için enter a basınız): ');

i=1; %Sayıcı başlangıcı.


while ~isempty(data) %Veri var mı? Yoksa, işlemi kes.
v(i)=data; %Evet: Veri geldi, onu v vektöründe sakla.
i=i+1; %Sayıcı artımı.
data=input('Bir sayı giriniz (İşlemi bitirmek için enter a basınız): ');
end

disp(' ')

fprintf('Girilen sayı adeti:%g,Toplamı:%g,Ortalaması:%g,Standart sapma:%g\n'...


,length(v),sum(v),mean(v),std(v))

Bir sayı giriniz (İşlemi bitirmek için enter a basınız): 5.78


Bir sayı giriniz (İşlemi bitirmek için enter a basınız): 5
Bir sayı giriniz (İşlemi bitirmek için enter a basınız): 5.023
Bir sayı giriniz (İşlemi bitirmek için enter a basınız): 5.9
Bir sayı giriniz (İşlemi bitirmek için enter a basınız): 6
Bir sayı giriniz (İşlemi bitirmek için enter a basınız):

Girilen sayı adeti:5,Toplamı:27.703,Ortalaması:5.5406,Standart sapma:0.489307

Örnek 4: Öğrenci notlarını girerek genel ortalamayı hesaplayan bir program yazalım.

i. Öğrencinin adı, soyadı ve numarasını giriniz.

ii. 1.vize, 2.vize, ödev ve final notlarını giriniz.

iii. Genel ortalamayı, vize ortalamaların %30 u + ödevin %20 si + final notunun %50 si şeklinde
hesaplatalım ve harfsel karşılığını yazdıralım.

iv. Son olarak da başka bir öğrenci notu girilip girilmeyeceğini e/h (evet/hayır) şeklinde sorgulatalım.

130
clear all, %Bütün değişken değerlerini sil.
close all, %Açık pencereleri kapat.
clc; %Komut penceresini temizle.

disp('Genel not ortalamasını hesaplatan program')


disp('=========================================')
disp(' ')

diger='e'; % Daha başlangıçta bir kere döngüye girer.

while diger=='e' %Cevap evet 'e' ise, döngü yürütülür.

%Giriş verileri.
ad=input('Öğrencinin adı ve soyadını giriniz: ','s');
no=input('Öğrencinin numarasını giriniz: ','s');
vize1=input('1. vize notunu giriniz: ');
vize2=input('2. vize notunu giriniz: ');
odev=input('Ödev notunu giriniz: ');
final=input('Final notunu giriniz: ');

%Genel not ortalaması hesabı.


not=(mean(vize1,vize2))*(30/100)+odev*(20/100)+final*(50/100);
disp(' ')

%Not ortalamasının harfsel karşılığı.


if (not>=90)
harf='A';
elseif (not>=80) & (not<90)
harf='B';
elseif (not>=70) & (not<80)
harf='C';
elseif (not>=60) & (not<70)
harf='D';
elseif (not<60)
harf='E';
end

%Çıkış verileri
fprintf('%s nolu %s; Ortalama Notunuz:%7.2f - Harfsel Karşılığı: %s\n',...
no,ad,not,harf);
disp(' ')

%İşlemin devamının sorgulatılması.


diger=input('Başka bir öğrenciyi girmek ister misiniz [e/h]?','s');
end

Genel not ortalamasını hesaplatan program


=========================================

Öğrencinin adı ve soyadını giriniz: Sinan Bayram


Öğrencinin numarasını giriniz: 97051207
1. vize notunu giriniz: 87
2. vize notunu giriniz: 83
Ödev notunu giriniz: 90
Final notunu giriniz: 95

97051207 nolu Sinan Bayram; Ortalama Notunuz: 91.60 - Harfsel Karşılığı: A

Başka bir öğrenciyi girmek ister misiniz [e/h]?

131
continue ve break Deyimleri: continue deyimi, for/while döngülerinde program akışını her ne olursa olsun
bir sonraki çevrime geçirir. break deyimi ise, for/while döngülerinde verilen koşul sağlandığında o andaki
işlemi orada keser.

Örnek 1:

t=[-5,5,-4,4,-3,3,-2,2,-1,1];

for k=1:length(t)
if t(k)<0
continue
end
t(k)= log10(t(k));
end
t

t =

Columns 1 through 7

-5.0000 0.6990 -4.0000 0.6021 -3.0000 0.4771 -2.0000

Columns 8 through 10

0.3010 -1.0000 0

Görüldüğü gibi eksi işaretli sayılar işleme konulmamıştır.

Örnek 2:

for t=1:10
m=100-t^3
if m<0
break
end
n=sqrt(m)
end
m

m =

99

n =

9.9499

m =

92

n =

9.5917

132
m =

73

n =

8.5440

m =

36

n =

m =

-25

m =

-25

Görüldüğü gibi yine eksi işaretli sayılar işleme konulmamıştır.

Programlamada Zamanlama (tic, toc fonksiyonu)

Programlama işlemlerinde hesaplama ya da yürütme süresi kavramları dikkate alınmalıdır. Bunun için
help timefun komutu ile yardım alınabilir.

tic, toc fonksiyonu bir işlemin ne kadar süre aldığını ölçmek için kronometre gibi kullanılır. tic, kronometreyi
başlatır, toc ise tic in kullanıldığı andan itibaren geçen süreyi yazdırır.

tic;

x=0:0.001:100;
y=(sin(x).*cos(x))./(sin(x)-cos(x));

toc;

Elapsed time is 0.104800 seconds.

MATLAB Derleyicisi (compiler)

Bir programın çalışabilmesi için önce makine diline çevrilmesi gerekir; bu işleme derleme, derleme işini yapan
programlara da derleyici (compiler ) denir.

MATLAB Derleyicisi (mcc) ile fonksiyon m-dosyaları veya grafik kullanıcı arayüzü (GUI) şeklindeki
programlar, C/C++ diline dönüştürülebilmektedir. (Ve bu durumun tersi de mümkün olmaktadır.)

MATLAB de yazılmış (Türkçe karakter kullanılmamasına dikkat edilmelidir!) olan bir fonksiyon m-dosyasını ya
da GUI uygulamasını derlemek için mcc ve mbuild adlı iki temel fonksiyon vardır.

133
Şimdi bir örnekle, MATLAB ortamında yazdığımız bir m-fonksiyon dosyasını C kodunda .exe uzantılı,
doğrudan çalıştırılabilir bir programa nasıl dönüştüreceğimizi , yani derleyeceğimizi görelim. Böylece MATLAB
ın imkânlarını MATLAB yüklü olmayan başka bilgisayarlarda da kullanabiliriz.

Örnek: ax2+bx+c=0 şeklindeki 2. dereceden denklemin köklerini bulan bir program yazıp, derleyelim.

Önce, Türkçe karakter kullanmadan fonksiyon m-dosyasını oluşturalım.

function [x1,x2]=iddkokleri
disp('ax^2+bx+c=0 seklindeki 2. dereceden denklem cozumu')
disp(' ')

%Katsayilari girme
a=input ('a katsayisini giriniz (a katsayisi 0 olmamalidir!): ');
b=input ('b katsayisini giriniz: ');
c=input ('c katsayisini giriniz: ');
disp(' ')

Katsayilar=[a b c]

% Dikstriminant bulma
D=b^2-4*a*c;

% Kokleri bulma
x1=( -b + sqrt(D) )/(2*a);
x2=( -b - sqrt(D) )/(2*a);

% Kokleri sinama
if D<0
disp('Denklemin iki kompleks koku vardir.')
disp(['kok1: ',num2str(x1),' kok2: ',num2str(x2),' dir.'])
elseif D==0
disp('Denklemin iki esit koku vardir.')
disp(['kok1: ',num2str(x1),' kok2: ',num2str(x2),' dir.'])
elseif D>=0
disp('Denklemin iki reel ayrik koku vardir.')
disp(['kok1: ',num2str(x1),' kok2: ',num2str(x2),' dir.'])
end

Programı yazıp, fonksiyon adıyla aynı adlı idddkokleri.m olarak work klasörünekaydettikten sonra, derleyici
konfigürasyonu için komut satırına mbuild –setup komutunu girelim.

>> mbuild-setup

"Please choose your compiler for building standalone MATLAB applications:


Would you like mbuild to locate installed compilers [y]/n?"

y yazıp enter a bastığımızda compiler seçeneği ile karşılaşırız. Burada 1,2 veya 0 girmemiz istenecek.

Select a compiler:
[1] Borland C++Builder version 6.0 in D:\Program Files\Borland
[2] Lcc C version 2.4.1 in D:\MATLAB71\sys\lcc
[0] None

Compiler [1] seçildiği varsayılırsa,

134
Please verify your choices:
Compiler: Borland C++Builder 6.0
Location: D:\Program Files\Borland
Are these correct?([y]/n): y

Doğrulama istenecek; y yazıp enter a basarak doğruluğunu onaylayalım.

Try to update options file: C:\Documents and Settings\Administrator\Application


Data\MathWorks\MATLAB\R14SP3\compopts.bat
From template:D:\MATLAB71\BIN\win32\mbuildopts\bcc56compp.bat

Done . . .

–> “”D:\MATLAB71\bin\win32\mwregsvr” “D:\MATLAB71\bin\win32\mwcomutil.dll”"


DllRegisterServer in D:\MATLAB71\bin\win32\mwcomutil.dll succeeded
–> “”D:\MATLAB71\bin\win32\mwregsvr”
“D:\MATLAB71\bin\win32\mwcommgr.dll”"DllRegisterServer in
D:\MATLAB71\bin\win32\mwcommgr.dll succeeded.

Böylece işlemimiz sorunsuz tamamlanmış oldu.

Derleyici konfigürasyonunu başarıyla tamladığımıza göre, komut satırında mcc-m iddkokleri.m komutunu
girerek, iddkokleri.m dosyasını iddkokleri.exe dosyasına dönüştürebiliriz.

>> mcc-m iddkokleri

iddkokleri.exe dosyası work klasöründe oluşturuldu. Artık .exe haline dönüştürdüğümüz programımızı
MATLAB den bağımsız olarak kullanabiliriz.

135
KAYNAKLAR

1. http:// www.mathworks.com

2. İbrahim Yüksel, MATLAB ile Mühendislik Sistemlerinin Analizi ve Çözümü, Vipas, 2000

3. Aslan İnan, MATLAB ve Programlama, Papatya, 2004

4. Brian D. Hahn & Daniel T. Valentine, Essential MATLAB for Engineers and Scientists, Elsevier, 2007

İnternet Kaynakları:

1. http://www.mathworks.com/products/deinos/index.shtml
2. http://www.mathworks.com/products/gallery/gaiTies/index.shtml
3. ftp://ftp.mathworks.com/pub/doc/MATLAB_frequently_asked_questions
4. http://www.mathworks.com/faq
5. http://www.mcs.dundee.ac.Uk/software/index.html#MATLAB
6. http://www.math.ufl.edu/help/MATLAB-tutorial/
7. http://www.rit.edu/~pnveme/MATLAB_Course/DEFAULT.HTM
8. http://www-math.cc.utexas.edu/math/MATLAB/MATLAB.html
9. http://www.math.ttu.edu/~gilliam/m5399-MATLAB.html
10. http://www.math.utah.edu/lab/ms/MATLAB/MATLAB.html
11. http://www.csee.wvu.edu/~trapp/wvuMATLAB.htm
12. http://www.engin.umich.edu/group/ctrn/
13. http://www.owlnet.rice.edu/~ceng303/MATLAB/MatCont.html
14. http://www.dcs.uwaterloo.ca/ec/scientific/MATLAB/MATLAB.htm
15. http://www-personal.engin.umich.edu/~tilbury/tutorials/MATLAB.html
16. http://www.geosc.psu.edLi/~hennesse/geosc203_html/lutorial.html
17. http://www.me.pdx.edu/~geiTy/MATLAB/masterOutline.html
18. http://www.cs.ubc.ca/spider/cavers/MATLABGuide/guide.html
19. http://www.eece.maine.edu/mm/

136
20. http://www.psc.edu/general/software/packages/MATLAB/MATLABprimer.html
21. http://www.math.siu.edu/MATLAB/tutorial3.pdf
22. http://www.indiana.edu/~statmath/math/MATLAB/
23. http://www.math.arizona.edu/~erker/mallab/MATLAB.html
24. http://www.lance.colostate.edu/lance/mswindows/MATLAB_rcfcrcnce.html
25. http://www.math.montana.edu/~umsfjdoc/MATLAB.html
26. http://www.math.princeton.edu/~maejohns/mae305/MATLAB.html
27. http://www.ece.ufl.edu/help/tutorial/eel3135/MATLAB_tut.html
28. http://wwwfp.vuse.vanderbilt.edu:8888/esl30/lectures/lecture9/lecture9.htm
29. http://www.amath.washington.edLi/~mmartin/work/MATLAB.html
30. http://www.ae.msstate.edu/Resources/docs/MATLAB/primer35.html
31. http://www.class.umd.edu/enme/403/0201/MATLABl.html
32. http://www.stolaf.edu/people/mckelvey/envision.dir/mar97.tutorial.html
33. http://www.ae.utexas.edu/courses/ase366k/MATLAB_Tutorial.ppt
34. http://www.math.ufl.edu/help/MATLAB/faq.html
35. http://www-ccs.ucsd.edu/MATLAB
36. http://www.mit.edu/people/abbe/MATLAB/main.html
37. http://www.math.unh.edu/~malhadm/tutorial/software/MATLAB/
38. http://math.uc.edu/~kingjt/MATLAB_lnk.html
39. http://web.usna.navy.mil/~mecheng/DESIGN/CAD/MATLAB/usna.html
40. http://web.mit.edu/answers/MATLAB/index.html
41. http://web.egr.msu.edu/decs/facilities/software/MATLAB
42. http://web.mit.edU/afs/.athena/astaff/project/logos/olh/Math/MATLAB/MATLAB.html
43. http://web.mit.edu/afs/athena.mit.edu/software/MATLAB/www/home.html
44. http://classes.aces.uiuc.edu/ACE491G/MATLABi.htm
45. http://wings.buffalo.edu/computing/sc/mat.html
46. http://netec.wustl.edu/~adnetec/CodEc/MATLAB.html
47. http://w3.ag.uiuc.edu/Classes/ACE491g/MATLAB.htm
48. http://bass.gmu.edu/MATLAB/MATLAB.html
49. http://physics.gac.edu/~huber/MATLAB/
50. http://spicerack.sr.unh.edu/~mathadm/tutorial/software/MATLAB/

137
51. http://lims.mech.nwu.edu/~tickel/MATLAB/reference.html
52. http://riceinfo.rice.edu/Computer/Documents/Classes/Unix/MATLAB/MATLAB.html
53. http://opal.math.ufl.edu:2020/info/algebra
54. http://tortoise.math.ufl.edu/help/MATLAB-tutorial
55. http://ist.uwaterloo.ca/ew/saw/MATLAB
56. http://www.glue.umd.edu/~nsw/MATLAB.doc/techdoc/ref/refix.html
57. http://www.indiana.edu/~statmath/smdoc/MATLAB.html
58. http://www.chpc.utah.edu/software/math/MATLABprimer.html
59. http://www.math.unh.edu/~mathadm/tutorial/software/MATLAB/

60. http://texas.math.ttu.edu/~gilliam/mlhtml_l/m4330_ml_l.html

61. http://www.muhendisforum.net/index.php?topic=291.0

138

Вам также может понравиться