Академический Документы
Профессиональный Документы
Культура Документы
Ş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)
(7–18)
(19–27)
(28–61)
(62–96)
(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, 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 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.
. 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.
[ ] 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.
= Atama (assignment): Bildirimleri atamak için kullanılır. Örneğin B = A, A'nın elemanlarını B'de saklar.
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ı
6
BÖLÜM I
a=
3
b=
-1
c=
2
d=
0.5000
f=
1
>> % ÖRNEK 2
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=
-0.9880
b=
0.5000
x=
0.5236
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=
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
8
a=
0
b=
2.3026
c=
0.6931
d=
1.6094
e=
-0.5108
>> % ÖRNEK 5
a=
0
b=
1
c=
0.3010
d=
0.6990
e=
-0.2218
>> % ÖRNEK 6
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
>> % ÖRNEK 8
ans =
1
ans =
2.7183
ans =
1.8221
10
>> % ÖRNEK 9
ans =
0 + 1.0000i
ans =
0
ans =
1
ans =
0.7746
>> % ÖRNEK 10
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
ans =
0.9828
ans =
56.3099
ans =
2.0000 - 3.0000i
ans =
3
>> % ÖRNEK 13
12
>> y=1+i
y=
1.0000 + 1.0000i
ans =
1.4142
ans =
45
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
ans =
-6
13
>> % KALAN BULMA
>> % ÖRNEK 15
ans =
4
d=
Columns 1 through 5
Columns 6 through 10
Column 11
5.5000
ans =
6.5000
ans =
0.3400
ans =
11
14
>> sum(d) % Verileri toplar.
ans =
32.8300
ans =
3.4042e+003
ans =
2.1272
ans =
2.9845
ans =
2.0946
ans =
1.2719
>> sort(d) % Verileri küçükten büyüğe doğru sıralar.
ans =
Columns 1 through 9
Columns 10 through 11
5.5000 6.5000
>> % 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
>>% 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 =
okek30_24 =
120
>> % FAKTÖRİYEL
>> % ÖRNEK 20
16
>> % 15!/(9!-5!) ifadesinin sonucunu bulalım.
>> prod(1:15)/(prod(1:9)-prod(1:5))
ans =
3.6048e+006
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.
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
ò
>>% q= x 2 dx belirli integralinin sonucunu sayısal olarak quad fonksiyonu ile bulalım.
1
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
>> 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)
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
y max x max
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.
>>% Aksi takdirde fonksiyonlar ve değişkenler tek tırnakların ' … ' arasında girilmelidir
>>% NOT: Yukarıda verilen quad fonksiyonu yerine int fonksiyonu kullanılarak hem belirli
ans = ans =
-1/3*x^6-2*x^2+20*x -1/3*x^6-2*x^2+20*x
21
>>% ÖRNEK 8
>> 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)
cos((3 t + 1) x) cos((3 t - 1) x)
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))
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.
-¥
ans = ans =
>>% ÖRNEK 11
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
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 =
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
>>% ÖRNEK 13
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
>> 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.
25
>>% ÖRNEK 16
1 1 1
>>% a= lim , b= lim , c= lim limitlerini hesaplayalım.
x ®0 x x ®0 - x x ®0 + x
>> syms x
a=
NaN
b=
-Inf
c=
Inf
>>% ÖRNEK 17
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, 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
>>% Ö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
x=
1 2 3 4 5
x=
1 2 3 4 5
x=
1 2 3 4 5
% 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ü
>>% 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:
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
>>% 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
>>% 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
>>% Sadece randn fonksiyonu kullanıldığında ortalaması 0 ile standart sapması 1 olan Gauss dağılımından
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
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
>> f=2+5*randn(1,4)
f=
>> randn % Sadece randn fonksiyonu kullanıldığında ortalaması 0 ile standart sapması 1 olan %
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
>>% Ö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
Columns 7 through 12
Columns 13 through 17
ans =
1 17
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
ans =
ans =
ans =
Columns 1 through 6
Columns 7 through 9
>> (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
>> 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 =
>> 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 =
>> 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=
>> % 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 =
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.
goster =
>>% Ö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
>>% MATRİSLER
>>% 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
>> 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
>>% 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=
>>% 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 =
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.
>> [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
>>% ÖRNEK 14
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
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
ans =
-0.6667 1.0000
1.3333 0.3333
41
>> k/A % Boy uyuşmazlığı vardı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=
0 0 0
>> a+b % a+b=b+a dır. Matrislerin karşılıklı elemanları kendi arasında toplanır.
ans =
>> 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
ans =
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 =
0 0 0
ans =
ans =
45
>> a.*b % a.*b=b.*a dır. Elemanter çarpım normal çarpımdan farklıdır.
ans =
0 0 0
ans =
ans =
0 0 0
>> a.^b % Elemanter üs almada a matrisinin her bir elemanı, b matrisi karşılığındaki elemanı üs olarak alır.
ans =
46
>>% ÖRNEK 16
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
ans =
47
>> rank(a) % a matrisinin rankıdır. Yani, a matrisinin tüm karesel alt matrislerinden,
ans =
a=
3
8 1 6
3 5 7
>> diag(a) % Ana köşegen elemanlarını verir.
4 9 2
ans =
ans =
ans =
v=
48
d=
15.0000 0 0
0 4.8990 0
0 0 -4.8990
>>% ÖRNEK 17
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
ans =
23
ans =
17 23 4 10 11 24 5 6 12
ans =
17 4 11 5 12
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
ans =
24 1 8
5 7 14
6 13 20
12 19 21
18 25 2
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
>> 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=
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=
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=
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 =
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
ans =
65 65 65 65 65
ans =
65 65 65 65 65
ans =
65
54
>>% ÖRNEK 18
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ü,
>>% 2y+4z=2
>>% x+2y+2z=3
>>% 3x+4y+6z=-1
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=[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,%
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. %
ans =
3 0 -6 8 0 -10 5
B=
0.3333
K=
0 0 -2.0000 -0.6667
ans =
-1.6180
1.0000
0.6180
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=
1 0 -2 1
>> polyder(P) % polyder(P) fonksiyonu P polinomunun türevini alır. Sonuç, 3x2 – 2 dir.
ans =
3 0 -2
ans =
3*x^2-2
Data interpolation.
58
griddata3 - Data gridding and hyper-surface fitting for 3-dimensional data.
Spline interpolation.
Geometric analysis.
Polynomials.
59
polyint - Integrate polynomial analytically.
>>% 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.
>> 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ı
0 0 0 0 0 0
60
>> x=[2000 3000 4000 5000 6000]; % Motor hızları.
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=exp(4*cos(x));
>> plot(x,y)
>>% Aynı grafiği her bir veri noktası mavi + olacak şekilde çizdirelim.
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.
63
>>% NOT: Çizgi türü kodları aşağıdaki tabloda verilmiştir.
>>% 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:
>> 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.
>> y1=sin(x);
64
>> plot( x, y1, 'r' ) % 1. grafiği çizer.
>> y2=cos(x);
>>% 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:
>> x=linspace(-2*pi,2*pi);
>> plot(x,sin(x))
>> plot(x,cos(x))
65
>> plot(x,tan(x))
>> plot(x,cot(x))
>>% Aşağıda harmonik dalga grafikleri de benzer şekilde subplot komutuyla gösterilmiştir.
>> y=sin(2*pi*2*t);
>> plot(t,y)
>> z=sin(2*pi*10*t);
>> plot(t,z)
>> w=y+z;
66
>> plot(t,w)
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.
>> plot(x,y)
>>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.
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.
6 498
10 162
17 23
25 9.6
32 1.5
>> zaman=[ 6 10 17 25 32 ];
70
>>plot(zaman, gerilim) % x ve y eksenleri 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 ];
>>x=1: .1 :10;
>>y1=exp(-x).*sin(x);
>>y2=exp(x).*cos(x);
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.
73
>>% ÖRNEK 6
>>% x2+ y2 = 4 denklemi ile tanımlanan eğriyi ezplot fonksiyonu ile çizdirelim.
>>% Ö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.
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.
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.
>> r=2*0.5*(1+cos(t));
>> polar(t, r)
76
>>% ÖRNEK 11
>> 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.
Axis control.
78
grid - Grid lines.
Graph annotation.
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 ];
>> plot3(x,y,z);
>> grid on
80
>>% ÖRNEK 13
>>% Benzer olarak üç boyutlu ilginç bir çizgi grafik olan heliks i plot3 fonksiyonu ile çizdirelim.
>> plot3(sin(t),cos(t),t,'r');
>> 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.
>>% Ö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.
>> y_nok=[-10: 5: 10]; >> ezmesh( 'x.^2+y.^2', [-10: 1: 10], [-10: 5: 10] )
>> mesh(x,y,z);
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.
>>% Ö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] )
>> surf(x,y,z);
>>% Ö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:
>> surf(X,Y,Z);
>>% ÖRNEK 19
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)
>> subplot(2,1,2)
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.
89
\sigma \exists \bullet •
\int \in \o
\wedge \times x \0
\langle \rangle
90
>>% Tablo da verilen tüm karakterler, ayrıca aşağıdaki özel değiştiriciler (stream modifier) ile kullanılabilir:
>>% Genel kullanımda tabloda verilen yunan karakterlerini ve sembollerini üç şekilde ifade edebiliriz:
>>% 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ü
>>% 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}')
91
>>% NOT: Üç boyutlu grafiklerle ilgili bilgilere >>help graph3d komutuyla ulaşılabilir.
Color control.
Lighting.
92
Color maps.
Transparency.
Axis control.
93
grid - Grid lines.
xlim - X limits.
ylim - Y limits.
zlim - Z limits.
Viewpoint control.
Camera control.
94
camroll - Roll camera.
Graph annotation.
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Ü
>>% Cebirsel denklemlerin sembolik çözümünü solve fonksiyonu verir; solve fonksiyonunun genel hali:
>>% syms x y z …
>>% ÖRNEK 1
>> syms x
>> solve(x^2-x-6,x)
ans =
-2
>> 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
>> syms x y
x=
5/3
y=
-1/3
98
>>% ÖRNEK 3
>>% x2+xy+y=3
>>% x2-4x+3=0
x= x=
1 1
3 3
y= y=
1 1
-3/2 -3/2
>>% ÖRNEK 4
>>% x-y=2
>> 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.
ans =
1.5708
>>% Benzer olarak 2eX - 5=0 denkleminin çözümünü, başlama değerini 1 alarak bulalım.
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.
>>% adi diferansiyel denklemlerin simgesel çözümü için dsolve fonksiyonu kullanılır.
>>% 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
ans =
cos(a*t)
>>% ÖRNEK 9
d2y dy
>>% 2
+ 3 + y = 0 diferansiyel denkleminin çözümünü bulalım.
dt dt
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
>> 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
>> 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
>> 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
>>% 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:
>>% 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
>>% Ş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)];
>>% 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
>> 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
>>% Ö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.
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
function dy = vdpmu(t,y);
mu=1000;
dy=[y(2); mu*(1-y(1)^2)*y(2)-y(1)];
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,
>>% y1’= y2
>>% y2’= y3
function dy=diffonk(t,y);
dy=[y(2);y(3);3*y(3)+y(2)*y(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
… … …
>> 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
>> [x,y]=ode23('diffonk',0,2,pi/4)
> 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
111
function dy=rig(t,y)
dy=[y(2)*y(3);-y(1)*y(3);-0.51*y(1)*y(2)];
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
… … …
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
>>% y1’= y2
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.
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 =
10
s =
1.256637061435917e+003
v =
4.188790204786391e+003
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ı:
Ş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.
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
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,
ans =
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.
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,
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,
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.'])
118
fprintf fonksiyonu: fprintf komutu, formatlı program çıkışını ekranda göstermek için kulanılır. Genel yazım
biçimi:
ş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,
şeklindedir. Burada liste, virgülle ayrılan değişken adlarını listeler. Komuttaki format stringinin genel formatı:
ş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
Örnekler:
fprintf('Islem sonucu %d bulunmustur. \n', 2007);
119
Program Yazımında Sıkça Kullanılan Koşul Deyimleri (CONDITIONAL STATEMENTS)
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:
if a>0
disp('Pozitif bir sayı girdiniz.')
end
Ö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.
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
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
sonuc =
45
Bir a degeri giriniz: 100
sonuc =
200
sonuc =
100
if mantıksal ifade-1
deyim takımı-1
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:
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
Ö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
î
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.
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
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ı:
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.
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
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.
switch angle
end
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.
for i=1:5
disp('MATLAB')
end
MATLAB
MATLAB
MATLAB
MATLAB
MATLAB
for i=1:5
x=i^2
end
125
x =
x =
x =
x =
16
x =
25
for i=1:5
x=i^2;
end
x
x =
25
for i=1:5
x(i,:)=i^2;
end
x
x =
1
4
9
16
25
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.
clear all;clc
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.'])
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.
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.
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.
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.
disp(' ')
Örnek 4: Öğrenci notlarını girerek genel ortalamayı hesaplayan bir program yazalım.
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.
%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: ');
%Çıkış verileri
fprintf('%s nolu %s; Ortalama Notunuz:%7.2f - Harfsel Karşılığı: %s\n',...
no,ad,not,harf);
disp(' ')
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
Columns 8 through 10
0.3010 -1.0000 0
Ö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
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;
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.
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
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
134
Please verify your choices:
Compiler: Borland C++Builder 6.0
Location: D:\Program Files\Borland
Are these correct?([y]/n): y
Done . . .
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.
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
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