matlab uğur arifoğlu

182
2.15. MATLAB ortamında kullanılan veri türleri MATLAB ortamında çeşitli veri türü tanımlanmıştır. Dizi (array) şeklinde tanımlanan bu veri türleri aşağıda maddeler halinde gösterilmiştir. Dizi, MATLAB ortamında bir adet değişken içerebildiği gibi bir vektör, iki veya çok boyutlu matris de olabilir. 1. Fonksiyon kulpları (function handles) 2. Java türleri 3. Hücre (cell) 4. Yapı (structure) 5. Lojik (logical)- 1 byte uzunluğunda olup, 0 yada 1 değerini alır. 6. Karakter (char)- 2 byte uzunluğunda olup [0, 65535] aralığında bir uzunluğa sahiptir. 7. Sayısal (numerical) 7.1. Tek hassasiyetli sayı (single)- 4 byte uzunluğunda olup [-3e38; 3e38] aralığındaki sayılardır. 7.2. Çift hassasiyetli sayı (double)- )- 8 byte uzunluğunda olup [- 1e308; 1e308] aralığındaki sayılardır. 7.3. İşaretli sayılar 7.3.1. İşaretli tamsayılar (hem pozitif hem de negatif değerleri içerirler) 7.3.1.1. int8 (8 bit işaretli tamsayı):1 byte uzunluğunda olup [-128 ; 127] aralığındaki sayıları içerir. 7.3.1.2. int16 (16 bit işaretli tamsayı): 2 byte uzunluğunda olup [-32768 ; 32767] aralığındaki sayıları içerir. 7.3.1.3. int32 (32 bit işaretli tamsayı): 4 byte uzunluğunda olup [-2147483648 ; 2147483647] aralığındaki sayıları içerir. 7.3.1.4. int64 (64 bit işaretli tamsayı): 8 byte uzunluğunda olup [-92234e14 ; 92234e14] aralığındaki sayıları içerir. 7.3.2. İşaretsiz tamsayılar (sadece pozitif değerleri içerirler) 7.3.2.1. uint8 (8 bit işaretsiz tamsayı):1 byte uzunluğunda olup [0 ; 255] aralığındaki sayıları içerir. 7.3.2.2. uint16 (16 bit işaretsiz tamsayı): 2 byte uzunluğunda olup [0 ; 65535] aralığındaki sayıları içerir. 7.3.2.3. uint32 (32 bit işaretsiz tamsayı): 4 byte uzunluğunda olup [0 ; 4294967295] aralığındaki sayıları içerir. 1 Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Upload: maxidesign11

Post on 30-Jun-2015

1.043 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: MATLAB Uğur Arifoğlu

2.15. MATLAB ortamında kullanılan veri türleri

MATLAB ortamında çeşitli veri türü tanımlanmıştır. Dizi (array) şeklinde tanımlanan bu veri türleri aşağıda maddeler halinde gösterilmiştir. Dizi, MATLAB ortamında bir adet değişken içerebildiği gibi bir vektör, iki veya çok boyutlu matris de olabilir.

1. Fonksiyon kulpları (function handles)2. Java türleri3. Hücre (cell)4. Yapı (structure)5. Lojik (logical)- 1 byte uzunluğunda olup, 0 yada 1 değerini alır.6. Karakter (char)- 2 byte uzunluğunda olup [0, 65535] aralığında bir uzunluğa sahiptir.7. Sayısal (numerical)

7.1. Tek hassasiyetli sayı (single)- 4 byte uzunluğunda olup [-3e38; 3e38] aralığındaki sayılardır.7.2. Çift hassasiyetli sayı (double)- )- 8 byte uzunluğunda olup [-1e308; 1e308] aralığındaki sayılardır.7.3. İşaretli sayılar

7.3.1. İşaretli tamsayılar (hem pozitif hem de negatif değerleri içerirler) 7.3.1.1. int8 (8 bit işaretli tamsayı):1 byte uzunluğunda olup [-128 ; 127] aralığındaki sayıları

içerir. 7.3.1.2. int16 (16 bit işaretli tamsayı): 2 byte uzunluğunda olup [-32768 ; 32767] aralığındaki

sayıları içerir. 7.3.1.3. int32 (32 bit işaretli tamsayı): 4 byte uzunluğunda olup [-2147483648 ; 2147483647]

aralığındaki sayıları içerir. 7.3.1.4. int64 (64 bit işaretli tamsayı): 8 byte uzunluğunda olup [-92234e14 ; 92234e14]

aralığındaki sayıları içerir.7.3.2. İşaretsiz tamsayılar (sadece pozitif değerleri içerirler)

7.3.2.1. uint8 (8 bit işaretsiz tamsayı):1 byte uzunluğunda olup [0 ; 255] aralığındaki sayıları içerir.

7.3.2.2. uint16 (16 bit işaretsiz tamsayı): 2 byte uzunluğunda olup [0 ; 65535] aralığındaki sayıları içerir.

7.3.2.3. uint32 (32 bit işaretsiz tamsayı): 4 byte uzunluğunda olup [0 ; 4294967295] aralığındaki sayıları içerir.

7.3.2.4. uint64 (64 bit işaretsiz tamsayı): 8 byte uzunluğunda olup [0 ; 18447e15] aralığındaki sayıları içerir.

MATLAB ortamında bir dizi içerisinde sayısal bir değer (özel olarak belirtilmemiş ise) çift hassasiyette bir sayı (dizi) olarak tutulur. Bu durumda dizi içerisindeki her eleman için bellekte 8 byte yer ayrılır. Eğer dizi içinde metin de yer alıyorsa metin içindeki her bir karakter için 2 byte yer ayrılır ve karakter dizisi tanımlanmış olur. int8, int16,.., uint8, uint16,...,single, logical, vb. tür dizilerde ise tür dönüşüm fonksiyonları kullanılarak double türü diziler oluşturulur. Fonksiyon kulpları hakkında ileride detaylı bilgiler verileceğinden veri türlerine ‘Hücre’ tanımı ile başlanacaktır.

2.11.1. Hücre (Cell)

Hücre daha sonra açıklanacak olan MATLAB veri türleri içinde yer alır. Hücre, bir çeşit dizidir ve çok boyutlu olabilir. Hücrenin normal dizilerden farkı, içindeki elemanların farklı türden olabilmeleridir. Hücrenin her bir alt parçasında yer alan satırlardaki eleman sayıları birbirlerine eşit olmalıdır, fakat bir parçadaki eleman türü diğer alt parçadaki eleman türünden farklı olabilir. Şekil 2.18’de cell_top adlı 4 alt parçadan oluşan bir hücre yapısı verilmiştir.

1

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 2: MATLAB Uğur Arifoğlu

Şekil 2.18

Şekil 2.18’de verilen hücre yapısının cellA adlı alt parçasında yer alan üç satırdaki sütun sayılarının (örnekte 8 sütun bulunmaktadır) farklı uzunlukta olduğu aksi takdirde MATLAB ortamında hata ile karşılaşılacağı unutulmamalıdır. Benzer ilişki cellC adlı alt parça için geçerlidir. cell_top adlı hücreyi MATLAB ortamında basit bir şekilde tanıtmak için her bir alt parçayı ayrı ayrı tanıtmak, daha sonra bu alt parçaları cell_top adlı hücreyi oluşturacak şekilde bir araya getirmek yolu tercih edilecektir.

>>cellA=[‘function’; ‘length ’; ‘12345678’] (‘enter’)cellA =functionlength 12345678

>>cellB=[3 -5 0.2] (‘enter’)cellB = 3.0000 -5.0000 0.2000>>>>cellC=[2 -3 9 –j 1-2j;0 4 3j 6 88] (‘enter’)cellC= 2.0 -3.0 9.0 0-1.0i 1.0-2.0i 0 4.0 0+3.0i 6.0 88.0 >>>>cellD=[44; -6; –3j; 2+4j; 4; 71; 4j] (‘enter’)cellC =

44.0 -6.0 0 - 3.0i 2.0 + 4.0i 4.0 71.0 0 + 4.0i>>

2

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

cellA

‘function’ ‘length ’ ‘12345678’ ‘12345678’

cellB

3-50.2

cellC

2-39-j1-2j043j688

44-6 -3j2+4j4714jcellD

Page 3: MATLAB Uğur Arifoğlu

Yukarıdaki MATLAB satırları ile ilk adım olarak tüm alt hücreler MATLAB ortamına taşınmış oldu. Bundan sonraki adım tüm alt hücreleri kullanarak cell_top adlı ana hücreyi oluşturmaktır. Hücrenin MATLAB’a tanıtılmasında ‘{‘ ve ‘}’ işaretleri kullanılır;

>>cell_top={cellA cellB ; cellC cellD} (‘enter’)cell_top = [3x8 char ] [1x3 double] [7x1 double] [7x1 double]>>

Yukarıda elde edilen sonuçta da görüldüğü gibi ekranda cell_top adlı hücreyi oluşturan veri tipleri ve bunların boyutları görülmektedir. Kullanıcı isterse cell_top adlı hücrenin her hangi bir alt parçasını (örnek olarak cellA) MATLAB ortamında görüntüleyebilir;

>>cellA (‘enter’)cellA =functionlength 12345678>>

Kullanıcı isterse cell_top hücresinin elemanları hakkında celldisp komutunu kullanarak bilgi alabilir:

>> celldisp(cell_top) (‘enter’)cell_top{1,1} =functionlength 12345678cell_top{2,1} = 44.0000 -6.0000 0 - 3.0000i 2.0000 + 4.0000i 4.0000 71.0000 0 + 4.0000icell_top{1,2} = 3.0000 -5.0000 0.2000cell_top{2,2} = 44.0000 -6.0000 0 - 3.0000i 2.0000 + 4.0000i 4.0000 71.0000 0 + 4.0000i

Kullanıcının cell_top hücresi hakkında dikkat etmesi gereken ilişki türü aşağıda gösterilmiştir:

cell_top(1,1)=cellAcell_top(1,2)=cellBcell_top(2,1)=cellCcell_top(2,2)=cellD

Kullanıcı, cell_top adlı verinin türünü öğrenmek isterse class komutu kullanmalıdır:

>>class(cell_top)

ans =

3

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 4: MATLAB Uğur Arifoğlu

cell

2.11.2. Yapı (Structure)

MATLAB ortamında tanımlı diğer bir veri türü ‘yapı’ dır. Yapı’ların MATLAB ortamında kullanılma nedeni; bir konu hakkında sahip olunan bir çok bilginin bir arada tutulma ihtiyacıdır. Örnek olarak bir kişinin yaşadığı ülke, şehir, mahalle, cadde, sokak, apartman, daire gibi birbirini takip eden zincirleme bilgiler yapı ortamı için bir kullanım alanı oluşturur.

Örnek olarak kimlik adlı bir yapı oluşturulsun. Bu yapı içinde; cinsiyet, ülke, şehir, mahalle, cadde, sokak, apartman, daire gibi alanları (field) içersin. Yapı oluştururken yapı ‘adı’ ile ‘alanlar’ birbirlerinden nokta işareti ile ayrılmalıdır;

>> kimlik.isim= ‘Mehmet Sehit’ (‘enter’)kimlik = isim: 'Mehmet Sehit'>> kimlik.ulke= ‘Turkiye’ (‘enter’)kimlik = isim: 'Mehmet Sehit' ulke: 'Turkiye'>> kimlik.cinsiyet= ‘Erkek’ (‘enter’)kimlik = isim: 'Mehmet Sehit' ulke: 'Turkiye' cinsiyet: 'Erkek'>> kimlik.sehir= ‘Istanbul’ (‘enter’)kimlik = isim: 'Mehmet Sehit' cinsiyet: 'Erkek' ulke: 'Turkiye' sehir: 'Istanbul'

Bu adımdan sonrası sehir adlı alanın alt alanında oluşturulsun;

>> kimlik.sehir.mahalle= ‘Istiklal’ (‘enter’)kimlik = isim: 'Mehmet Sehit' cinsiyet: 'Erkek' ulke: 'Turkiye' sehir: [1x1 struct]

Dikkat edilirse mahalle’nin adı isim olarak değil MATLAB ortamında kapladığı alan (1*1) olarak kullanıcıya verilmektedir. Kullanıcı şahsın oturduğu mahallenin ismini görmek ister ise;

>>kimlik.sehir (‘enter’)ans = mahalle: 'Istiklal'>>işlemi yapılmalıdır.

>> kimlik.sehir.mahalle.cadde= ‘Sakarya’ (‘enter’)kimlik = isim: 'Mehmet Sehit' cinsiyet: 'Erkek' ulke: 'Turkiye' sehir: [1x1 struct]>>

>> kimlik.sehir.mahalle.sokak= ‘30 Agustos’ (‘enter’)

4

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 5: MATLAB Uğur Arifoğlu

kimlik = isim: 'Mehmet Sehit' cinsiyet: 'Erkek' ulke: 'Turkiye' sehir: [1x1 struct]>>>> kimlik.sehir.mahalle.apartman= ‘Zafer’ (‘enter’)kimlik = isim: 'Mehmet Sehit' cinsiyet: 'Erkek' ulke: 'Turkiye' sehir: [1x1 struct]>>>> kimlik.sehir.mahalle.daire_no= ‘1’ (‘enter’)kimlik = isim: 'Mehmet Sehit' cinsiyet: 'Erkek' ulke: 'Turkiye' sehir: [1x1 struct]>>

Kullanıcı mahalle adlı alana yerleştirilen tüm bilgileri görmek isterse aşağıdaki satırı uygulamalıdır:

>> kimlik.sehir.mahalleans = cadde: 'Sakarya' sokak: '30 Agustos' apartman: 'Zafer' daire_no: '1'

fprintf ('çıkışta gösterilmesi istenen ifade', 'ifadenin gösterilme biçimi', değişken listesi)

‘Çıkışta gösterilmesi istenen ifade’: Tırnak içine hangi ifade yazılırsa ekranda bu ifade gözükür.

'ifadenin gösterilme biçimi': Burada, ifadenin MATLAB ortamında aldığı değerin hangi formatta ekrana yazılacağını belirten kodlar kullanılır. Bu kısımda % işaretinin arkasından hassasiyet belirleme ve dönüşüm (c,d,e,E,f,F,g,G, i,o,s,u,x,X) karakterlerinden biri kullanılır. Örneğin s; değişken olarak 'karakter' seçildiği zaman kullanılır. Bu karakterlerin bazılarının ne ifade ettiği aşağıdaki örneklerde gösterilmiştir. Diğer karakterler ile ilgili bilgi ise etkileşimli yardım penceresinden öğrenilebilir. Daha sonra kullanılan \n,\r,\t,\b,\f gibi tanımlar ile de (sırası ile); satırbaşı, yeni satır, sekme, geriye doğru silme ve yeni sayfa işlemi gerçekleştirilebilir.

değişken listesi : Burada ise ifadenin MATLAB ortamında atandığı değişken ismi yazılır.

%a.bf : f ifadesi sayının sabit noktalı olduğu anlamına gelir (default olarak short e formatındadır). f sayısı gösterim olarak ‘a.b’ gibi iki sayıdan meydana gelir. ‘a’ sayısı değişkenin aldığı değerin işareti, tam kısmı ve varsa noktayı da dahil ederek noktadan sonraki rakam sayısını içerir. ‘b’ sayısı ise sabit noktalı sayının noktadan sonra ekrana yazılması istenen rakam sayısını gösterir. Eğer tamsayı için kullanılacak rakam sayısı ‘a’, olması gerekenden az olsa bile ekrana yazılan sonuç hatalı olarak ortaya çıkmaz.

>> sicaklik=1056.789432; (‘enter’)

5

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 6: MATLAB Uğur Arifoğlu

>>fprintf('sicaklik=%4.0fderece',sicaklik) (‘enter’) sicaklik=1057derece >>fprintf('sicaklik = %4.1f derece',sicaklik) (‘enter’) sicaklik = 1056.8 derece

%a.be : e ifadesi sayının üstel olduğu anlamına gelir (default olarak short e formatındadır). e sayısı gösterim olarak ‘a.b’ gibi iki sayıdan meydana gelir. ‘a’ sayısı değişkenin aldığı değerin işareti, nokta için (bir) ve üstel ifade için 5 haneli (e harfi+üssün işareti+üssün değeri) sayıyı içerir. ‘b’ sayısı ise noktadan sonraki sayıyı gösterir.

>>fprintf('sicaklik=%8.3ederece',sicaklik) (‘enter’) sicaklik=1.057e+003derece

%a.bg : g ifadesi sayının üstel olduğu anlamına gelir (default olarak short e formatındadır). g sayısı gösterim olarak ‘a.b’ gibi iki sayıdan meydana gelir. g 'nin e 'den farkı , sayıyı daha da kısaltmasıdır (bazen formata göre sayıyı yuvarlar).

>>fprintf('sicaklik=%4.0g derece \n',sicaklik) (‘enter’) sicaklik=1e+003 derece (bir satır atlandı)

Örnek olarak ‘Ahmet Sadık’ adındaki bir öğrencinin adı, soyadı, okul numarası, ilgili dersi, bu dersten aldığı not alta alta ekrana yazdırılsın. Bunun için fprintf komutundan yararlanılabilir;

>>Ad=’Ahmet’; (‘enter’)>>Soyad=’Sadık’; (‘enter’)>>Numara=’307’; (‘enter’)>>Ders=’Matematik’; (‘enter’)>>Not=45.75; (‘enter’)>>fprintf(‘Ad:%s\nSoyad: %s\nNumara:%s\nDers: %s\nNot:%3.1f’,... Ad,Soyad,Numara,Ders,Not) (‘enter’)Ad:AhmetSoyad: SadıkNumara:307Ders: MatematikNot:45.8

Yukarıda \n komutu her bir bilginin alt alta yazılmasını sağlamaktadır. Eğer yukarıda \n komutu kullanılmasaydı bilgiler aynı satıra yan yana yazılırdı. \n yerine \t konulsaydı sonuçlar aynı satıra fakat aralarına boşluk gelecek şekilde yerleştirilecekti. \n komutundan önce yazılan s komutu ise değişkenin ‘karakter’ formunda olduğunu göstermektedir.

fprintf komutunun kompleks sayıların yalnızca reel kısımlarını gösterdiği unutulmamalıdır. Bu nedenle kompleks sayıların kullanıldığı program ve hesaplamalarda fprintf komutu yerine disp komutunun kullanılması daha uygun olur.

3.2.3. Save As komutu

6

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 7: MATLAB Uğur Arifoğlu

Şekil 3.1

Çalışma alanında kayıtlı olan değişkenlerden arzu edilen kadarı Save As...komutu kullanılarak bir isim altında MATLAB ortamına kaydedilebilir. Şekil 3.1’de gösterildiği gibi Workspace ortamında bulunan değişkenlerden (şekil 3.1’de A, B ve C değişkenleri seçilmiştir) arzu edilenleri shift tuşu ile seçilerek fare’nin sağ tuşuna basıldığında ve ortaya çıkan seçeneklerden Save As…komutu seçilip ve 'tık'lanıldığında (veya şekil 3.1'de Workspace ikonları içinde yer alan Save ikonu kullanıldığında) kullanıcının karşısına şekil 3.2’de verilen pencere çıkar. Bu pencerede istenilen bir dosya adı (ör:yeni) altında A, B ve C değişkenleri kaydedilir.

Şekil 3.23.2.3.1. Import Data komutu yardımı ile MATLAB ortamındaki dosyaların okunması

MATLAB komut penceresinde File menüsü içinde yer alan Import Data seçeneği Fare ile seçilip üzerine ‘tık’lanıldığında kullanıcının karşısına şekil 3.3’de gösterilen pencere gelir. Bu pencerenin sol tarafında yer alan dosyalardan arzu edilen seçilerek Aç komutuna 'tık'lanıldığında şekil 3.3(a) ile verilen pencere ile karşılaşılır.

7

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 8: MATLAB Uğur Arifoğlu

Şekil 3.3

Şekil 3.3(a)

Bu pencere içindeki Finish komutu üzerine Fare ile ‘tık’lanılır ise istenen dosya içeriği MATLAB Workspace ortamına taşınmış olur (şekil 3.3(b)). Resim dosyaları MATLAB ortamında matrisel formda saklanır.

Şekil 3.3(b)

Import Data seçeneği kullanılarak mat,txt,xls (Excel dosyaları) uzantılı dosyalar ve resim dosyaları MATLAB ortamında görüntülenebilir. Import Data komutu yardımı ile Excel dosyaları, Notepad ve WordPad

8

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 9: MATLAB Uğur Arifoğlu

içinde yer alan dosyalar da MATLAB ortamına taşınabilir. Bu dosyalar içinde yer alan Türkçe karakterler bu komut tarafından algılanamaz.

3.2.4. Load komutu

MATLAB ortamında kayıtlı bulunan dosyaları çalışma ortamına (Workspace) getirmek için load komutu kullanılır. Komutun kullanılış biçimi aşağıda gösterilmiştir:

>> load ‘dosya adı’ (‘enter’)

‘dosya adı’ ile belirtilen yere MATLAB ortamında daha önce kaydedilen dosyanın ismi yazılarak (‘enter’) tuşuna basıldığında çalışma ortamına (workspace) bu dosya gelecektir. load komutu ile ancak daha önce tanımlanmış ve MATLAB ortamında saklı olan dosya, Workspace ortamına getirilir..

3.2.5. Data alış verişi

MATLAB yazılımı bir programdan diğer bir programa data verişini (export) veya data alışını (import) mümkün kılan alt yapıya sahiptir. Bu işlemler text olarak yazılmış dosyalarda save ya da load komutları kullanılarak gerçekleştirilir.

Eğer data1.dat adlı bir text dosyası oluşturulmuş ise (long e formatında-bkz.Böl.2);

save data1.dat a b c –ascii komutu ile a, b, c değişkenleri data1.dat adlı dosyada ASCII modunda saklanır. Çeşitli yerlerde kullanılabilen bu verilerin tekrar MATLAB ortamında kullanılabilmesi için bu verilerin MATLAB tarafından anlaşılabilmesini mümkün kılan .m uzantılı hale getirilmesi gerekir. Bu veriler MATLAB içinde load komutu ile yüklenemez, .m dosyası şeklinde çağırılması gerekir. Veriler yalnızca MATLAB içinde kullanılacak ise .mat uzantılı dosya içinde saklanması tavsiye edilir.

save data1.dat a b c –ascii -double komutu ile a b c değişkenleri data1.dat adlı dosyada 16 lı ASCII sistemine göre saklanırlar.

save data1.dat a b c –ascii -tabs komutu ile a b c değişkenleri data1.dat adlı dosyada ASCII kodunda tablo biçiminde saklanırlar.

MATLAB bir dosyadan diğerine data aktarmak (import-export) amacı ile de kullanılabilir. Bunun için tanımlanan komutlar aşağıda gösterilmiştir;

A=csvread(‘dosya adı’,c,r):Bu komutta dosya adı (örneğin: u1.m veya u1.dat veya u1.mat veya u1.txt olan) ve içindeki sayıları birbirleri ile virgül ile ayrılan dosyanın A adlı bir matrise atanması sağlanır. Bu komut içinde yer alan c değeri u1.m dosyasında aktarılmayacak olan satır sayısını (1 numaralı satırdan başlayarak), r ise sütun sayısını (1 numaralı sütundan başlayarak) gösterir. Eğer c ve r her ikisi de sıfır ise bu durumda u1.m dosyasındaki sayıların tümü A matrisine atanacak demektir. Örnek olarak u1.m dosyası aşağıda belirtilen dataları içersin:

1,2,34,5,67,8,9

MATLAB ortamında aşağıda yapılan işlemler incelenmelidir:

>>A=csvread(‘u1.m’,1,2) (‘enter’) % u1.m’in ilk satır ve ilk 2 sütun’u A’ya % aktarılmayacakA= 6 9>>A=csvread(‘u1.m’,1,1) (‘enter’) % ilk satır ve ilk sütun A’ya aktarılmayacakA=

9

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 10: MATLAB Uğur Arifoğlu

5 6 8 9>>A=csvread(‘u1.m’,0,0) (‘enter’) % u1.m’in hepsi A’ya aktarılacakA=1 2 34 5 67 8 9

>>A=csvread(‘u1.m’,) (‘enter’)A=1 2 34 5 67 8 9

csvwrite(‘dosya adı’,A):Bu komut ile A matrisi ‘dosya adı’ kısmında yazılı olan dosyaya (.m, .mat, .txt, .dat uzantılı) kaydedilir. Eğer bu dosyada data var ise bu data değerleri A matrisi ile değiştirilir ve aralarına virgül yerleştirilir. Örnek olarak yukarıda tanımlanan A matrisinin MATLAB ortamında u1.m adlı dosyaya aktarılması istensin:

>> csvwrite(‘u1.m’,A) (‘enter’)

komutu icra edildiğinde u1.m dosyası aşağıdaki hale gelir;

1,2,34,5,67,8,9

Eğer içinde datanın bulunduğu dosya, .m uzantılı değil (örneğin lotus türü bir dosya) ise yukarıda verilen komutta csv yerine wk1 konularak aynı işlemler yapılabilir.

3.2.5.1. fopen komutu

fopen komutu kullanılarak MATLAB ortamında, var olan bir veri dosyası açılabildiği gibi yeni bir veri dosyası da oluşturulabilir. Bu komut MATLAB command window ortamında aşağıdaki biçimlerde uygulanır:

>>bilgi=fopen(‘dosya adi’,’secenek’) (‘enter’)>>[bilgi, mesaj]=fopen(‘dosya adi’,’secenek’) (‘enter’)>>[bilgi, mesaj]=fopen(‘dosya adi’,’secenek’,’format’) (‘enter’)

Yukarıda ‘dosya adi’ ile belirtilen yere MATLAB ortamına taşınacak dosyanın adı yazılır. ‘dosya adi’ boşluğuna yazılan dosya, MATLAB arama motorunun taradığı adresler içinde (öncelikle work dosyasında) olmalıdır. Bu dosya, ya yeni bir data girmek ya da data okumak amacı ile çağırılır. Dosya yeni oluşturuluyor ise work dosyasında açılır. Mevcut olan bir dosya çağırılacak ise önce work dosyasına bakılır orada yoksa diğer MATLAB arama yollarına bakılır. ‘secenek’ boşluğuna yazılacak komut türü; bu dosyanın okuma mı, yazma mı veya hem okuma hem de yazma amaçlı olarak mı açılacağı konusunda MATLAB’a bilgi verir. Tablo 3.1’de bu komut türleri tanıtılmıştır:

Tablo 3.1Komut türü Uygulama biçimi

‘r’ Dosyayı yalnızca okuma amaçlı olarak açar, yazma işlemine izin vermez.‘r+’ Dosyayı hem yazma hem de okuma amaçlı olarak açar.‘w’ Eğer dosya mevcut ise içindeki bilgiyi siler ve içine yazılabilir hale getirir, dosya mevcut

değilse yeni bir dosya açar ve içine yazılabilir hale getirir.‘w+’ Eğer dosya mevcut ise içindeki bilgiyi siler, okunabilir ve yazılabilir hale getirir, dosya

mevcut değilse yeni bir dosya açar, okunabilir ve yazılabilir hale getirir.‘a’ Mevcut bir dosyanın sonuna bilgi eklemek için kullanılır. Dosya mevcut değilse

oluşturur.‘a+’ ‘a’ özelliğine ilave olarak okuma işlemini de mümkün kılar.

10

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 11: MATLAB Uğur Arifoğlu

‘W’ Teyp sürücüleri için kullanılır. Dosyayı ‘Automatic Flushing’ özelliğini kullanmadan yazmaya açar.

‘A’ Teyp sürücüleri için kullanılır. ‘W’ özelliğini kullanır ve bilgileri dosyanın sonuna ekler.

‘dosya adi’ boşluğuna yazılan dosya ikili (binary) koda göre açılıyor ise Tablo 3.1’de gösterilen komut türünün sonuna b eklenir. Dosya text formatlı olarak açılıyor ise komut türünün sonuna t eklenir. İkili sistemde default olarak b olduğu için, komut türünün sonuna bir ek getirilmediği durumda MATLAB dosyayı ikili koda göre açar. Yukarıda verilen komut satırı uygulandığında eğer ‘bilgi’ olarak -1 değeri elde ediliyor ise işlem doğru olarak gerçekleşmemiş işlemde hata oluşmuş demektir (yani dosya MATLAB ortamına taşınamamıştır). Kullanıcı bu değere bakarak fopen komutunun çalışmasını kontrol edebilir.

Yukarıda verilen komut satırı uygulandığında hata var ise ‘mesaj’ olarak hata hakkında bilgi verilir.

‘format’ olarak ; ‘n’ yazılırsa (default) lokal makina formatı, ‘l’yazılırsa IEEE-küçük endian kayan noktalı formatı, ‘b’yazılırsa IEEE büyük endian kayan noktalı formatı kullanılır,‘%f’yazılırsa okutulacak değerlerin sayı olduğu belirtilir.

Örnek olarak giris.dat adlı bir (var olmayan) bir dosya work ortamında (yazılabilir formatta) oluşturulmak istenirse;

>>[bilgi ,mesaj]=fopen(‘giris.dat’,‘wt’) (‘enter’)bilgi = 3mesaj = ''sonucu elde edilir. bilgi, pozitif bir sayı olduğu için yapılan işlem başarı ile gerçekleşmiştir. mesaj olarak ise bir hata bildirisi ortaya çıkmamıştır.

Yukarıda verilen giris.dat dosyası yerine giris.txt adlı text dosyası da açılabilirdi. Bilindiği gibi txt uzantılı dosyalar notepad komutu seçilerek de açılabilir.

Örnek olarak daha önce tanıtılan fprintf komutu ile fopen komutunun birlikte kullanıldığı bir MATLAB programı aşağıda gösterilmiştir:

>>A=[ 2 4 6 8 10 12 14 16 18]; (‘enter’)>>[bilgi,mesaj]=fopen(‘giris.dat’,‘wt’); (‘enter’)>>fprintf(bilgi,’%5f %5f %5f\n’,A); (‘enter’)

Yukarıda gösterilen fprint komutu, A matrisi elemanlarını her bir satırda 3 eleman olacak şekilde (3 adet veriden sonra bir satır atlanacak) giris.dat adlı (yeni oluşturduğu) text dosyasına atar. Yukarıda oluşturulan giris.dat adlı dosyayı okuyabilmek için;

>> !notepad giris.dat (‘enter’)

komut satırı uygulanabilir. Bu işlem yapıldığında şekil 3.4’de gösterilen pencere elde edilir.

Şekil 3.4

3.2.5.2. fclose komutu

11

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 12: MATLAB Uğur Arifoğlu

fclose komutu yazmak ya da okumak için açılan dosyanın, MATLAB’dan ilişkisini kesmek için kullanılır. Bu dosya MATLAB’dan ilişkisi kesilmedikçe (MATLAB çalıştığı sürece), bilgisayardan silinemez. Yukarıda açılan giris.dat adlı dosyanın MATLAB ile ilişkisi kesilmek istenirse;

>> a=fclose(bilgi) (‘enter’)a= 0

a değeri -1 olmadığı için yapılan dosya kapatma işlemi başarı ile sonuçlanmıştır. Aynı işlem;

>> a=fclose(‘all’); (‘enter’)

komut satırı kullanılarak da yapılabilir.

3.2.5.3. fwrite komutu

fwrite, daha önce açılmış bir dosya içine (kullanıcını arzu ettiği) bir veriyi ikili (binary) koda göre aktaran bir komuttur. Aşağıda gösterilen bir yapı altında uygulanır:

>> sayi=fwrite(bilgi,veri,yapı,boşluk) (‘enter’)

Yukarıda verilen komut satırında, bilgi; fopen komutunun uygulanması sonucu elde edilir. veri; kullanıcı tarafından dosya içine aktarılmak istenen (matris formlu) veri (örnek olarak workspace ortamında saklı bulunan bir matris olabilir) adıdır. yapı; girilecek verinin dosya içinde saklanma formatıdır. Saklanma formatları Tablo 3.2’de gösterilmiştir.

Tablo 3.2format Açıklama‘char’ 8-bitlik karakter‘schar’ 8-bitlik işaretli karakter‘uchar’ 8-bitlik işaretsiz karakter‘int8’ 8-bitlik sayı‘int16’ 16-bitlik sayı‘int32’ 32-bitlik sayı‘int64’ 64-bitlik sayı‘uint8’ 8-bitlik işaretsiz sayı‘uint16’ 16-bitlik işaretsiz sayı‘uint32’ 32-bitlik işaretsiz sayı‘uint64’ 64-bitlik işaretsiz sayı‘float32’ 32-bitlik değişken nokta‘float64’ 64-bitlik değişken nokta‘bitN’ N-bitlik işaretli sayı,1≤N≤64‘ubitN’ N-bitlik işaretsiz sayı,1≤N≤64

atlama; her veri arasına bırakılacak boşluğu gösterir. Komut satırının uygulanması sonunda elde edilen sayı; verinin içerdiği data sayısını gösterir. Daha sonra da bahsedileceği gibi MATLAB, bir matrisi arka planda sütün-sütun depolar; 1. sütunun elemanları arkasına 2. sütun ve onun arkasına da 3. sütun elemanlarını ekler (böylece matris sütunları tamamlanıncaya kadar devam edilir) ve sonuç olarak bu matris arka planda bir dizi olarak saklanır.

3.2.5.4. fread komutu

fread; ikili (binary) sisteme göre hazırlanmış bir data dosyasını okuma komutudur. Aşağıda gösterilen format kullanılarak uygulanır:

>>[dizi,sayi]=fread(bilgi,alan,yapı,boşluk) (‘enter’)

12

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 13: MATLAB Uğur Arifoğlu

Yukarıda gösterilen komut satırında, bazı tanımlar yukarıda açıklanmıştı. Komut satırında görülen alan; dosyadan okunması istenen değişken sayısını belirtir, üç farklı şekilde uygulanır:

- alan boşluğuna bir sayı yazılabilir. Bu durumda dosyadan bu sayı adedi kadar veri okunur. Okunan veriler dizi ile belirtilen çıkış değişkenine bir sütun matris olarak atanırlar.

- alan boşluğuna inf komutu yazılabilir. Bu durumda dizi ile belirtilen çıkış değişkenine okunan dosyadaki tüm data değerleri aktarılır.

- alan boşluğuna [a,b] yazılabilir. Bu durumda dosyadaki a*b boyutu içine giren tüm datalar, dizi ile belirtilen matrise a*b boyutlu olarak atanır.

3.2.5.5. fscanf komutu

fscanf; formatlanmış sisteme göre oluşturulmuş bir veri dosyasının okuma komutudur. Aşağıda gösterilen format kullanılarak uygulanır:

>>[dizi,sayi]=fscanf(bilgi,’format’,alan) (‘enter’)

Yukarıda verilen tüm ifadeler daha önce açıklanmıştır. Aşağıdaki uygulama incelenmelidir:

>>A=[ 2,4,6,8,10;12,14,16,18 20]; >>[bilgi,mesaj]=fopen('iris.dat','wt');%iris.dat dosyasi yazma amacli olusturulur>>fprintf(bilgi,'%5f %5f %5f\n',A); %iris.dat dosyasina A verisi yazdiriliyor>>qq=fopen('iris.dat','rt'); % iris.dat dosyasi okuma amacli aciliyor>>[dizi,sayi]=fscanf(qq,'%f',Inf) %iris.dat verileri dizi adli degiskene ataniyor

dizi = 2 4 6 8 10 12 14 16 18 20 sayi = 10

Yukarıda elde edilen sonuçlara bakıldığında okutulan veri sayısının 10 olduğu görülmektedir. Aynı dizi tekrar okutulmak istense, önce fclose komutu ile dizi’nin MATLAB ile bağlantısı kopartılıp sonra fopen komutu kullanılarak MATLAB bağlantısının kurulması gerekir. Aşağıda hem bu işlemin nasıl yapılacağı gösterilmekte hem de [2 5] komutu ile A matris,i gerçek şekli ile ekrana yazdırılmaktadır:

>>fclose(qq);>>qq=fopen('iris.dat','rt'); >>[dizi,sayi]=fscanf(qq,'%f',[2 5]) dizi = 2 4 6 8 10 12 14 16 18 20sayi = 10

3.2.5.6. textread komutu

13

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 14: MATLAB Uğur Arifoğlu

textread komutu, sütun yapısı formatlı ASCII kodlu verileri dosyadan okumak için kullanılır. Aşağıda gösterilen format kullanılarak uygulanır:

[x,y,w,z,..]= textread(‘dosya adi’,’format’,satirno)

Yukarıda görülen komut satırında ‘dosya adi’; açılacak dosyanın adını belirtir. ’format’; sütun-sütun okunacak datanın yapısını gösterir. Bölüm 2’de fprintf komutunda tanıtılan format türleri kullanılır. Örnek olarak %s ifadesi format yerine yazıldığında, okunacak dosyadaki verinin karakter türü olduğu belirtilmiş olur. satirno; dosyadan okutulacak satır sayısını gösteren bir ifadedir. Kısaca, bu komut kullanılarak sayı veya karakter dizilerinden oluşan dosyalar MATLAB ortamında okutulabilir.

Eğer açılacak dosya (ör: okuma.dat), work klasöründe değilde (örneğin) D sabit diskinde deneme adlı alt klasör içinde ise yukarıdaki komut satırında ‘dosya adi’boşluğuna;

[x,y,w,z,..]= textread(‘D:\deneme\okuma.dat’,’format’,satirno)

yazılmalıdır.

Aşağıda textread komutuna ilişkin bir uygulama gösterilmektedir. Bir şirkete iş başvurusu yapan kişilere ilişkin çeşitli bilgiler basvuru.dat adlı dosya içine yerleştirilecektir. Başvuran şahsa ilişkin bilgiler bu dosyaya aşağıdaki sıra gözetilerek yerleştirilecektir:

Adı, Soyadı, Yaşı, Cinsiyeti, Medeni_hali, Egitim_durumu

Yukarıda sayılan bilgileri içeren dosya öncelikle bilgisayar ortamında açılmalıdır. Bunun için aşağıda belirtilen adımların gerçekleştirilmesi gerekir:- MS Windows Başlat çubuğuna ‘tık’lanıldığında açılan pencere içinden Çalıştır seçeneğini seç.- Yukarıda belirtilen işlem yapıldığında açılan pencerede yer alan boşluğa notepad yaz ve Tamam tuşuna

‘tık’la.

Yukarıda belirtilen adımlar gerçekleştirildiğinde açılan Adsız-Notdefteri şekil 3.5’de gösterilmiştir.

Şekil 3.5 Şekil 3.6

Daha sonra başvuru bilgileri şekil 3.6’da gösterildiği gibi satır-satır Adsız adlı Not defterine girilmelidir. Bu işlem de gerçekleştirildikten sonra şekil 3.6’da görülen Dosya menüsü içinde yer alan Save As seçeneği kullanılarak açılan pencerede dosya ismi olarak basvuru.dat adı yazılıp, dosya C:/MATLAB7.01/work klasörü içine yerleştirilmektedir.

Veri dosyalarında her karakter grubu bir sütun olarak algılanır. Bu açıdan bakıldığında şekil 3.6'da görülen veri grubu, 6 sütun-2 satırdan oluşan bir matris gibi düşünülebilir.

Artık, basvuru.dat adı ile work klasörüne yerleştirilen veri dosyası textread komutu kullanılarak okutulabilir. Bu dosyada yer alan veriler; yukarıda da bahsedildiği gibi 2 satır-6 sütundan oluşan bir matris olarak düşünülmelidir. Aşağıda MATLAB ortamında basvuru.dat adlı veri dosyasının textread komutu ile okutulmasını sağlayan komut satırı verilmiştir:

14

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 15: MATLAB Uğur Arifoğlu

>> [adi,soyadi,yasi,cinsiyeti,Medeni_durumu,Ogrenim_durumu]=textread... ('basvuru.dat','%s %s %f %s %s %s')

Yukarıda verilen komut satırının uygulanması sonunda elde edilen ekran görüntüsü aşağıda gösterilmiştir:

adi = 'Ahmet' 'Yesim' 'Mehmet'soyadi = 'Kuru' 'Yagiz' 'Tas'yasi = 26 27 24cinsiyeti = 'E' 'K' 'E'Medeni_durumu = 'Evli' 'Bekar' 'Bekar'Ogrenim_durumu = 'Universite' 'Lise' 'Lise'

Yukarıda verilen program satırında %s; karakter girişler, %f ise sayısal girişler için kullanılmaktadır. Eğer bazı bilgilerin ekranda görülmesi istenmiyor ise format bildiren ifadenin içine '*' işareti yerleştirilmelidir:

>>[adi,soyadi,Ogrenim_durumu]=textread... ('basvuru.dat','%s %s %*f %*s %*s %s')

Yukarıda verilen komut satırının uygulanması sonunda elde edilen ekran görüntüsü aşağıda gösterilmiştir:

adi = 'Ahmet' 'Yesim' 'Mehmet'soyadi = 'Kuru' 'Yagiz' 'Tas'Ogrenim_durumu = 'Universite' 'Lise' 'Lise'

3.3.2. M uzantılı dosyaların MATLAB içinde farklı klasörlere yerleştirilmesi

Kullanıcı MATLAB ortamında oluşturduğu değişik M uzantılı dosyaları farklı klasörlere yerleştirmek isteyebilir. Örneğin eğri çizimleri için geliştirdiği MATLAB dosyalarını ‘egri’ adlı bir klasöre, diferansiyel denklem çözümleri için geliştirdiği dosyaları ise ‘diferansiyel’ adlı bir klasör içine yerleştirmek isteyebilir. Bundan amaç daha sonraki çalışmalarda bu dosyaları aramadan kolayca bulmaktır. Bunun için önce MATLAB içinde work klasörü içinde bir alt klasör açılır ve adına diferansiyel denir. Bu klasörün work adlı klasör içinde olması şart değildir. Böyle bir tercih yapılmasının nedeni MATLAB bilgisayardan ‘uninstall’ edilse bile work

15

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 16: MATLAB Uğur Arifoğlu

klasörünün bilgisayarda hala kalabilme özelliğindendir. MATLAB içinde açılan bir .m uzantılı dosya adresi MATLAB arama motoruna tanıtılmaz ise Command Window ortamında bu dosya ismi yazıldığında bu dosya bulunamaz. Bu nedenle yeni açılan bu klasörün adresi MATLAB’a öğretilmelidir.

Böyle bir işlem için MATLAB masaüstünde File menüsü içindeki Set Path.. seçeneği kullanılır. Örneğin kullanıcı MATLAB ortamında hazırladığı harmonik problem çözümlerini içeren tüm M uzantılı dosyaları harmonik adlı bir klasörde depolamak istesin. Bunun için ilk adım olarak yukarıda bahsedildiği gibi work adlı klasör içinde harmonik adlı bir alt klasör açmak gerekir. Daha sonra bu klasör yolunu MATLAB’a tanıtmak gerekmektedir. Bunun için ise File/Set Path.. yolu ‘fare’ ile seçilmelidir. Bu işlem yapıldığında kullanıcının karşısına şekil 3.5’de görülen pencere çıkar.

Şekil 3.5

Açılan pencere içinde Add Folder seçeneğine ‘tık’lanıldığında kullanıcının karşısına şekil 3.6’da görülen pencere çıkar. Bu pencerede Tamam seçeneği seçildiğinde şekil 3.7’de verilen pencere elde edilir. Bu pencerede görülen sıralama MATLAB motorunun dosya aramadaki öncelik sırasını göstermektedir.

Şekil 3.6 Şekil 3.7

Eğer bu sıralama kullanıcı açısından uygun değilse kullanıcı Move Down seçeneğini kullanarak <C:\MATLAB7\work\harmonik> yolunu alt sıralara taşıyabilir. Şekil 3.5’de Add with Subfolders seçeneği kullanılırsa harmonik adlı alt klasörün altına eklenecek yeni alt klasörlerde bir daha tanıtıma gerek kalmaksızın kendiliğinden arama motorunun arama yoluna eklenecektir. Eğer şekil 3.7’de görülen yollar içinden

16

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 17: MATLAB Uğur Arifoğlu

bazıları kullanıcı tarafından artık kullanılmıyor ise Remove seçeneği kullanılarak bu yollar arama seçenekleri içinden çıkartılabilir. Eğer Revert seçeneği kullanılırsa en son tanıtılan yol işlemi iptal edilir. Default seçeneği kullanılırsa arama yolu varsayılan (eski) yollarına geri döner.

Örnek olarak A sürücüsünde Untitled2.m adlı bir MATLAB dosyası bulunsun. Kullanıcı bu dosyayı C ortamına taşımadan A sürücüsü üzerinden çalıştırmak istediğinde karşısına şekil 3.8'de gösterilen bir pencere çıkar. Bu pencerede kullanıcıya, mevcut klasör içinde Untitled2 adlı dosyanın bulunamadığı veya tanımlı MATLAB yolu içinde bu dosyanın bulunamadığı mesajı verilerek bu dosyayı çalıştırmak için aşağıdaki üç yoldan bir tanesinin seçilmesi gerektiği belirtilmektedir. Seçilen ilk tercih mevcut klasörün değiştirilmesi, ikinci tercih MATLAB path (yolunun) değiştirilmesi ve bu yolun taramada (şekil 3.7) en üste yerleştirilmesidir. Son seçenek ise bu yolun taramada en alta yerleştirilmesidir.

Şekil 3.8 Şekil 3.9

Şekil 3.10Eğer şekil 3.9'da gösterildiği gibi ikinci seçenek fare ile işaretlenir ve OK tuşuna basılırsa, A sürücündeki program çalışır. Kullanıcı MATLAB masaüstünde File menüsü içinde yer alan Set Path… seçeneğine 'tık'larsa şekil 3.10 görüntüsü ile karşılaşılır. Burada görüldüğü gibi A sürücüsü MATLAB tarama motorunun yolunun ilk arayacağı yere yerleştirilmiştir. Eğer şekil 3.10'da Save tuşuna basılmaz ise bu yol süreklilik kazanmaz diğer bir ifade ile bir başka zamanda A sürücüsünde bir MATLAB dosyası çalıştırılması gerekse yukarıda belirtilen tüm işlemlerin tekrar yapılması gerekir. Save tuşuna basıldığında kullanıcının bilmesi gereken diğer önemli bir nokta da; arama motoru bir dosyayı ararken her seferinde A sürücüsüne bakacağından, disket sürücüsünde sürekli bir disketin bulunması gibi anlamsız bir sonuç ortaya çıkacaktır. Sonuç olarak, kullanıcı sık sık A (ya da diğer E, F gibi sabit olmayan) sürücülerden faydalanıyor ise en azından şekil 3.9'da gösterilen en son seçeneği işaretlemesi daha uygun olacaktır. Böylece arama işleminde sabit olmayan sürücü en son taranır ve ancak sabit sürücülerde aranan dosya bulunamaz ise sabit olmayan sürücüler aramaya dahil edilir.

Problem

17

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 18: MATLAB Uğur Arifoğlu

Şekil 4.15’de verilen devrede (büyük oklar çevre akım yönlerini göstermektedir);

;

olduğuna göre sürekli hal koşulları altında ve akımları arasındaki faz farkını derece olarak

hesaplayan bir MATLAB programı yazınız (tüm ilk koşul değerleri 0 alınmıştır).

Şekil 4.15.

Çözüm

Devre çözüm yöntemi olarak çevre akımları yaklaşımı kullanılırsa (çevre akım yönleri saat ibresi dönüş yönü alınmıştır);

yazılabilir. Verilen devrede dal akımları ile çevre akımları arasında

; ;

ilişkisi bulunmaktadır. Aşağıdaki program ve akımları arasındaki faz farkını derece olarak

hesaplamaktadır.

f=50;C=4; L1=5;L2=6; R1=1; R2=2; R3=3;XL1=2*pi*f*L1; XL2=2*pi*f*L2; XC=1/(2*pi*f*C);Z=[R1+R3+j*(XL1-XC) -(R3+j*XL1); -(R3+j*XL1) R2+R3+j*(XL1+XL2)];V=[10*exp(j*0);-15*exp(-j*pi/3)];akim=inv(Z)*V;i1aci=angle(akim(1));i2aci=angle(akim(2));farkaci=(i1aci-i2aci)*180/pi

Yukarıda verilen programın çalıştırılması sonunda elde edilen açı farkları aşağıda gösterilmiştir;>>farkaci = -37.19625.2.3. Bir matrisin elemanlarının bir kısmı ile diğer bir matris oluşturulması

MATLAB ortamında daha önce tanımlanmış bir matrisin bazı satır veya sütunlarını kullanarak yeni matrisler elde etmek mümkündür. Aşağıdaki örnekler incelenmelidir;

>>h=[1 2 3 (‘enter’) 4 5 6 (‘enter’) 7 8 9] (‘enter’)h= 1 2 3 4 5 6 7 8 9

18

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

)t(i1

)t(i2)t(i3

cıI 2cI

Page 19: MATLAB Uğur Arifoğlu

>>A=h(:,2) (‘enter’)A=

2 5 8

Yukarıda verilen örnekte h matrisinin 2 numaralı sütunu A matrisine atanmaktadır. h matrisinin satır hanesinde yer alan (:) işareti, satırlar ile ilgili bir işlemin yapılmayacağını göstermektedir

>> B=h(1,:) (‘enter’)B = 1 2 3

Yukarıda verilen örnekte h matrisinin 1 numaralı satırı B matrisine atanmaktadır. h matrisinin sütun hanesinde yer alan (:) işareti, sütunlar ile ilgili bir işlemin yapılmayacağını göstermektedir

>>f=[1,2,3;4,5,6;7,8,9;10,11,12] (‘enter’)f = 1 2 3 4 5 6 7 8 9 10 11 12

>>C=f(:,2:3) (‘enter’)C = 2 3 5 6 8 9 11 12

Yukarıda verilen örnekte f(:,2:3) ifadesinde virgülün önünde yer alan (:) işareti, f matrisinde satır işleminin yapılmayacağını göstermektedir. Virgülün sağında yer alan 2:3 ise f matrisinin 2. sütündan 3. sütuna kadar tüm sütunlarının C matrisine atanacağını göstermektedir.

>> G=f(1:3,:) (‘enter’)G = 1 2 3 4 5 6 7 8 9

Yukarıda verilen örnekte f(1:3,:) ifadesinde virgülün solunda yer alan 1:3 işareti, f matrisinde 1. satırdan 3. satıra kadar tüm satırların G matrisine atanacağını göstermektedir. Virgülün sağında yer alan (:) işareti ise f matrisinde sütun işleminin yapılmayacağını göstermektedir.

>> P=f(3:4,1:2) (‘enter’)

P = 7 8 10 11

Yukarıda verilen örnekte f(3:4,1:2) ifadesinde virgülün hem solunda hem sağında sayılar yer aldığı için, f matrisinde hem satır hem de sütün işlemlerinin yapılacağı anlaşılmaktadır. f matrisinde 3. satırdan 4. satıra kadar tüm satır elemanları ile f matrisinde 1. sütundan 2. sütuna kadar tüm sütun elemanlarının ortak olanlarının (kesişim kümesi) p matrisine atanacağını göstermektedir.

Yukarıdaki işlem aşağıda verilen komut ile de gerçekleştirilebilir;

>> P=f([3 4],[1 2]) (‘enter’)

19

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 20: MATLAB Uğur Arifoğlu

P = 7 8 10 11

veya

>> P=f([3,4],[1,2]) (‘enter’) P = 7 8 10 11

Eğer f matrisinin yalnızca 1. ve 3. satırları ile 1. ve 3. sütunları kullanılarak E adlı yeni bir matris elde edilmek istenirse aşağıdaki program satırı uygulanabilir;

>>E=f([1 3], [1 3]) (‘enter’)E = 1 3 7 9

Yukarıdaki satır içinde 1 ve 3 rakamları arasına virgül yerleştirilir ise sonuç yine aynı olacaktır.

Kolon operatörü (:) kullanılarak da benzer işlemler yapılabilir. Aşağıdaki örnek incelenmelidir;

>> M=[0.9 0.8 0.82 0.9;0 1 4 0.7;0.6 0.4 0.6 0.1;8 0.1 0.7 0.4]M = 0.9000 0.8000 0.8200 0.9000 0 1.0000 4.0000 0.7000 0.6000 0.4000 0.6000 0.1000 8.0000 0.1000 0.7000 0.4000

>>F=M([1:3],[2:2:4]) (‘enter’)F = 0.8000 0.9000 1.0000 0.7000 0.4000 0.1000

Yukarıda verilen örnekte M matrisinin 1. (dahil) ve 3. (dahil) satırları arasında kalan satırları ile 2. (dahil) sütunundan 4. (dahil) sütununa kadar olan sütunlar ikişer ikişer artırıldığında elde elden sütun elemanları ile F matrisi oluşturulmaktadır.

Şu ana kadar verilen örneklerde ‘M(…’ ifadesinin içinde vektör kullanıldı. Aşağıda verilen örnekte ise vektör yerine matris gösterimi kullanılmıştır;

>>K=M([2 1;4 2],[2 1;3 1]) (‘enter’)

Yukarıda verilen MATLAB satırının uygulanması sonunda nasıl bir sonuç elde edileceği aşağıda adımlar halinde gösterilmiştir:

>>[2 1;4 2] (‘enter’) 2 1 4 2

matrisi MATLAB ortamında (daha önce de bahsedildiği gibi) dizi olarak tutulmaktadır. Diğer bir ifade ile 1 . sütunun arkasına 2. sütün, 2. sütunun arkasına 3. sütun ve 3. sütunun arkasına ise 4. sütun eklenir. Buna göre yukarıdaki;

2 14 2

20

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 21: MATLAB Uğur Arifoğlu

matrisi MATLAB ortamında dizi olarak (2 4 1 2) şeklinde saklanır. Bu açıklamadan sonra K=M([2 1;4 2],.. satırının MATLAB ortamında uygulanışı aşağıdaki gibi olacaktır:

0 1.0000 4.0000 0.70008.0000 0.1000 0.7000 0.40000.9000 0.8000 0.8200 0.9000 0 1.0000 4.0000 0.7000

Yukarıda görüldüğü gibi M matrisinin 2. satırı K matrisinin 1. satırı, M matrisinin 4. satırı K matrisinin 2. satırı, M matrisinin 1. satırı K matrisinin 3. satırı, M matrisinin 2. satırı ise K matrisinin 4. satırı olmaktadır.

[2 1;3 1] matrisi MATLAB ortamında;

2 13 1

olduğuna göre yukarıda satır için yapılan işlemler sütun için yapılmalıdır. Buna göre yukarıda elde edilen son matrisin sütunları K=M(….,[2 1;3 1]) işlemine maruz bırakılırsa 1. sütun yerine 2. sütun, 2. sütun yerine 3. sütun, 3. sütun yerine 1. sütun, 4. sütun yerine ise 1. sütun gelecektir:

1.0000 4.0000 0 00.1000 0.7000 8.0000 8.00000.8000 0.8200 0.9000 0.90001.0000 4.0000 0 0

Böylece;

>>K=M([2 1;4 2],[2 1;3 1]) (‘enter’) K = 1.0000 4.0000 0 0 0.1000 0.7000 8.0000 8.0000 0.8000 0.8200 0.9000 0.9000 1.0000 4.0000 0 0

elde edilecektir.

Bir diğer örnek olarak aşağıdaki MATLAB satırı incelenmelidir;

>>T=K([1 5 6 8 3 12]) (‘enter’) T = 1.0000 4.0000 0.7000 4.0000 0.8000 0

Yukarıdaki sonucu anlayabilmek için matris elemanlarının MATLAB ortamında dizi olarak saklanıldığının tekrar hatırlanması gerekir:

K=(1 0.1 0.8 1 4 0.7 0.82 4 0 8 0.9 0 0 8 0.9 0)

Buna göre K matrisinin 1.,5.,6.,8.,3. ve 12. elemanlarının T vektörünü oluşturduğu anlaşılmaktadır.

Yukarıdaki gösterim kullanılarak K matrisinin bazı eleman değerleri değiştirilebilir:

>>K([1 5 6 8 3 12])=99 (‘enter’) K = 99.0000 99.0000 0 0 0.1000 99.0000 8.0000 8.0000 99.0000 0.8200 0.9000 0.9000 1.0000 99.0000 99.0000 0 Görüldüğü gibi K matrisinin 1., 5., 6., 8., 3. ve 12. eleman değerleri 99 sayısı ile değiştirilmektedir.

21

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 22: MATLAB Uğur Arifoğlu

Matrisel gösterim kullanılarak da bir matrisin bazı satır ve sütun eleman değerleri değiştirilebilir. Aşağıdaki örnek incelenmelidir:

>>K([1 3],[2 4])=0.99 (‘enter’) K = 99.0000 0.9900 0 0.9900 0.1000 99.0000 8.0000 8.0000 99.0000 0.9900 0.9000 0.9900 1.0000 99.0000 99.0000 0

Yukarıda gösterildiği gibi K matrisinin 1. satır ve 3. satır ile 2. sütun ve 4. sütun elemanlarının içinde ortak olanlarının (kesişim kümesi) değerleri 0.99 yapılmaktadır.

Yukarıdaki gösterimde bir çok eleman değeri bir tek eleman değeri ile değiştirildi. Aynı anda birden fazla eleman değeri de değiştirilebilir. Aşağıdaki örnekler incelenmelidir:

>>K([1 3],[2 4])=[1 -1;2 -2] (‘enter’) K = 99.0000 1.0000 0 -1.0000 0.1000 99.0000 8.0000 8.0000 99.0000 2.0000 0.9000 -2.0000 1.0000 99.0000 99.0000 0

Görüldüğü gibi K matrisinin 1. ve 3. satır ile 2. ve 4. sütun elemanlarının içinde ortak olanlarının (kesişim kümesi) değerleri (4 adet eleman)

1 -12 -2

elemanları ile yer değiştirmektedir.

>> K(3, [2:4])=3:2:7 (‘enter’) K = 99.0000 1.0000 0 -1.0000 0.1000 99.0000 8.0000 8.0000 99.0000 3.0000 5.0000 7.0000 1.0000 99.0000 99.0000 0Eğer kesişim küme eleman sayısı ile yerlerine atanan eleman sayısı arasında uyumsuzluk olur ise hata bildirimi ile karşılaşılacaktır.

MATLAB ortamında daha önce tanımlanmamış bir matris kolon gösterimi yardımı ile oluşturulabilir. Aşağıdaki örnekler incelenmelidir:

>>s(1:3,1:4)=5 (‘enter’) s = 5 5 5 5 5 5 5 5

5.2.4. Matrisleri birleştirerek yeni bir matris oluşturulması

MATLAB ortamında mevcut matrisleri kullanarak yeni bir matris oluşturulması işlemi yapılırken dikkat edilmesi gereken en önemli nokta birleştirilen matrisler arasındaki boyut uyumudur. Burada matris oluşturmak için rand komutundan faydalanılacaktır (rand komutunun her uygulanışında –matris boyutu aynı olsa bile-farklı değerler içeren bir matris elde edileceği unutulmamalıdır) :

>> a1=rand(3,2) % 3 satır, 2 sütunluk rasgele elemanlardan oluşan matris oluşturuluyor a1 = 0.4103 0.3529

22

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 23: MATLAB Uğur Arifoğlu

0.8936 0.8132 0.0579 0.0099>> a1=rand(3,4) (‘enter’) a2 = 0.1389 0.6038 0.0153 0.9318 0.2028 0.2722 0.7468 0.4660 0.1987 0.1988 0.4451 0.4186

>> a1_2=[a1 a2] (‘enter’) a1_2 = 0.4103 0.3529 0.1389 0.6038 0.0153 0.9318 0.8936 0.8132 0.2028 0.2722 0.7468 0.4660 0.0579 0.0099 0.1987 0.1988 0.4451 0.4186

>> a3=rand(3,6) (‘enter’) a3 = 0.8462 0.6721 0.6813 0.5028 0.3046 0.6822 0.5252 0.8381 0.3795 0.7095 0.1897 0.3028 0.2026 0.0196 0.8318 0.4289 0.1934 0.5417

>> a1_2_3=[a1_2;a3] (‘enter’) a1_2_3 = 0.4103 0.3529 0.1389 0.6038 0.0153 0.9318 0.8936 0.8132 0.2028 0.2722 0.7468 0.4660 0.0579 0.0099 0.1987 0.1988 0.4451 0.4186 0.8462 0.6721 0.6813 0.5028 0.3046 0.6822 0.5252 0.8381 0.3795 0.7095 0.1897 0.3028 0.2026 0.0196 0.8318 0.4289 0.1934 0.54175.2.5. MATLAB Command Window ortamında tanımlı bir matrisin bazı eleman değerlerinin Array

Editor ortamında değiştirilmesi

Şekil 5.1

Şekil 5.1’de Command Window ortamında K matrisi yazılır ve ('enter') tuşuna basılırsa Workspace ortamında K adlı (sarı renkli) ikon ortaya çıkar. Bu ikon üzerine ‘fare’ ile gelinip çift adet ‘tık’lanıldığında şekil 5.1(a)’da verilen Array Editor ekran görüntüsü ile karşılaşılır. Şekil 5.1(a)’da görülen K matrisinin

23

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 24: MATLAB Uğur Arifoğlu

Şekil 5.1(a) Şekil 5.1(b)

hangi eleman (yada elemanları) değiştirilecek ise ‘fare’ ile o elemanın üzerine ‘tık’lanılarak ortaya çıkan siyah çerçeve içine istenilen (yeni) değer klavye ile girilir. Daha sonra değiştirilen eleman dışında kalan herhangi bir eleman üzerine fare ile 'tık'lanılarak şekil 5.1(a)'da görülen siyah pencere kapatılır. Bu işlem bittikten sonra Array Editor penceresinin File menüsü içinde yer alan Close Editor (veya Close K) seçeneği kullanılarak bu ortamdan çıkılır. Böylece K matrisinin değeri değiştirilmiş olur. Eğer kullanıcı fare yardımı ile şekil 5.1(b)'de gösterildiği gibi satırları seçer ve daha sonra farenin sağ tuşuna 'tık'larsa şekil 5.1(c)'de gösterilen pencere açılır. Bu pencere içinde Delete komutu seçilirse şekil 5.1(d)'de verilen pencere ile karşılaşılır. Bu pencere içinde Shift cell up seçeneğini kullanır ise şekil 5.1(e)'de verilen sonuç matris elde edilir. Burada görüldüğü gibi işaretlenen satırlar '0' a eşitlenmiştir. Kullanıcı şekil 5.1(f)'gösterildiği gibi sütunları fare ile seçer, yukarıda belirtilen işlemler sonunda şekil 5.1(d)'de verilen pencereye ulaşır ve Shift cell left komutuna 'tık'larsa, K matrisinin işaretlenen sütun elemanları '0'a eşitlenir (şekil 5.1(g)).

Şekil 5.1(c) Şekil 5.1(d)

Şekil 5.1(e) Şekil 5.1(f)

24

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 25: MATLAB Uğur Arifoğlu

Şekil 5.1(g)

5.2.6. Bir matrisin MATLAB Command Window ortamında boyutunun değiştirilmesi

MATLAB ortamında kayıtlı bir matrisin boyutunun değiştirilmesi iki türlü olabilir: Matris boyutu büyültülebilir (genişletilebilir), matris boyutu küçültülebilir (daraltılabilir). Örnek olarak C1 matrisi aşağıdaki gibi verilmiş olsun:

>> C1= [1 2 3;4 5 6] (‘enter’) C1 = 1 2 3 4 5 6

C1 matrisi 2*3 boyutundadır. Örnek olarak aşağıdaki komut satırı yardımıyla C1 matrisi 3*3 boyutuna genişletilebilir. Genişletilen C1 matrisinin yeni eleman değerleri (örneğin) sıfır olsun:

>> C1([3:3], [1:3])=0 (‘enter’) C1 = 1 2 3 4 5 6 0 0 0

Eğer C1 matrisi daraltılmak istenir ise silinmek istenen satır ve (veya) sütun eleman değerleri boş diziye atanmalıdır. Yukarıdaki C1 matrisinin (örneğin) 2. satırı silinerek 2*2 boyutuna indirgenmek istenirse, aşağıdaki komut satırı uygulanmalıdır:

>> C1(2,:)=[ ] (‘enter’) C1 = 1 2 3 0 0 0

5.2.6.1. Bir matrisin MATLAB Editor ortamında boyutunun değiştirilmesi

Şekil 5.2(a) Şekil 5.2(b)

Şekil 5.1'de görülen Array Editor ortamındaki K matrisinin 3. ve 4. sütunlarının silinmesi istense, önce şekil 5.2(a)'da gösterildiği gibi fare yardımı ile silinmesi gereken sütunlar işaretlenir. Daha sonra farenin sağ tuşuna 'tık'lanıldığında açılan pencere içinde (şekil 5.2(a)) Delete komutu seçilir. Bu işlem sonunda şekil 5.2(b)'de gösterilen pencere açılır. Bu pencere içinde Entire column seçeneğine 'tık'lanılıp OK tuşuna basılırsa, şekil 5.2(c) ile verilen pencere elde edilir. Burada da görüldüğü gibi K matrisinin boyutu küçülmüştür. Eğer K matrisinin şekil 5.2(d)'de gösterildiği gibi 3. ve 4. satırları silinmek isteniyor ise önce bu satırlar fare ile seçilir, daha sonra yukarıda anlatıldığı gibi şekil 5.2(b) penceresine ulaşılır. Bu sefer bu pencerede Entire row seçeneğine 'tık'lanılıp OK tuşuna basılırsa, şekil 5.2(e) ile verilen sonuç elde edilir.

25

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 26: MATLAB Uğur Arifoğlu

Şekil 5.2(c) Şekil 5.2(d)

Şekil 5.2(e) Şekil 5.2(f)

Eğer kullanıcı K matrisinin boyutunu artırmak istiyor ise şekil 5.2(f)'de göstertildiği gibi (örneğin 5. bir sütun ilave etmek için) fare ile 5. sütundaki herhangi bir hücreye 'tık'layarak açılan siyah pencere içine klavye yardımı ile istediği değeri girebilir. Benzer işlemi aynı sütunun diğer elemanları içinde yapmalıdır. Aksi halde diğer eleman değerleri kendiliğinden '0'a atanır.

5.2.9. MATLAB ortamında tanımlı bir matrisin yeniden düzenlenmesi

Daha önce de bahsedildiği gibi boyutu ne olursa olsun tüm matrisler MATLAB arka planında bir boyutlu bir dizi olarak saklanır. Kullanıcı MATLAB ortamında verilen bir matrisin boyunu (eleman değerleri aynı kalmak şartı ile) değiştirmek istediğinde yukarıda bahsedilen gerçeği unutmamalıdır.

Örnek olarak 3*4 boyutunda olan N matrisi:

>> N=[1 2 3 4;5 6 7 8;9 10 11 12] (‘enter’)N = 1 2 3 4 5 6 7 8 9 10 11 12

olsun. Bu matrisi MATLAB arka planında;

>>N(:) (‘enter’)ans = 1 5 9 2 6 10 3 7 11 4 8 12

olarak saklanır. N matrisinin boyutu reshape komutu kullanılarak değiştirilebilir:

26

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 27: MATLAB Uğur Arifoğlu

M=reshape (N,a,b): N matrisinin elemanlarını a satır sayılı b sütun sayılı M adlı matris içinde saklar.>>M=reshape(N,4,3) (‘enter’)M = 1 6 11 5 10 4 9 3 8 2 7 12

Eğer MATLAB ortamında saklı M matrisinin satırları 180 derece ters çevrilmek istenirse fliplr komutu kullanılmalıdır;

K=fliplr(M): M matrisinin satır elemanlarını 180 derece ters çevirerek K adlı matris içine atar:>> K=fliplr(M) K = 11 6 1 4 10 5 8 3 9 12 7 2

Eğer MATLAB ortamında saklı K matrisinin 1. satırı son satır, son satırı 1. satır yapılıp diğer satırlarda buna göre düzenlenmek istenir ise flipud komutu kullanılmalıdır;

T=flipud(K): M matrisinin satır sıralamasını ters çevirerek T adlı matris içine atar:>> T=flipud(K) T = 12 7 2 8 3 9 4 10 5 11 6 1

Eğer MATLAB ortamında saklı T matrisi saatin dönüş yönünün ters istikametinde 90 derece döndürülmek istenir ise rot90 komutu kullanılmalıdır:

S=rot90(T): T matrisini 90 derece saat ibresinin hareket yönünü ters yönünde döndürür ve elde edilen matrisi S adlı matrise atar.>> rot90(T)ans = 2 9 5 1 7 3 10 6 12 8 4 11

5.2.12. Çok boyutlu matris yapıları

Buraya kadar kullanılan matrisler iki boyuta sahipti. MATLAB ortamında çok boyutlu matris yapıları da tanımlıdır. Üç boyutlu bir matrisi tanımlamak için şöyle bir örnek verilebilir: Üç boyutlu matrisin ilk iki boyutu kitabın bir sayfasını (x,y-düzlemi), üçüncü boyutu ise bu sayfadan sonraki (arkaya doğru) herhangi bir sayfayı temsil etsin (z ekseni). Örnek olarak b1 matrisi 2 satır 3 sütun ve 2 sayfadan oluşan bir eser olsun. b1 matrisinin ilk sayfası;

>> b1(:,:,1)=[1 3 5;7 9 11] (‘enter’)b1 = 1 3 5 7 9 11

27

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 28: MATLAB Uğur Arifoğlu

olsun. b1 matrisinin 2. sayfası ise;

>> b1(:,:,2)=[0 2 4;6 8 10] (‘enter’) b1(:,:,2) = 0 2 4 6 8 10

olsun. Eğer MATLAB ortamında b1 matrisinin ne olduğu merak edilirse;

>> b1 (‘enter’) b1(:,:,1) = 1 3 5 7 9 11b1(:,:,2) =

0 2 4 6 8 10

elde edilir. Eğer b1 matrisinin boyutu merak edilirse;

>>ndims(b1) (‘enter’)ans = 3

bulunur. b1 matrisinin ölçüsü merak edilirse;>> size(b1) (‘enter’)ans = 2 3 2

elde edilir. Böylece b1 matrisinin 2*3*2 ölçülerinde olduğu anlaşılmaktadır.

Dört boyutlu bir matrise şöyle bir örnek verilebilir: İlk iki boyut matrisin satır ve sütun boyutunu, 3 . boyut bu matrisin kitabın hangi sayfasında bulunduğunu (diğer bir ifade ile sayfa numarasını), 4. boyut ise kitabın bir çok kitabın sırayla yerleştirildiği rafta soldan (yada sağdan) kaçıncı kitap olduğunu belirten sayı olabilir. Eğer bu örnek daha da geliştirilirse 5. boyut kitabın kaçıncı rafta olduğunu, 6. boyut rafı içeren dolap numarasını, 7. boyut dolap sırasını (soldan yada sağdan), 8. boyut dolapları içeren oda numarasını, 9. boyut odanın bulunduğu kat numarasını vb. temsil edebilir. Matrisin boyutu arttıkça b1 matrisini takip eden parantez içindeki virgül sayısı da artacaktır.

Okuyucunun unutmaması gereken önemli bir nokta da, her bir boyut için yeni bir matris tanımlanması gereğidir. Örnek olarak b1 eserinin 3 sayfalı olduğu düşünülürse 3. sayfaya ilişkin matrisin MATLAB’a tanıtılması gerekir. Bunun için ise aşağıdakine benzer bir işlem gerçekleştirilmelidir:

>> b1(:,:,3)=[-2 13 44;62 83 110] (‘enter’)

5.5. Ekranın birden çok çizim için pencerelere ayrılması

subplot komutu ekranı birden çok alt çizim ekranlarına ayırır. Örnek olarak; eğer iki tane çizim aynı ekran üzerinde yapılacak ise bunlar ya (yan yana) üst sağ ve üst sola yerleştirilir yada (üst üste) alt sağ ve alt sola yerleştirilir. Eğer dört adet çizim yapılacak ise iki adet üste, iki adet alta çizim yapılabildiği gibi 4 tanesi yan yana da çizdirilebilir. Bu komut; subplot(n,m,p) biçiminde kullanılır. Burada çizim yapılacak şekilleri bir matrisin elemanları olarak görmek mümkündür. Bu durumda n; satır sayısını, m; sütun sayısını gösterir. p ise çizilen alt pencerenin kaçıncı alt pencere olduğunu gösterir. Pencere sayısı soldan sağa ve yukarıdan aşağıya doğru numaralanır. Örnek olarak, subplot(2,1,1) komutu yazıldığında bu komutu takip eden plot komutu ile çizdirilecek olan şekil, (ekran bir matris olarak düşünülerek) matrisin (n=2) ikinci satır (m=1) birinci sütununa yerleştirilir. Bu şekil (p=1) ilk şekil olacaktır. Örnek olarak subplot (222) yazıldığında bu komutu

28

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 29: MATLAB Uğur Arifoğlu

takip eden plot komutu ile verilen şekil dört parçaya ayrılan ekranın (ikinci satır ikinci sütun) sağ altına yerleştirilir ve bu ikinci şekil (p=2) olmalıdır.

5.6. Plot komutu kullanarak eğrinin daha dar aralıkta çizdirilmesi

Kullanıcı plot komutu ile çizdirmek istediği y=f(x) fonksiyonunda (program satırları içinde x’i daha geniş aralıkta belirlese bile) x’i daha dar aralıkta da çizdirebilir. Aşağıdaki örnek incelenmelidir:

figure(1)x=0:0.5:50;y=3*x.^2;plot(x,y);title('ikinci dereceden egri cizimi');xlabel('x'),ylabel('y'),grid;figure(2)plot(x(1:5),y(1:5));title('ikinci dereceden egri cizimi');xlabel('x'),ylabel('y'),grid;

Şekil 5.9 Şekil 5.10

Şekil 5.9’da (Figure No.1) x değişkeni 0:0.5:50 aralığında değiştirilmektedir. Şekil 5.10’da ise (Figure No.2) x değişkeni ilk 5 değeri için çizdirilmektedir. Böylece kullanıcı x’in değişimi içinde istediği değişim aralığını daha hassas olarak görme imkanına sahip olabilmektedir. Burada dikkat edilmesi gereken nokta ise x ve y’nin incelendiği eleman sayılarının aynı boyutta olmasıdır (bu örnekte 5). Aksi halde kullanıcı hata uyarısı ile karşılaşacaktır.5.7. Figure penceresini kullanarak eğrinin eksenleri ile oynanması

Şekil 5.9’da gösterilen Figure No.1 penceresinde Edit seçeneği içine girilip Axes Properties alt seçeneği ‘tık’lanıldığında şekil 5.11’de verilen görüntü ile karşılaşılır. Eğer X ekseni ile ilgileniliyor ise bu pencerede X axis ikonuna 'tık'lanılarak açılan alt pencere içinde yer alan limits seçeneğinin sağ tarafına alt ve üst X değerleri klavye ile girilebilir. Benzer işlemler arzu edilir ise Y (eğer çizim üç boyutlu ise Z) ekseni için de yapılabilir. Font seçeneğine 'tık'lanıldığında ise açılan pencere ile eksenlerde kullanılan harflerin boyut ve fontları seçilir. Şekil 5.11'de yer alan Auto seçeneği işaretlenirse, kullanıcı sınırların tespitini MATLAB'a bırakır. X scale seçeneği ile X ekseninin değişiminin lineer mi yoksa logaritmik mi olacağı belirlenir. Bu pencere içinde Title boşluğuna eğrinin ismi, Colors seçeneğinin yanındaki ilk kutucuk ile şeklin arka plan rengi, ikinci kutucuk ile de X, Y ve Z eksenleri üzerindeki text formatındaki harflerin rengi belirlenir. Grid kutucuğu hangi eksen için işaretlenir ise o eksen ızgara formunda oluşturulur.

29

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 30: MATLAB Uğur Arifoğlu

Şekil 5.11

Eğer kullanıcı Şekil 5.11'de Reverse seçeneğini işaretler ise eksen üzerindeki sayılar ters döndürülür, örneğin X ekseni 0'dan 50'ye kadar sıralanırken, Reverse seçeneğine 'tık'lanıldığında X ekseni 50'dan 0'a doğru azalır. Box komutu işaretlendiğinde ise Y'nin en üstteki değerinin ve X'in en sağdaki değerinin hizasındaki (kesik kesik) çizgiler düz çizgiye döndürülür. Şekil 5.11'de Ticks..ikonuna 'tık'lanırsa şekil 5.12'de görülen pencere ile karşılaşılır. Bu pencere içinde yer alan seçenekler kullanılarak X, Y ve Z ekseni üzerinde yer alan değerler değiştirilebilir (Insert), silinebilir (Delete). Step by komutu ile seçilen eksen üzerindeki değerlerin artışı belirlenebilir. Bu işlemler yapılırken fare yardımı ile şekil 5.12'de gösterilen tablo içindeki pencereye 'tık'lanılarak aktif hale gelen pencere içine klavye yardımı ile yeni bir değer yazılabilir (şekil 5.13).

Şekil 5.12 Şekil 5.13

30

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 31: MATLAB Uğur Arifoğlu

Şekil 5.14 Şekil 5.15

Eğer kullanıcı şekil 5.11'de fare yardımı ile eğri üzerine 'tık'larsa şekil 5.14 ile verilen pencere ile karşılaşılır. Bu pencerede X Data Source seçeneğinin sağ tarafında yer alan boşlukta (Auto yazısının bulunduğu yer) ok işaretine 'tık'lanıldığında, kullanıcının karşısına Workspace ortamında o anda yer alan değişkenlerin listesi çıkar. Bu değişken listesinden bir tanesi seçilir ise bu seçilen diziyi oluşturan değerler, X eksenini oluşturan yeni değişkenler olarak belirlenir.. Benzer şeyler Y (ve varsa Z) ekseni için söylenebilir. Plot type komutu ile eğri (line ,bar, area, stem ve stairs) türlerinden birisine uygun şekilde çizdirilir. Line komutuna tık'lanıldığında ise kullanıcının karşısına çizgi türleri (düz,kesik çizgi vb.) seçenekler çıkar. Marker komutu ile de eğriyi oluşturan her bir noktanın (üçgen,kare, yuvarlak,yıldız vb.) şekillerden hangisine uygun olacağına karar verilir (none seçeneği kullanılırsa klasik çizim şekli uygulanır). Line komutu hizasındaki renk seçim kutusu yardımı ile çizginin rengi, Marker komutu hizasındaki renk seçim kutusu yardımı ile de işaret rengi belirlenir. Figure Color seçeneği ile şekil 5.14'de x-y eksenlerinin ve şekil adının bulunduğu pencere rengi belirlenir. Şekil 5.11'de Inspector kutusuna 'tık'lanıldığında, şekil 5.15'de gösterilen arka plan ayar penceresi ile karşılaşılır. Bu pencere yardımı ile eksenlere ilişkin detaylı ayarlar gerçekleştirilir. Eğer şekil 5.14'de gösterilen Inspector seçeneğine 'tık'lanılır ise şekil 5.16'da gösterilen iki boyutlu eğriye ilişkin arka plan ayar seçenekleri ile karşılaşılır. Kullanıcı kendisine sunulan alternatifleri kullanarak eğri ve şekil hakkında uygun değişiklikler gerçekleştirebilir.

Şekil 5.16 Şekil 5.17

Şekil 5.17'de ok ile gösterilen Data Cursor ikonuna 'tık'lanıldığında farenin imleci '+' işareti şeklini alır. Bu durumda fare ile eğrinin hangi noktasına 'tık'lanılır ise o noktanın koordinatları eğri üzerinde gözükür (şekil

31

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 32: MATLAB Uğur Arifoğlu

5.17). Eğer şekil 5.17'de X ve Y değerlerini içeren pencere üzerine fare ile gelinip sağ tuşuna 'tık'lanılır ise bir pencere açılır (şekil 5.17). Açılan pencere içinde Display Style seçeneğinin altında yer alan Window Inside Figure seçeneği işaretlenir ise X ve Y'nin aldığı değerler şeklin altında açılan yeni bir kutu içine yazılır ve şekil 5.17'de görülen X–Y penceresi kapanır. Eğer kullanıcı birden fazla noktayı eğri üzerinde görmek isterse, eğri üzerine gelinip farenin sağ tuşuna basıldığında açılan pencere içinden Create New Datatip seçeneğini kullanmalıdır. Kullanıcı eğer, X-Y penceresini silmek isterse, eğri üzerine gelinip farenin sağ tuşuna basıldığında açılan pencere içinde yer alan Delete Current Datatip komutunu, tüm X-Y pencerelerini silmek isterse Delete All Datatip komutunu seçmelidir. Eğer şekil 5.17'de gösterilen alt pencere içinde Export Cursor Data to Workspace… seçeneği işaretlenir ise eğri üzerinde işaretli tüm X-Y değerlerini içeren bir yapı (struct) datası Workspace ortamında oluşturulur.

Şekil 5.18 Şekil 5.19

Şekil 5.18'de gösterildiği gibi Insert Legend ikonuna 'tık'lanılığında Figure 1 ekranında bulunan tüm eğrilerin renk ve isimlerini açıklayan küçük bir pencere açılır. Şekil 5.19'da gösterilen (beş parmak işaretli) Pan ikonuna 'tık'lanıldığında fare imleci beş parmak şeklini alır. İmleç, eğri üzerine getirilir ve farenin sol tuşuna basılırsa beş parmak işareti eğriyi kavrayacak şekilde değişir. Bu durumda eğri (farenin sol tuşu bırakılmayacak) fare hareketine bağlı olarak sağa-sola ya da yukarı-aşağı hareket ettirilebilir. Böylece eğrinin diğer bölgelerde aldığı X ve Y değerleri de görülmüş olur. Pan ikonunun yanında yer alan rotate ikonu üzerine 'tık'lanıldığında ise (özellikle üç boyutlu grafiklerde) eğriye çeşitli açılardan bakma imkanı elde edilir.

Şekil 5.19'da ikon menüsünün en sağında yer alan Show Plot Tools menüsüne 'tık'lanıldığında şekil 5.20'de gösterilen pencere ile karşılaşılır. Bu pencere 3 adet alt pencere içerir. En altta yer alan Property Editor-Text penceresi yerine (eğer fare ile eğrinin üzerine 'tık'lanırsa) Property Editor-lineseries penceresi açılır. Eğer fare ile eksenin üzerine 'tık'lanılır ise en alta Property Editor-Axes penceresi gelir. Altta yer alan bu pencereler ile ilgili olarak gerekli açıklamalar yukarıda verilmişti.

Şekil 5.21'de gösterildiği gibi Figure-Palette adlı alt pencerede 2D Axes ifadesinin sağ tarafında bulunan kutucuğa 'tık'lanıldığında içinde beyaz renkli kutucukları barındıran bir pencere çıkar. Fare yardımı ile bu pencerelerden bir kısmı seçilerek (subplot) alt çizim pencereleri açılır. Şekil 5.21'de iki tane alt alta çizim penceresi oluşturacak şekilde beyaz kutucuk seçilmiştir. Bu işlem uygulandığında şekil 5.22'de görülen pencere elde edilir. Artık bu pencere içine yeni bir çizim yapılabilir. Bunun için iki adet (yatay eksen ve düşey eksen için) diziye ihtiyaç vardır. Şekil 5.22'de (altta boş olan) çizim penceresine 'tık'lanılır ise (sağ altta yer alan) Add data ikonu aktif hale gelir. Bu ikon üzerine 'tık'lanıldığında şekil 5.23'de verilen pencere ile karşılaşılır. Bu pencerede X Data Source yanında yer alan boşluğa (ok işaretine 'tık'lanıldığında Workspace ortamında yer alan tüm değişkenlerin listesi içinden) F1 seçilerek, Y Data Source

yanında yer alan boşluğa da benzer şekilde F2 seçilerek OK tuşuna basılırsa (grid komutu da işaretlenerek) şekil 5.24'de verilen pencere elde edilir.

32

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 33: MATLAB Uğur Arifoğlu

Şekil 5.20

Şekil 5.21

Şekil 5.21'de Figure Palette penceresinde 2D yerine 3D seçilseydi, yukarıda işin içine bir de Z boyutu girecekti. Bu durumda F1 ve F2'ye ilaveten Z boyutu olarak bir başka dizi daha (örneğin:workspace ortamından) bulunması gerekecekti.

33

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 34: MATLAB Uğur Arifoğlu

Şekil 5.22

Şekil 5.23

34

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 35: MATLAB Uğur Arifoğlu

Şekil 5.24

Şekil 5.25

Şekil 5.24'de Figure Palette penceresi içinde yer alan Variables ifadesinin üzerine 'tık'lanıldığında şekil 5.25'de gösterilen Annotations seçenek penceresine ulaşılır. Eğer elde edilen eğri pencereleri üzerinde bir değişiklik yapılmak istenir ise (örneğin; ok çizmek,bir text ifadesi yazmak, şekil yerleştirmek vb. gibi) ilgili işaretler üzerine 'tık'lamak gerekir.

6.2.1.6. Polinom integralinin alınması

polyint(a): Katsayıları a vektörü ile verilen bir (A) polinomun integralini hesaplar.

Örnek olarak; A= polinomunun integrali hesaplanmak istensin:

>> a=[ 2 3 –5 6]; (‘enter’)>> polyint(a) (‘enter’)

35

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 36: MATLAB Uğur Arifoğlu

ans = 0.5000 1.0000 -2.5000 6.0000 0

Elde edilen sonuca bakarak A polinomunun integrali;

olmaktadır. polyint(a) ifadesinde integral sabiti ‘sıfır’ kabul edilmektedir. İntegral sabitinin ‘sıfır’ kabul edildiği yukarıda bulunan çözüm vektörünün son elemanının ‘sıfır’ olmasından da anlaşılmaktadır.

polyint(a,sabit) Kullanıcı integral sabitini sıfırdan farklı bir değerde seçmek isterse bu komutunu kullanmalıdır.

Örnek olarak integral sabiti 5 alınırsa;

>> a=[ 2 3 –5 6]; (‘enter’)>> polyint(a,5) (‘enter’)ans =

0.5000 1.0000 -2.5000 6.0000 5.0000

elde edilir.

6.6.1. MATLAB ortamında altprogram içinde altprogram kullanılması

MATLAB ortamında altprogram (ana altprogram) içinde bir veya daha çok sayıda altprogram (yardımcı altprogram) kullanılabilir. Yardımcı altprogramlar ancak ana altprogram tarafından çağrılabilirler. Bunun dışındaki bir yolla yardımcı altprogramlara erişim imkansızdır. Ana altprogram içinde yardımcı altprogram kullanılmasının nedeni yeni altprogram dosyaları (m file) açmamak, takip edilmesi kolay olan altprogramlar yazabilmektir.

Problem 6.1…..

denkleminde a=1; b=5; c=6 değerlerini almaktadır. değerleri ise;

denklemlerini sağlamaktadır. Verilen ikinci dereceden denklemin köklerini bulan MATLAB programını yazınız.

Çözüm

>> a=1; (‘enter’)>> b=5; (‘enter’)>> c=6; (‘enter’)>> [x1 x2]=kokbul(a,b,c) (‘enter’)

Yukarıda adı geçen kokbul.m adlı altprogram aşağıda verilmiştir:

function [h1, h2]=kokbul(k1,k2,k3) %1w2=[3 -4]; %2a1=kokbul2(w2); %3w3=[1 5]; %4a2=kokbul2(w3); %5

36

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 37: MATLAB Uğur Arifoğlu

w4=[2 2]; %6a3=kokbul2(w4); %7 a=k1/a1; %8b=k2/a2; %9c=k3/a3; %10x=-b/(2*a); %11 y=sqrt(b^2-4*a*c)/(2*a); %12 h1=x+y; %13 h2=x-y; %14function u1=kokbul2(n1) %15u1=roots(n1); %16

Yukarıda görüldüğü gibi ana altprogram içinde 1 adet yardımcı altprogram kullanılmaktadır. Ana altprogram 16 satırdan, yardımcı altprogram ise 2 satırdan oluşmaktadır. Command Window ortamında verilen 4 satırın çalıştırılması sonunda elde edilen kök değerleri aşağıda gösterilmiştir:

>>x1 = 3.5726x2 = -2.2393

mean(x): x bir vektör ise bu komut ile x’in elemanları toplanır ve eleman sayısına bölünür. Eğer x bir matris ise x’in her bir sütununun ortalama değerini hesaplar;>> a=[1 2 3;2 4 6;4 8 12] (‘enter’)a = 1 2 3 2 4 6 3 6 12>> mean(a) (‘enter’)ans = 2.3333 4.6667 7.0000>> x=[2 4 6] (‘enter’)x = 2 4 6>> mean(x) (‘enter’)ans = 4

geomean(x): x vektörünün ‘geometrik ortalama’ değerini hesaplar.

x=[ ]

vektörünün geometrik ortalaması;

ifadesi ile hesaplanır. Aynı işlem MATLAB ortamında aşağıdaki gibi yapılır:

>>a=[1 2 3 2 4 6 4 8 12] (‘enter’)>>geomean (x)ans = 3.6342

harmmean(x): x vektörünün ‘harmonik ortalama’ değerini hesaplar.

x=[ ]

37

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 38: MATLAB Uğur Arifoğlu

vektörünün harmonik ortalaması;

ifadesi ile hesaplanır. Aynı işlem MATLAB ortamında aşağıdaki gibi yapılır:

>> a=[1 2 3 2 4 6 4 8 12] (‘enter’) >>harmmean (x)ans = 3.2727

trimmean(x,k): x vektörünün (%k)/2 lik maksimum ve minimum değerlerinin atılması ile elde edilen yeni vektörün ortalamasını bulur.

>> a=[1 2 3 2 4 6 4 8 12] (‘enter’)>> trimmean(a,50) (‘enter’)ans= 3.5000

Yukarıda a vektörünün %50 kırpılmış değeri hesaplanmaktadır.

median(x) : x bir vektör ise x’in alt ve üst sınırı arasındaki ‘orta değer’ (değerler sıralandığında ortada bulunan) elemanını bulur. Eğer x bir matris ise x’in her bir sütununun içinde o sütundaki sayıların mean(x) değerini hesaplar;

>> c =[5 2 3]; (‘enter’)>> median(c) (‘enter’)ans = 3>>b =[1 8 3;2 4 6;4 8 12]; (‘enter’)>> median(b) (‘enter’)ans =

2 8 6

Yukarıda görüldüğü gibi b matrisinin ilk sütunu içindeki sayılar arasında 1 ile 4 arasında olup bu sütunun ortalama değerine en uygun olan sayı 2 olmaktadır. İkinci sütun için bu sayı 8, üçüncü sütun için ise 6 olarak görülmektedir.

median(x,k) : x bir matris olmak üzere k=1 ise x’in orta değeri x’in sütunları üzerinde hesaplanır. k=2 ise x’in her bir satırı üzerinde orta değer hesaplanır;

sort(x) : x bir vektör ise bu komut ile x’in elemanları sıralanır. x bir matris ise bu komut ile x’in sütunları küçükten büyüğe sıralanır;

>> x=[8 1 5;2 0 3;9 7 6] (‘enter’) x = 8 1 5 2 0 3 9 7 6

>> sort(x) (‘enter’)ans = 2 0 3 8 1 5 9 7 6

38

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 39: MATLAB Uğur Arifoğlu

sort (x,1) : x matrisinin sütunlarını küçükten büyüğe sıralar.

sort (x,2) : x matrisinin satırlarını küçükten büyüğe sıralar.

8.1. Mantık işlemleri

Mantık yada ilişki içeren ifadelerde; eğer giriş verileri sıfırdan farklı ise çıkış değerleri doğru (1), giriş verileri sıfır ise çıkış değerleri yanlış (0) olarak alınır. Bu anlamda çıkış değerleri mantıksal (lojik) değerler (1 ve 0 gibi) almaktadır. MATLAB ortamında kullanılan karşılaştırma işaretleri Tablo 8.1’de verilmiştir;

Tablo 8.1İşaret Anlamı

< Daha küçük<= Daha küçük veya eşit> Daha büyük>= Daha büyük veya eşit= = Eşit~ = Eşit değil

Aşağıdaki MATLAB yazılımları incelenmelidir;

>>A=1:9 (‘enter’)A= 1 2 3 4 5 6 7 8 9>>B=8-A (‘enter’)B = 7 6 5 4 3 2 1 0 -1% A vektoru icinde 4’e esit ve bundan kucuk olan sayilar 1'e,% digerleri ise 0'a esitleniyor>>sec1= A<=4 (‘enter’)sec1= 1 1 1 1 0 0 0 0 0% A vektoru icinde B den buyuk olan sayilar 1'e% digerleri ise 0'a esitleniyor>>sec2= A>B (‘enter’)

sec2= 0 0 0 0 1 1 1 1 1% A vektor icinde B ye esit olan sayilarin 1'e % digerleri ise 0'a esitleniyor>>sec3= (A= =B) (‘enter’)sec3=

0 0 0 1 0 0 0 0 0

% B vektorunden, A vektorunun icindeki % degeri 2 den buyuk sayilarin birbirlerinden çıkartılması %>>C=A>2 % 2’den büyük sayılar 1'e, digerleri ise 0'a esitleniyorC = 0 0 1 1 1 1 1 1 1 >>D=C.*A % A nın içinde 2 den büyük olmayan sayılar sıfıra % eşitleniyor, D adlı vektore ataniyor D = 0 0 3 4 5 6 7 8 9>>sec4= B-D % istenen amaca ulaşılıyor (‘enter’)

39

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 40: MATLAB Uğur Arifoğlu

sec4= 7 6 2 0 -2 -4 -6 -8 -10

Yukarıda verilen işlemlerde görüldüğü gibi ‘=’ işareti ile ‘= =’ işareti arasında fark vardır. ‘= =’ işareti iki değişkeni karşılaştırır. Eğer iki değişken aynı değeri alır ise sonuç ‘1’, farklı ise sonuç ‘0’ olur.

Diğer taraftan ‘=’ işareti ise ‘atama’ için kullanılır. ‘=’ işaretinin sağ tarafındaki sayı bu işaretin sol tarafındaki değişkene atanır.

8.3.2. Mantıksal kontrol işlemcileri

Tablo 8.4’de gösterilen mantıksal kontrol işlemcileri, her iki yanına yerleştirilen ve (1*1) boyutunda olan ifadenin doğru veya yanlış olmasına göre 1 veya 0 üreten MATLAB komutlarıdır.

Tablo 8.4

İşaret Lojik karşılığı&& ve| | veya

Kontrol işareti && ise ve bu işaretin her iki tarafındaki (1*1) boyutundaki ifadeler doğru ise sonuç 1, aksi halde 0 olacaktır. Eğer | | işaretinin her iki tarafındaki ifadelerden en az biri doğru ise sonuç 1, aksi durumlarda sonuç 0 olacaktır. Aşağıdaki örnekler incelenmelidir:

>>a=2; (‘enter’)>>b=3; (‘enter’)>>(a<3)&&(b>4) (‘enter’)

ans = 0>>m=[1 2]; (‘enter’)>>n=[3 4]; (‘enter’)>>(m<3)&& (n>2) (‘enter’)??? Operands to the || and && operators must be convertible to logical scalar values.

Yukarıda görüldüğü gibi m ve n vektörleri (1*1) boyutunda olmadığı için hata uyarısı ile karşılaşılmıştır.

find(x) : x bir vektör ise bu komut ile x ‘in sıfır olmayan elemanlarının sırası oluşturulan vektöre yazılır. Eğer x bir matris ise bu komut x matrisini sütun sütun tarayarak (b matrisinin MATLAB arka planında bir dizi olarak saklandığı unutulmamalıdır) sıfır olmayan elemanların sırasını vektör olarak (sütun vektör) yazar.

>> a=[1 0 -1 6]a = 1 0 -1 6>> find(a)ans = 1 3 4>> b=[0 1 3 -1; 0 1 0 3; 0 2 0 1; 0 -4 2 0];>> find(b)ans = 5 6 7 8

40

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 41: MATLAB Uğur Arifoğlu

9 12 13 14 15

find komutunun yanındaki ifade lojik bir fonksiyon ise bu komutun karşılaştırma amaçlı kullanılması da mümkündür. Aşağıdaki örnekler incelenmelidir:

>>[satir,sutun]=find(b==2) (‘enter’)satir = 3 4sutun = 2 3

Yukarıdaki program satırında b matrisinin 2’ye eşit elemanlarının adresleri aranmaktadır. Komutun uygulanmasından elde edilen sonuçlara bakıldığında b matrisinde iki tane 2 sayısı bulunduğu anlaşılmaktadır. İlk 2 sayısı 3. satır 2. sütunda, ikinci 2 sayısı ise 4. satır 3. sütunda bulunmaktadır.

Eğer b matrisinde 2’den büyük elemanların adresleri merak edilirse aşağıdaki komut satırı uygulanmalıdır:

>> [satir,sutun]=find(b>2) (‘enter’)satir = 1 2sutun = 3 4

Elde edilen sonuçlara bakarak b matrisinde 1. satır 3. sütunda ve 2. satır 4. sütununda 2’den büyük elemanlar bulunmaktadır. Eğer kullanıcı bu eleman değerlerini merak ederse aşağıdaki komut satırlarını kullanabilir:

>> b(1,3) (‘enter’) ans = 3>> b(2,4) (‘enter’) ans = 3

Eğer kullanıcı b matrisi içinde -5’den büyük, -1’den küçük eleman (yada elemanların) adreslerini merak ederse aşağıdaki komut satırını kullanabilir:

>> [satir,sutun]=find(b>-5 & b<-1) (‘enter’)satir = 4sutun = 2

Elde edilen sonuca göre yukarıdaki şartı sağlayan bir adet eleman bulunmaktadır ve bunun adresi ise 4 . satır 2. sütundur.

Aşağıda verilen örnekte ise b matrisinin 2’den büyük elemanları 6 sayısına atanmaktadır:

>>b(find(b>2))=6 (‘enter’)b = 0 1 6 -1

41

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 42: MATLAB Uğur Arifoğlu

0 1 0 6 0 2 0 1 0 -4 2 0

Aşağıdaki örnekte ise b’nin 1’den büyük ve 3’ten küçük elemanları 8 yapılmaktadır:

>> b(find(b>1 & b<3))=8 (‘enter’)b = 0 1 3 -1 0 1 0 3 0 8 0 1 0 -4 8 0

Problem

Kullanıcı, klavye yardımı ile bir matris girecektir. Yazılan MATLAB programı ile bu matristeki pozitif sayılar bir matrise, negatif sayılar bir diğer matrise ve kompleks sayılar ise başka bir matrise atanacaktır.

Çözüm

A=input('[....;....;...]seklinde bir matris giriniz=')k=find(imag(A)); %matristeki komplex sayıların yeri bulunuyorb=A(k); %komplex sayıların yeri b ye atanıyordisp('simdi ekranda matrisin sadece negatif sayıları gözüksün')A1=(A<0).*Adisp('simdi de ekranda sadece matrisin pozitif sayıları gözüksün')A2=(A>0).*Adisp('simdi ise ekranda sadece komplex sayilari görelim')A3=zeros(size(A)); %A ile aynı boyutta sıfırlık matris oluşturuluyorA3(k)=b

Yukarıda verilen programın çalıştırılması sonunda elde edilen Command Window ekran görüntüsü aşağıda verilmiştir:

[....;....;...]seklinde bir matris giriniz=[2 3 i;4 -6 9;-3i 6 9]A = 2.0000 3.0000 0 + 1.0000i 4.0000 -6.0000 9.0000 0 - 3.0000i 6.0000 9.0000

simdi ekranda matrisin sadece negatif sayıları gözüksünA1 = 0 0 0 0 -6 0 0 0 0

simdi de ekranda sadece matrisin pozitif sayıları gözüksünA2 = 2 3 0 4 0 9 0 6 9

simdi ise ekranda sadece komplex sayilari görelimA3 = 0 0 0 + 1.0000i 0 0 0 0 - 3.0000i 0 0 >>

Problem…..

42

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 43: MATLAB Uğur Arifoğlu

rand komutu ile K adlı 10*8 boyutunda bir matris üretiniz. rand komutu ile üretilen bu matrisin 0.2 den küçük elemanların değerleri ve adresleri veren M adlı bir matris oluşturulacaktır. M matrisinin ilk sütunu 0.2'den küçük sayının K matrisinin hangi satırında bulunduğunu, M matrisinin ikinci sütunu 0.2'den küçük sayının K matrisinin hangi sütununda bulunduğunu ve M matrisinim üçüncü sütunu ise 0.2'den küçük sayının değerini verecektir. Bu işlem yapan MATLAB programını yazınız.

Çözüm>>K=rand(10,8)[a b]=find(K<0.2); % a satır numarası, b sütun numarasıss=length(a); % a nın satır sayısıfor u=1:ssc(u,1)=K(a(u,1),b(u,1)); % a ve b adreslerindeki K eleman degerlerini % verirendM=[a b c] % arzu edilen sonuç matrisi

8.10. break komutu

For döngüsü içinde değişken son değerine ulaşmadan döngüden çıkmak için break komutu kullanılabilir.

Aşağıda verilen dosyada, A matrisinin içindeki ilk 0 aranmakta, sayı yakalandığında bu sayının bulunduğu satır ve sütun numarası saptanıp iç içe olan for döngüleri durdurulmakta ve hesaplama 2. end komutunun altından devam etmektedir. Programın en altında ise 0 sayısının bulunduğu satır ve sütun numaraları yazdırılmaktadır.

A=[1 5 6;7 -3 9;-4 0 8];for t=1:size(A,1) %t; 1'den A'nın satır sayısına kadar artıyor for g=1:size(A,2) %g; 1'den A'nın sütun sayısına kadar artiyor

if A(t,g)==0 satir_numarasi=t; sutun_numarasi=g; break; end endendsatir_numarasisutun_numarasi

Not: Yukarıda verilen programın en başına tic, en sonuna ise toc yazılır ve program tekrar çalıştırılırsa elapsed_time=0.16 elde edilir. Bunun anlamı; tüm işlemlerin 0.16 saniye içinde bitirildiğidir. Eğer yukarıda verilen programda break komutu kaldırılır, program tekrar çalıştırılır ve zamana tekrar bakılırsa, 0.22 saniye elde edilir. Böylece break komutu ile program kesilerek kullanıcıya zaman tasarrufu sağlanmaktadır.

8.11. continue komutu

Yukarıda bahsedildiği gibi bir döngü sona erdirilmek istendiğinde break komutu kullanılmaktadır. Bazen döngünün durdurulması yerine yalnızca döngünün o an geçerli olan değişkeni bir atlatıp döngüye devam etmek istenebilir.

Aşağıda verilen programda B matrisinin tüm elemanları 2’ye bölünmekte fakat mutlak değeri 6’dan büyük olan A matrisi elemanlarına bu işlem uygulanmamakta, bu durum ile karşılaşıldığında continue komutu ile döngüde o an geçerli olan değişkenin aldığı değer atlanmakta ve döngüye devam edilmektedir, son olarak A matrisinin son hali ekrana yazdırılmaktadır..

B=[2 5 11;7 -3 9;-4 0 8];for t=1:size(B,1)

43

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 44: MATLAB Uğur Arifoğlu

for g=1:size(B,2)

if abs(B(t,g))>6 continue end B(t,g)=B(t,g)/2; endendB

Yukarıdaki programın uygulanması sonunda elde edilen B matrisi değeri aşağıda verilmiştir:>>B = 1 2.5 11 7 -1.5 9 -2 0 8>>

Aşağıda verilen MATLAB programında A vektörünün sıfıra eşit veya sıfırdan küçük değerli elemanları için (10 tabanına göre) logaritma işlemi yapılmamakta (bu şarta uygun sayılar A vektörü içinde sayılar aynen bırakılmakta), yalnızca A’nın pozitif değerli elemanları için A vektör elemanlarının logaritması alınmaktadır:

A=[0 1 -5 2 8 -7];for n=1:length(A) if A(n)<=0 continue endA(n)=log10(A(n))endA % A vektorunun pozitif elemanlarının % logaritmaları alındığında elde edilen yeni A vektoru

Yukarıda verilen programın çalıştırılması sonunda elde edilen A vektör eleman değerleri aşağıda gösterilmiştir:

>> A = 0 0 -5.0000 0.3010 0.9031 -7.0000

8.12. return komutu

Ana programdan alt programa dallanıp alt program içinde istenilen şart gerçekleştiğinde alt programdaki döngüden çıkıp tekrar ana programda kalındığı yerden devam edilmek isteniyor ise alt program içinde return komutu kullanılmalıdır. Aşağıda verilen örnekte Command Window ortamında A matrisi tanıtılmakta, bul.m adlı bir alt program içine dallanılmaktadır. Alt program içinde A matrisinin (alt programdaki karşılığı B) ilk sıfır olan elemanı bulunmakta return komutu yardımı ile derhal alt program sona erdirilip Command Window ortamında ana program kaldığı yerden devam etmektedir. Daha sonra ana programda ilk 0 elemanının bulunduğu A matrisinin satır ve sütun numaraları yazdırılmaktadır.

>> A=[1 5 6;7 -3 9;-4 0 8]; (‘enter’)>>[satir_no,sutun_no]=bul(A) (‘enter’)

Aşağıda bul.m adlı alt program verilmiştir:

function [satir_no, sutun_no]=bul(B)for t=1:size(B,1) for g=1:size(B,2)

if B(t,g)==0 satir_no=t; sutun_no=g; return;

44

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 45: MATLAB Uğur Arifoğlu

end endendYukarıda verilen Command Window ortamındaki iki program satırının çalıştırılması ile aşağıdaki sonuçlar elde edilir.>>satir_no = 3sutun_no = 2

8.13. error komutu

Kullanıcı bazen programı belli koşulları gözeterek yazar. Eğer program içinde kullandığı değerler bu koşulları sağlamaz ise program çalışabilir fakat sonuçları doğru olmayabilir. Kullanıcı ileride bu programı çalıştırdığında bu koşuları unutabileceğini düşünerek yazdığı program içine bir komut yerleştirerek hem programın durmasını hem de neden durması gerektiğine dair mesajın (hatırlatmanın) ekrana yazılmasını istediğinde (veya buna benzer amaçlar için) error komutunu kullanabilir.

Örnek olarak kullanıcı A adlı bir matris içine pozitif doğru akım bilgileri girmekte ve yazdığı ortalama_bul.m adlı alt program ile A vektör matrisinin ortalamasını hesaplamaktadır. Bilindiği gibi pozitif doğru akım değeri asla pozitif değerden negatif değere geçmez. Eğer A vektör matrisi içinde herhangi bir eleman değeri negatif ise kullanıcı error komutu yardımı ile hem programı durdurabilir hem de durdurma sebebini ekrana yazdırabilir. Yine bilinmelidir ki içinde negatif sayı barındıran bir matrisin ortalaması (mean komutu yardımı ile) hesaplanabilmektedir. Diğer bir ifade ile böyle bir programda error komutu kullanılmadığında herhangi bir hata ile karşılaşılmaz. Bu programı kesmek kullanıcının bir tercihidir.

>> A=[1 5 6 7 -3 9 4 0 8]; (‘enter’)>> ortalama=ortalama_bul(A) (‘enter’)

Aşağıda ortalama_bul.m adlı alt program verilmiştir:

function d=ortalama_bul(B)for t=1:size(B,1) for g=1:size(B,2) if B(t,g)<0error ('matris elemanlarından hic biri negatif olamaz')endendendd=mean(B);

Yukarıda verilen iki program satırının uygulanması sonunda elde edilen sonuçlar aşağıda verilmiştir. Görüldüğü gibi programın çalışması error komutu kullanılarak durdurulmakta ve ortalama hesabı yaptırılmamaktadır.>>??? Error using ==> ortalama_bulmatris elemanlarından hic biri negatif olamaz

8.14. warning komutu

error komutunda kullanıcının istediği mesaj ekrana yazılmakta ve program durdurulmaktadır. warning komutunda ise kullanıcının istediği mesaj ekrana (uyarı olarak) yazılmakta fakat programın çalışması devam ettirilmektedir. Bu komutun uygulamasına örnek olarak yukarıda verilen ortalama_bul.m adlı alt programda error komutu yerine warning yazılıp uyarı metni değiştirilebilir. Aşağıdaki alt program incelendiğinde A vektörünün ortalaması alınmakta fakat uyarı ifadesi ile de kullanıcı uyarılmaktadır:

function d=ortalama_bul(B)for t=1:size(B,1)

45

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 46: MATLAB Uğur Arifoğlu

for g=1:size(B,2) if B(t,g)<0warning (['matris elemanlarından hic biri negatif olamaz'... ‘ fakat yine de ortalama alınmaktadır’])endendendd=mean(B);

Aşağıda verilen satırlar uygulandığında;

>> A=[1 5 6 7 -3 9 4 0 8]; (‘enter’)>> ortalama=ortalama_bul(A) (‘enter’)

Warning: matris elemanlarından hic biri negatif olamaz fakat yine de ortalama alınmaktadırortalama = 4.11111111111111

elde edilir.

8.15. eval komutu

Bu komut MATLAB ortamında çeşitli biçimlerde kullanılabilir. Aşağıda verilen örnekler incelenmelidir:

>>x=0:1:3; (‘enter’)>>y=eval(‘2*x.^2+sin(2*x)’) (‘enter’)y =

0 2.90929742682568 7.24319750469207 17.72058450180107

Yukarıdaki satırlarda x değerleri iki tırnak içinde verilen fonksiyonda yerine konularak elde edilen değerler y vektörüne atanmaktadır.

for n=1:3eval(['A' num2str(2*n) ' = [n ;n-1 ;2*n]'])end

Yukarıda verilen program uygulandığında aşağıdaki sonuçlar elde edilir:

>>A2 = 1 0 2A4 = 2 1 4A6 = 3 2 6

Açıklama: num2str(x) komutu ile x sayısı MATLAB ortamında karakter gibi değerlendirilir. Bu nedenle yukarıda verilen program satırında (2*n) sayısı A adlı karakterle birleştirilebilmektedir.

eval komutunun bulunduğu satırda yer alan [n ;n-1 ;2*n] vektör matrisi n döngüsü ile değer değiştirmektedir.

46

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 47: MATLAB Uğur Arifoğlu

karakter='<=';A=[-1 4 6;11 -8 -6];for n=1:2 for m=1:3 if eval([num2str((A(n,m))) karakter num2str(0)]) A(n,m)=abs(A(n,m)); end endendA

Yukarıda verilen programda ise A matrisinin elemanları içinde 0’a eşit veya küçük olanın mutlak değeri alınmakta ve son olarak yeni hali ile A matrisi ekrana yazdırılmaktadır. Programın uygulanması sonunda elde edilen A değeri aşağıda gösterilmiştir;A = 1 4 6 11 8 6>>

Yukarıda verilen programdaki eval komutunun bulunduğu satır;

if eval([‘A(n,m)’ ‘<=’ ‘0’])

biçiminde de yazılabilirdi. Bu durumda da A matrisi aynı değeri alırdı.

8.16. feval komutu

feval(‘fonksiyon adı’,degerler):’degerler’ bölümünde yer alan sayının aldığı değeri ‘fonksiyon adı’ kısmında yazılı olan fonksiyona koyarak hesaplatan bir MATLAB komutudur.

‘fonksiyon adı’ kısmında yer alan fonksiyon MATLAB arka planında tanımlı (sin,cos,tan, gibi) fonksiyon ise;

>>b= feval(@sin,pi/3) (‘enter’)b = 0.8660

program satırlarında görüldüğü gibi pi/3 açısı (radyan olarak) sin(x) ifadesinde x yerine konularak sin(pi/3) değeri hesaplanmakta ve sonuç b değerine atanmaktadır.

feval komutunun alt program uygulamaları ile ilgili örnekler ise Bölüm 10’da verilmiştir.

Problem

Öyle bir MATLAB programı yazın ki, hangi dereceden olursa olsun bir polinomun tüm köklerini hesaplayabilsin. Yazılan program içinde polinomun katsayıları vektör olarak verilmeyecek, ekran üzerinden klavye ile girilecektir. Yazılan program satırları arasında aşağıdaki satırlar da bulunacaktır. Program kullanıcının belirlediği kadar denklemi ard arda çözebilecektir. Aşağıda yazılacak programa ilişkin ara satırlar gösterilmiştir:…..disp(‘kac adet denklem koku bulmak istiyorsunuz?’)…..disp('polinomun en buyuk derecesini gir')….….disp('en buyuk dereceden baslayarak sıra ile katsayilari giriniz')…..disp('inci denklemin kokleri')

47

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 48: MATLAB Uğur Arifoğlu

(Kullanıcı, dilediği kadar polinomun köklerini ard arda bulmak istemektedir. Yazılacak MATLAB programında kullanıcının karşısına önce "kaç adet denklem bulmak istiyorsunuz?" sorusu çıkacaktır. Daha sonra sıra ile 'en büyük polinom' derecesinden başlayarak polinomun katsayıları sıra ile klavye kullanılarak girilecektir. Ekranda kaçıncı denklemin kökleri olduğunu belirten açıklama da yer alacaktır. Bu işlem tüm denklemler bitene kadar devam edecektir)

Çözüm>>disp(' kaç adet denklem koku bulmak istiyorsunuz?')aa=input('');n=0;while n<aa n=n+1;disp('polinomun en büyük derecesini gir')A=input('');disp('en büyük dereceden başlayarak sıra ile katsayıları giriniz')c=size(A,1); for k=1:A+1 c(k)=input('') end disp('inci denklemin kökleri')roots(c)end

13.4. Üç boyutlu ara değer hesabı

Bir veri grubunun üç farklı değişkenin fonksiyonu ve 3 boyutlu bir dizi oluşturması durumunda üç verinin bazı değerlerine karşı gelen değeri bulmak için interp3 komutu kullanılır. Bu komutun genel kullanımı;

>>v1=interp3 (x,y,z,v,x1,y1,z1) ( ‘enter’)

şeklindedir. Bu komutun kullanılış biçimi interp2 ile aynıdır ve aynı çözüm yöntemleri kullanılır. x, y ve z aynı eleman sayısına sahip vektörler olmalıdır. Aynı uzunlukta olmayan x, y ve z vektörlerinin bulunması halinde meshgrid komutu kullanılarak gerekli uygunlaştırma işlem yapılabilir.

13.5. n boyutlu ara değer hesabı

Bir veri grubunun n farklı değişkenin fonksiyonu ve n boyutlu bir dizi oluşturması durumunda, n adet verinin bazı değerlerine karşı gelen değeri bulmak için interpn komutu kullanılır. Bu komutun genel kullanımı;

>>v1=interpn (x,y,z,v,....,x1,y1,z1,....) ( ‘enter’)

şeklindedir.

13.6. Eğri uydurma işleminin Basic Fitting arayüzü yardımı ile gerçekleştirilmesi

Eğri uydurma işleminin Basic Fitting arayüzü yardımı ile nasıl gerçekleştirildiği aşağıda verilen problemin çözümü üzerinden anlatılacaktır.

Problem 13.3

MATLAB ortamında (arka planda) tanımlı olan census adlı data dosyası 1790 ile 1990 yılları arasında ABD’deki yaş populasyonunu içermektedir. Bu değişimi temsil edecek 4. dereceden polinomun katsayılarını bulunuz.

Çözüm

Command Window ortamında;

48

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 49: MATLAB Uğur Arifoğlu

>> load census (‘enter’)

komutu uygulandığında Workspace ortamında cdate ve pop adlı iki vektör matris ortaya çıkacaktır (şekil 13.9) . cdate; 1790 ile 1990 arasındaki 10'ar yıllık artışları gösteren sütun vektör, pop; 1790 ile 1990 yılları arasındaki popülasyonu gösteren sütun vektördür.

Şekil 13.9

Şekil 13.10’da

>> plot(cdate,pop,'ko') (‘enter’)

komutunun uygulanması sonunda elde edilen pop=f(cdate) değişimi gösterilmiştir.

Aşağıda verilen komut satırı uygulandığında bu iki vektör arasındaki ilişkiyi temsil eden 4. dereceden bir polinomun katsayıları elde edilecektir:

>> p=polyfit(cdate,pop,4) (‘enter’)Warning: Polynomial is badly conditioned. Remove repeated data points or try centering and scaling as described in HELP POLYFIT.> In polyfit at 81

p = Columns 1 through 3 4.7543e-008 -3.5557e-004 1.0032e+000 Columns 4 through 5 -1.2644e+003 6.0020e+005

Şekil 13.10 Şekil 13.11

49

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 50: MATLAB Uğur Arifoğlu

Yukarıda verilen uyarıda (her ne kadar polinomun katsayıları elde edilmiş olsa da) cdate ve pop adlı iki vektör arasındaki dağılımının pek uygun olmadığı, verilen data değerlerinin normalize edilerek eğri uydurma işleminin tekrar yapılması önerilmektedir

Normalizasyon işlemi için önerilen yollardan bir tanesi de; cdate değerleri ile cdate değerlerinin ortalaması arasındaki farkı, cdate değerlerinin standart sapmasına bölmektir. Aşağıda bu işlemin yapıldığı MATLAB komut satırı gösterilmiştir:

>>sdate=(cdate-mean(cdate))./std(cdate); (‘enter’)

Yukarıda verilen komut satırının uygulanması sonunda elde edilen sdate adlı vektör matrisi, cdate adlı vektör matrisinin açıklanan normalizasyon yaklaşımına maruz bırakıldığında elde edilen (normalleştirilmiş) değerleridir.

cdate adlı vektörün normalleştrilmesi sonunda elde edilen sdate adlı vektöre polyfit komutu uygulandığında;

>>p=polyfit(sdate,pop,4) (‘enter’)p = 7.0471e-001 9.2102e-001 2.3471e+001 7.3860e+001 6.2229e+001>>elde edilir. 4. dereceden bu polinom için sdate vektörünün aldığı değerler;

>>pop4=polyval(p,sdate);komut satırı ile bulunabilir. Böylece normalizasyon işlemine maruz bırakılmış cdate değerleri ile normalizasyon işlemi yapılmamış cdate değerleri aynı eksen takımı üzerinde aşağıdaki komut satırı yardımı ile çizdirilirse şekil 13.11’de görülen değişimler elde edilir.

>>plot(cdate,pop4,‘ –’, cdate,pop,‘o’)

13.6.1. Eğri uydurmada kullanılan arayüzlerin tanıtılması

Kullanıcının deney sonucu gözlemlediği data değerleri ile (çeşitli yaklaşımlar kullanarak) eğri uydurma yaklaşımı sonucu hesapladığı değerler arasındaki ilişkinin doğruluğunu tespit etmek için kullanılan yaklaşım şekillerinden bir tanesi rezidü hesabıdır. MATLAB ortamında normalize edilmiş data değerlerinin çeşitli eğri uydurma yaklaşımlarına uygulanması sonunda elde edilen sonuçlar rezidü hesabı yapılarak karşılaştırılabilir.

MATLAB ortamında eğri uydurma amaçlı kullanılan iki farklı arayüz ortamı bulunmaktadır. Bunlardan ilki Basic Fitting arayüzü diğeri ise Curve Fitting Tool arayüzüdür

13.6.1.1. Eğri uydurma işleminin Basic Fitting arayüzü yardımı ile gerçekleştirilmesi

Yukarıda verilen cdate ve pop adlı iki vektör arasındaki eğri uydurma işlemi, MATLAB ortamındaki Basic Fitting arayüzü kullanılarak da çok kolay bir şekilde yapılabilir. Bunun için aşağıdaki işlemlerin sıra ile gerçekleştirilmesi gerekir:

1. Verilen data değerleri plot komutu yardımı ile çizdirilmelidir:

>> load census (‘enter’)>> p=plot(cdate,pop) (‘enter’)

Elde edilen şekil penceresinde Tools seçeneği içine girilerek Basic Fitting üzerine ‘tık’lanılmalıdır (şekil 13.12). Bu işlem yapıldığında şekil 13.13'de gösterilen pencere ile karşılaşılır.

50

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 51: MATLAB Uğur Arifoğlu

Şekil 13.12 Şekil 13.13

2. Şekil 13.13’de gösterilen Basic Fitting penceresinde, Select Data ifadesinin yanındaki boşlukta, şekil 13.12’de verilen eğriye ilişkin data değerlerinin data1 adlı ortamda saklandığı anlatılmaktadır. Center and scale X data yazısının sol yanında yer alan boş kutu üzerine ‘tık’lanıldığında data1 adlı değişimin normalizasyon işlemi (arka planda) yapılır.

3. Check to display fits on figure yazısının altında kalan pencere içinde çeşitli seçenekler yer almaktadır. Bu pencere içinde kullanıcıya iki farklı tip eğri uydurma seçeneği sunulmaktadır:Bu iki seçenek; interpolasyon (ara değer bulma) ve polinom seçimidir. Bu pencere içinde yer alan kutucuklardan ilki spline interpolant seçeneğidir. Bu kutucuk işaretlendiğinde MATLAB hesaplamaları spline komutu kullanılarak gerçekleştirilir. Bu kutucuğun altında kalan kutucuk işaretlendiğinde ise kutucuklardan ilki spline interpolant seçeneğidir. Bu kutucuk işaretlendiğinde MATLAB hesaplamaları pchip komutu kullanılarak gerçekleştirilir. Bu komut MATLAB arka planında ‘Piecewise Cubic Hermite Interpolating Polynomial’ adlı interpolasyon metodunu kullanır. Bu pencere içinde baştan üçüncü kutu ve altında yer alan diğer kutular işaretlendiğinde ise sırası ile birinci (linear), ikinci (quadratic), üçüncü (cubic), …, dereceden polinomlar yardımı ile eğri uydurma işlemi gerçekleştirilir. Eğer verilen data değerleri N adet ölçüm içeriyor ise MATLAB ortamında en fazla N. dereceden bir polinom uydurmaya müsaade edilir.

4. Show equation ifadesinin sol yanında yer alan kutucuk işaretlendiğinde ise eğri uydurma yaklaşımında kullanılan polinomun denklemi ekran üzerinde gözükür. Significant digits seçeneğinin yanında yer alan boşlukta ise bu polinomun katsayılarından kaç adet önemli sayının gösterileceği belirlenir.

5. Plot residuals seçeneği işaretlendiğinde bu ifadenin altında yer alan iki seçenek önem kazanır. İlk seçenek (Bar plot yazan) rezidü değişiminin ne şekilde çizdirileceği (Bar plot, Scatter plot, Line plot) hakkında kullanıcının tercihini sormaktadır. Bunun altında yer alan seçenekte ise (Subplot yazan) çizdirilecek rezidü eğrisinin mevcut olan şekil penceresinin altına mı (Subplot) yoksa bağımsız bir pencere (Separate)olarak mı çizdirileceği konusunda kullanıcıya seçenek verir.

6. Show norm of residuals seçeneği yanında yer alan kutucuk ‘tık’lanıldığında ise kullanıcı (hesaplamalarda hata ile orantılı olan) rezidü genliği hakkında kullanıcıya bilgi verilir.

Yukarıda yapılan açıklamalara örnek olması bakımından şekil 13.13’de işaretlenen kutucukları gösteren pencere şekil 13.14’te verilmiştir. Şekil 13.14’de gösterilen seçeneklerin işaretlenmesi sonunda elde edilen ekran görüntüsü ise şekil 13.15’te gösterilmiştir.

>> plot(cdate,pop,’ro’)

51

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 52: MATLAB Uğur Arifoğlu

Şekil 13.14 Şekil 13.15

Şekil 13.14’te butonuna ‘tık’lanılır ise Şekil 13.16 da verilen ekran görüntüsü ile karşılaşılır.

Şekil 13.16

Şekil 13.16’da verilen pencerenin sağ tarafında yer alan Numerical results bölümünde sırası ile; uydurulan polinom denklemi, polinomun (en yüksek dereceden başlayarak sıralanan) katsayıları ve rezidü normu (genliği) verilir. Bu bölümüm en altında yer alan Save to workspace seçeneği ‘tık’lanıldığında ise kullanıcının karşısına şekil 13.17 de gösterilen pencere çıkar.

52

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 53: MATLAB Uğur Arifoğlu

Şekil 13.17

Şekil 13.17 de verilen pencerede (fit ve normresid) adları kullanıcı tarafından istenirse değiştirilebilir) OK seçeneği ‘tık’lanıldığında, Workspace ortamında bu adlar ile anılan bir yapı ve bir değişken oluşturulur. fit adlı yapı içinde polinomun derecesi ve katsayılarını bildiren bilgiler, normresid adlı değişken içine ise rezidü

normu yazılır. Eğer şekil 13.16’da gösterilen pencere içinde sağ en altta yer alan butonuna ‘tık’lanılır ise şekil 13.18 ile verilen ekran görüntüsü elde edilir.

Şekil 13.18

Şekil 13.18’de verilen Find Y=f(X) pencerenin sağ tarafında yer alan Evaluate seçeneğinin sol yanında yer alan boşluğa, ölçüm sonunda hakkında bilgi sahibi olunmayan cdate değerleri girilir. Evaluate seçeneği ‘tık’lanılır ise en üstünde X ve f(X) ifadeleri bulunan boş alana cdate değerlerine karşı gelen pop değerleri gelir (hesaplanır). Kullanıcı Evaluate seçeneğinin sol tarafındaki boşluğa (1800:5:1850 biçiminde) vektör biçiminde aradığı cdate değerlerini de girebilir.

Kullanıcı, Evaluate seçeneğinin sol tarafındaki boşluğa ölçümde göz önüne alınan en büyük cdate (yani X) değerlerlerinden daha büyük değerler girerek ekstrapolasyon da yapabilir. Ekstrapolasyon sonunda elde edilen yeni pop (yani f(X)) değerleri en üstünde X ve f(X) ifadeleri bulunan boş alana yazılır. Eğer sağ en altta yer alan Save to workspace seçeneği işaretlenir ise elde edilen sonuçlar Workspace ortamında kullanıcının belirleyeceği bir isim altında ayrı ayrı kaydedilir. Bu seçenek kullanıldığında kullanıcının karşısına çıkan ekran görüntüsü şekil 13.19’da verilmiştir. Kulanıcı isterse x1 ve fx1 adlarını değiştirebilir.

53

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 54: MATLAB Uğur Arifoğlu

Şekil 13.19

Eğer kullanıcı bu yeni değerleri eğri üzerinde görmek isterse şekil 13.18'de yer alan Plot evaluate results seçeneğini işaretlemesi yeterlidir. Burada bir ekstrapolasyon örneği olması için Evaluate seçeneğinin sol tarafındaki boşluğa 2000:5:2500 yazılmış, Plot evaluate results seçeneği işaretlenmiş ve elde edilen değişim şekil 13.20’de gösterilmiştir. Şekil 13.18'in ekstrapolasyon uygulaması sonunda aldığı görüntü ise şekil 13.21'de gösterilmiştir.

Şekil 13.20 Şekil 13.21

Kullanıcı isterse şekil 13.18'de Plot Fits penceresi içinde yer alan eğri türlerinden birkaç tanesini aynı anda işaretleyebilir. Bu durumda şekil 13.20'de birden fazla eğri ve rezidü değeri elde edilir. Kullanıcı isterse en uygun olan eğriyi bunların içinden seçebilir.

13.6.1.2. Eğri uydurma işleminin Curve Fitting Tool arayüzü yardımı ile gerçekleştirilmesi MATLAB araç kutuları içinde eğri uydurma işleminin yapılması için geliştirilen diğer bir arayüz (GUI) Curve Fitting Tool ortamıdır. Bu ortamı kullanarak; bir veya daha fazla data seti incelenebilir, grafik olarak en iyi eğri uydurma işlemi, aynı datayı birden fazla eğri ile çizdirip karşılaştırma imkanı, ara değer bulma-dış değer bulma-türevsel ve integral eğri uydurma işlemleri yapılabilir. Eğri uydurma araç kutusunu çalıştırmak için aşağıdaki komut satırının uygulanması yeterlidir:

>>cftool ('enter')

Yukarıdaki komut satırı uygulandığında kullanıcının karşısına şekil 13.22'de verilen görüntü çıkar. Bu araç kutusunun tanıtılması için örnek olarak yine problem 13.3 çözülecektir: Bölüm 13.6.1.1'de belirtildiği gibi;

>>load census (‘enter’)

komutu uygulandığında Workspace ortamında şekil 13.9'da gösterildiği gibi cdate ve pop adlarında iki adet vektör oluşur (cdate; x ekseni ve pop; y ekseni seçilecektir). Önce bu iki vektörün cftool ortamına taşınması açıklanacaktır.

54

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 55: MATLAB Uğur Arifoğlu

Şekil 13.22 Şekil 13.23

13.6.1.2.1. Workspace ortamındaki datanın eğri uydurma araç kutusuna taşınması (importing)

Şekil 13.22'de Data..butonuna 'tık'lanıldığında (veya File menüsü altında yer alan Import Data.. komutuna 'tık'lanıldığında) şekil 13.23'de gösterilen pencere açılır. Bu pencere içinde X Date ifadesinin sağ tarafındaki ok işaretine 'tık'lanıldığında Workspace ortamında saklı olan büyüklükler ile karşılaşılır. Bunlar içinden x eksenine karşı gelmesi düşünülen vektör işaretlenir. Benzer şeyler Y Date ifadesi için geçerlidir. Bu işlemler gerçekleştirildiğinde şekil 13.23'de Preview penceresinde, bu iki vektörün değişimi görülecektir. Bu gösterimde yalnızca x ve y değerlerinin işaretlendiği, her hangi ibr eğri çizim işleminin yapılmadığına dikkat edilmelidir.

Şekil 13.23'de Create data set komutuna 'tık'lanıldığında cdate ve pop vektörleri Curve Fitting Tool araç kutusuna taşınır (importing). Bu işlem sonunda şekil 13.22'de verilen Curve Fitting Tool penceresi şekil 13.24'de gösterilen forma dönüşür. Artık eğri uydurma işlemine geçilebilir.

Şekil 13.23'de Weights (ağırlık sabitleri) ifadesinin sağ tarafındaki boşluğa (varsa) probleme ilişkin ağırlık katsayı vektörünün adı yazılabilir. Eğer buraya bir şey yazılmaz ise tüm data değerleri için 1 değeri (default) alınır.

Şekil 13.23'de Data set name ifadesinin sağ tarafındaki boşluğa x ve y eksenlerini oluşturan vektörlerin adları (kendiliğinden) yazılır. Kullanıcı dilerse buraya başka adlar da yazabilir.

Eğer x ve y eksenlerini oluşturan data değerleri içinde Inf sayısı var ise ihmal edilir (göz önüne alınmaz), complex sayı var ise reel kısmı alınır. Bu iki durumda da ekranda bir pencere belirir ve kullanıcı uyarılır.

Verilen problemde MATLAB arka planında saklı olan iki adet vektör (cdate ve pop) kullanılmıştır. Kullanıcı isterse bunların yerine Workspace ortamında oluşturacağı iki adet (eşit boyutta) vektör kullanarak da benzer işlemleri yapabilir.

13.6.1.2.2. Eğri uydurma (Fitting)

Daha önceki adımlarda x ve y eksenine ilişkin data değerleri cftool ortamına taşındı. Şekil 13.24'de Fitting… komutuna 'tık'lanıldığında şekil 13.25'de gösterilen Fitting penceresi ile karşılaşılır. Bu pencerede New Fit komutuna 'tık'lanıldığında ise şekil 13.26'da verilen görüntü elde edilir (Fitting penceresi). Bu pencerede Fitname komutunun sağ tarafında bulunan boşluğa çizdirilecek eğrinin ismi yazılmalıdır (ör:egri2). Daha sonra yer alan Polynomial alt penceresinde yer alan eğri türlerinden birisi seçilerek (örneğin; quadratic) Apply ya da Immediate apply komutlarına 'tık'lanıldığında, Fitting penceresi şekil 13.27 ile verilen forma dönüşür. Bu işleme ilişkin istatistiksel bilgiler ise şekil 13.27'de Results penceresinde yer alır.

55

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 56: MATLAB Uğur Arifoğlu

Kullanıcı dikkat ederse Curve Fitting Tool penceresi içinde bir adet eğri görecektir. Eğer bu pencerenin altında eğriye ilişkin rezidü değişimi de görülmek isteniyor ise şekil 13.24'de gösterilen Curve Fitting Tool penceresinde yer alan View menüsünün içinde yer alan Residuals/Line Plot seçeneğine 'tık'lanılmalıdır.

Bu işlem yapıldığında şekil 13.24 yerine şekil 13.28'de verilen pencere elde edilir.Eğer kullanıcı daha yüksek mertebeden eğri uydurmak isterse ekranda;

Equation is badly conditioned. Remove repeated data points or try centering and scaling.

uyarısı ile karşılaşabilir.Bu durumda şekil 13.27'de Center and scale X data ifadesinin sol tarafında yer alan kutucuk işaretlenerek data değerleri normalize edilebilir.

Şekil 13.24 Şekil 13.25

Şekil 13.26 Şekil 13.27

56

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 57: MATLAB Uğur Arifoğlu

Şekil 13.28 Şekil 13.29

Verilen problem için şekil 13.27'de Center and scale X data işaretlendiğinde, arka planda yapılan normalizasyon işlemi aşağıda verilmiştir:

>>(cdate-mean(cdate))./std(cdate)

13.6.1.2.3. Eğri uydurmada işleminde en iyi eğrinin tespit edilmesi

Kullanıcı, yukarıda bahsedilen işlemleri dilediği kadar eğri türü üzerinde deneyebilir. Şekil 13.27'de Type of Fit seçeneğinin sağ tarafındaki boşlukta yer alan ok 'tık'lanıldığında kullanıcının karşısına bir çok eğri türü çıkar. Bu seçenekler; Custom equations(kullanıcı tarafından belirlenecek eğri türleri), Exponential, Fourier, Gaussian, Interpolant, Polynomial(polinom), Power, Rational (oransal), Smoothing Spline, Sum of Sin functions, Weibull olarak sıralanır. Bu eğri tipleri aşağıda tanıtılmıştır:

Exponentials

Fourier Series

Gaussian

Polynomials

Power Series

Rationals

57

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 58: MATLAB Uğur Arifoğlu

Sum of Sines

Weibull Distribution

Custom Equations Şekil 13.27'de Type of Fit ifadesinin sağ tarafında yer alan boşlukta ok işareti yardımı ile Custom Equations ifadesine ulaşılır. Bu pencerede yer alan New equation..komutuna 'tık'lanıldığında şekil 13.29 ile verilen pencere açılır. Bu pencere iki adet seçenek içerir. Bunlardan ilki, Linear Equations diğeri ise General Equations seçeneğidir. Şekil 13.29, Linear Equations'a ilişkindir. Bu pencerede Add a term ifadesine 'tık'layarak y denklemine yeni sinüs eşitlikleri ilave edilebilir yada Remove Last Term komutu kullanılarak y ifadesine en son ilave edilen terim silinebilir. Şekil 13.29'da General Equations seçeneğine 'tık'lanıldığında şekil 13.30 penceresi ile karşılaşılır. Bu penceede Equation ifadesinin sağ tarafında bulunan ikinci boşluğa kullanıcı, dilediği eşitliği yazabilir. Bu pencerenin altında yer alan pencerede ise y eşitliğinde kullanılan katsayılara ilişkin başlangıç değeri, alt ve üst sınır değerlerini girecek küçük pencereler bulunur. Bu değerler girildiğinde OK tuşuna basılarak eğri denklemi tamamlanır.

Şekil 13.30 Şekil 13.31

Bu tiplerden hangisi seçilirse Type of Fit ifadesinin altında yer alan boşlukta, seçilen eğri tipine ilişkin eğri denklem (ya da denklemleri) belirir. Kullanıcı, eğri tipini yukarıda bahsedildiği gibi seçtikten sonra şekil 13.27'de görülen Copy Fit komutuna 'tık'ladığında açılan (şekil 13.27'ye benzeyen) yeni pencerede Fit name ifadesinin sağ tarafına yeni bir isim (ör:egri3) yazmalı ve Immediate apply (ya da Apply) komutunu uygulamalıdır. Bu şekilde kullanıcı, dilediği kadar eğri denklemini seçerek eğri uydurma işlemini gerçekleştirebilir. Şekil 13.31'e bakıldığında 7 adet eğri uydurulduğu görülecektir. Şekil 13.32'de en altta yer alan Table of Fits penceresi içinden hangi eğriye 'tık'lanılırsa, aynı şekilde yer alan Results penceresinde bu eğriye ilişkin denklem, katsayı ve istatistiksel değerler yer alır. Table of Fits penceresi yer alan eğriler içinden (isabetli bir eğri uydurma işlemi yapılamadığı düşünülerek) bir tanesi silinmek istenir ise ilgili satır fare ile işaretlenerek Delete fit komutuna 'tık'lanılması gerekir.

Şekil 13.31'de Residuals penceresinde yer alan eğriler içinde birbirlerine benzer olanlar dışında kalan eğrile r, kötü bir eğri uydurma işleminin sonucunu göstermektedir. Bu nedenle diğer eğrilerden sapan ve uzaklaşan eğriler şekil 13.32'de Delete fit komutu kullanılarak uzaklaştırılmalıdır. Şekil 13.31'de, bu özelliğe sahip (kötü uydurulmuş 3 adet-egri1-egri4-egri5) eğri, ok ile işaretlenmiştir. Kötü olan eğrileri tespit etmek için şekil

58

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 59: MATLAB Uğur Arifoğlu

13.32'de Table of Fits penceresinde yer alan SSE(Sum of Squares due to Error) ve Adj R-square değerleri de kullanılabilir. Adj R-square değeri 1'e yaklaştıkça eğrinin iyi olduğu, 1'den uzaklaştıkça ise eğrinin kötü olduğu bilinmelidir. SSE değeri ise küçüldükçe eğrinin iyi olduğu, büyüdükçe eğrinin kötü olduğu söylenebilir (istatistiksel katsayılara ilişkin açıklamalar ilerleyen sayfalarda verilecektir). Bu bilgiler ışığında şekil 13.32'de egri1, egri4 ve egri5'e ilişkin SSE ve Adj R-square değerleri incelenmelidir (en iyi eğrinin egri6 olduğu görülmelidir).

Şekil 13.31'de görülen tüm eğriler bilgisayar ekranında farklı renkte oldukları için kullanıcı tarafından rahatlıkla fark edilebilirler. Kitap siyah-beyaz baskı olarak basıldığından bu ayırımı kitap üzerinde görmek zorlaşabilir. Şekil 13.31'de, fare ile herhangi bir eğrinin üzerine gelinip sol tuşa basıldığında, bu noktaya ilişkin x ve y değerlerini gösteren küçük bir pencere açılır.

Şekil 13.32 Şekil 13.33

Şekil 13.32'de SSE sütununa fare ile 'tık'lanıldığında bu sütundaki değerler büyüklüklerine bağlı olarak sıralanırlar. Benzer şeyler Adj R-square için de söylenebilir. Eğri6 değerlerinin sütunun en üstünde olması en iyi eğri uydurmanın bu eğri ile yapıldığını da göstermektedir. Şekil 13.34'de en iyi eğrinin katsayıları gösterilmiştir.

59

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 60: MATLAB Uğur Arifoğlu

Şekil 13.34 Şekil 13.35 13.6.1.2.4. Ekstrapolasyon

Şimdiye kadar, verilen dataların alt ve üst sınırları arasında kalan değerleri içeren bir eğri uydurma işlemi gerçekleştirildi. Mevcut data değerlerini kullanarak bu data değerlerinin dışında kalan değerler için de bilgi istenebilir. Örneğin; verilen problemde cdate değerleri; 1790 ile 1990 arasında, pop değerleri ise 3.9 ile 248.7 arasında değişmekteydi. Eğer kullanıcı mevcut 7 adet eğriyi kullanarak 1790'dan küçük ve/veya 1990'dan büyük seneler için pop değerlerini bulmak istese (extrapolasyon) cftool ortamında ne yapmalıdır?

Yukarıda bahsedilen soruyu cevaplamak için öncelikle şekil 13.31'de Tools menüsünde yer alan Axis Limit Control ifadesi 'tık'lanmalıdır. Bu işlem yapıldığında kullanıcının karşısına şekil 13.33'de verilen pencere çıkar. Bu pencere iki adet alt pencereden oluşmaktadır; Data and Fits ve Residuals. Bu pencerelerde yatay eksen için X Lower Limit-X Upper Limit ve düşey eksenler için Y Lower Limit ve Y Upper Limit butonları bulunmaktadır. Bu butonların sağ tarafında bulunan aşağı ve yuları ok işaretlerine 'tık'lanılarak limit değerleri azaltıp artırmak mümkündür. Örnek olarak X değerleri 1800 ile 2050 aralığında seçilirse şekil 13.34'de gösterilen pencere elde edilir. Bu değişim bir liste olarak görülmek istenir ise şekil 13.35'de Analysis.. butonuna 'tık'lanılmalıdır. Bu işlem yapıldığında kullanıcının karşısına şekil 13.36'da verilen pencere çıkar. En iyi eğri uydurmanın egri6 ile yapıldığı bilindiği için şekil 13.36'da Fit to analyze ifadesinin sağ tarafındaki boşluğa egri6 getirilmiş, bu kutunun altında yer alan Analyze at Xi kutusu içine ise istenilen aralık ve artış miktarı yazılmalıdır. Şekil 13.36'daki uygun kutucuklar işaretlenip Apply seçeneğine 'tık'lanıldığında şekil 13.36'da sağ tarafta yer alan (1800 ile 2050 aralığındaki ) cdate ve (bu aralığa karşı gelen)pop değerler listesi elde edilir.

Şekil 13.36 Şekil 13.37

Şekil 13.36'da Save to workspace..butonuna basıldığında kullanıcının karşısına küçük bir pencere çıkar. Bu pencere içindeki boşluğa bir isim yazıldığında, Workspace ortamında bu adla anılan bir yapı dosyası içine ekstrapolasyon değerleri kaydedilir.

13.6.1.2.5. Table of fits seçenekleri

Şekil 13.32'de Table of fits penceresinde uydurulan eğriler hakkında bilgi vermek üzere yerleştirilmiş iki adet istatistik tanımı yer almaktadır: SSE ve Adj R-square. SSE değeri en az karesel hata hesabını yapan bir istatistiksel büyüklüktür. Bu değer sıfıra doğru yaklaştıkça, iyi bir eğri uydurma işleminin gerçekleştirildiği düşünülebilir. Eğri uydurma işleminde diğer bir kalite ölçüsü ise Adjusted R-square katsayısıdır. Bu değerin, iyi bir eğri uydurma işleminde 1'e yaklaşması istenir. Kullanıcının Table of fits seçeneklerini değiştirmesi, diğer bir ifade ile istatistiksel ölçme büyüklüklerini belirlemesi de mümkündür. Bunun için şekil 13.32'de yer alan Table options.. butonuna 'tık'lanmalıdır. Bu işlem yapıldığında şekil 13.37'da gösterilen pencere ile karşılaşılır. Bu pencerede yer alan kutucuklar işaretlendiğinde, bunların sağ tarafında yer alan

60

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 61: MATLAB Uğur Arifoğlu

ifadeler, Table of fits içinde gözükür. Şekil 13.34'de görülen Table of Fits ayarları, şekil 13.37 yardımı ile gerçekleştirilmiştir. Şekil 13.37'de görülen istatistiksel tanımlar aşağıda kısaca tanıtılmıştır:

-SSE (The sum of squares due to error)

değeri ölçülen data vektörünün i. elemanını, eğri uydurma sonunda elde edilen data vektörünün i.

elemanını, ise ağırlık katsayılarını göstermek üzere;

SSE=

eşitliği ile hesaplanır.SSE, 0'a yaklaştıkça eğri uydurma işleminin başarılı olduğu söylenebilir.

-R-squarey vektörü ile, y vektörü arasındaki korelasyonun karesine eşit bir katsayıdır. İki büyüklüğün birbirine bölümünden elde edilir (n; y (veya ) vektörü eleman sayısı):

R ; SST=SSR+SSE

R değeri 0 ile 1 arasında değişir. R değeri 1'e yaklaştıkça eğri uydurma işleminin başarılı olduğu söylenebilir.

-Adj R-sq (Adjusted R-square)v (değeri büyük olması istenir) rezidü serbestlik derecesi olmak üzere, Adj R-sq aşağıdaki ifade ile hesaplanır.

Adj R-sq =

Genellikle eğri uydurmada en iyi verimlilik göstergesidir. 1'e yakın olması istenir.

-RMSE (Root Mean Squared Error)Ortalama karesel hatanın (MSE)kareköküdür.0'a yakın olması istenir.RMSE= =SSE/v

13.6.1.2.6. Eğri uydurma sonuçlarının kaydedilmesi

Şekil 13.38

61

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 62: MATLAB Uğur Arifoğlu

Şekil 13.39 Şekil 13.40

Şekil 13.32'de Save to Workspace butonuna 'tık'lanıldığında şekil 13.38'de verilen pencere açılır. Bu pencerede üç adet küçük kutucuk yanında üç adet ifade yer almaktadır. Örneğin en üstte yer alan Save fit to MATLAB object named ifadesinin sol tarafında yer alan kutucuk fare yardımı ile 'tık'lanıldığında, sağ tarafta yer alan boş dikdörtgen kutu içinde yazılı olan fittedmodel1 adlı cfit objesi, Workspace ortamında oluşacaktır. Şekil 13.39'da Workspace ortamında yüklenen fittedmodel1 üzerine çift adet 'tık'lanıldığında en iyi eğri uydurma modeline ilişkin polinom katsayıları, Array Editor ortamında belirir. Benzer işlem goodness1 yapısı için yapılırsa, en iyi eğriye ilişkin istatistiksel değerler, Array Editor ortamında, şekil 13.40'da gösterildiği gibi ortaya çıkar. Output1 yapısı içinde ise kullanılan yaklaşım ile ilgili ilave açıklamalar yer alır.

Kullanıcı şekil 13.32'de görülen eğri türlerini ileride kullanılmak üzere saklamak isteyebilir. Bunun için önce (Curve Fitting Tool) şekil 13.35'de File menüsü içinde yer alan Save Session..komutu 'tık'lanılmalıdır. Bu işlem yapıldığında kullanıcının karşısına şekil 13.42'de verilen pencere çıkar. Kullanıcı tarafından bir dosya adı altında (ör:egri_uydurma) tüm eğriler, Kaydet butonuna 'tık'lanılarak kaydedilir. Bu tür dosyaların uzantısı cfit olur. Eğer MATLAB ortamından çıkılır (veya bilgisayar kapatılır) ve daha sonra tekrar bu eğrilere ulaşılmak istenirse, şekil 13.35'de gösterilen Curve Fitting Tool penceresinde File menüsü altında yer alan Load Session..komutuna 'tık'lanılır. Bu işlem yapıldığında şekil 13.42'ye benzer bir pencere açılır. Burada egri_uydurma.cfit seçilir ve Aç butonuna 'tık'lanılır ise şekil 13.35'deki pencere açılır.

Şekil 13.41 Şekil 13.42

Eğer kullanıcı 7 adet eğriden bazılarını silmek istiyor ise şekil 13.35'de Plotting..butonuna 'tık'lamalıdır. Bu işlem yapıldığında şekil 13.43'de gösterilen pencere çıkar. Bu pencerede silinmek istenen eğrilerin isimlerinin sol tarafındaki kutucuklar boş bırakılır ve pencerenin sol altındaki Clear..ifadesinin yanındaki kutucuk işaretlenir, Close butonuna 'tık'lanılır. Bu işlem sonunda şekil 13.35'de görülen egri1,egri2,egri3 ve egri4 eğrileri ortadan kalkar.

62

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 63: MATLAB Uğur Arifoğlu

Şekil 13.43 Şekil 13.44

Kullanıcı isterse yukarıda bulunan 7 adet eğriyi M dosyası (altprogram olarak) saklayabilir. Bu işlemi yapmak için şekil 13.35'de verilen Curve Fitting Tool penceresinde File menüsü içinde yer alan Generate M-File ifadesine 'tık'lanılır. Bu işlem sonunda şekil 13.42'ye benzer bir pencere açılır. Bu M dosyasına, uygun bir isim verilerek (ör: egri_uygurma.m), Kaydet butonuna 'tık'lanılır.

Eğer kullanıcı, yukarıda belirtildiği şekilde kaydedilen egri_uydurma.m adlı altprogramı, bir MATLAB dosyası olarak çalıştırmak isteyebilir. Bunun için şekil 13.44'de bir kısmı gösterilen egri_uygurma.m adlı altprogram dosyasının ilk satırına bakılmalıdır. Şekil 13.44'de ilk satır;

function egri_uydurma(cdate,pop)

olarak verilmektedir. Bu satırda function komutundan sonra gelen 'egri_uydurma(cdate,pop)' ifadesi, Command Window ortamında aşağıdaki;

>>egri_uydurma(cdate,pop) ('enter')şekilde uygulanırsa, egri_uygurma.m adlı altprogram çalışır ve sonuçta şekil 13.35'de görülen eğriler elde edilir. Yukarıda verilen satırın çalışabilmesi için cdate ve pop vektörlerinin Workspace ortamında tanımlı olması gerekir.

13.6.1.2.7. Data değerleri içindeki gürültünün süzülmesi (smooting)

Eğer verilen data değerleri gürültü içeriyor ise kullanıcının bu değerleri ortadan kaldırmak için bir süzme algoritmasına ihtiyacı olacaktır. Eğri uydurma işlemi parametrik bir işlem olmasına rağmen süzme, parametrik olmayan bir uydurma işlemidir. Süzme işlemi, gürültü içeren data değerlerini data vektörü içinden uzaklaştırma işlemi olarak da yorumlanabilir. Süzme işleminde yaygın olarak kullanılan iki yaklaşım vardır: filtreleme ve regresyon. Her iki yaklaşım da bir aralığa span (pencere) ihtiyaç duyar. Bu pencere işlem yapılan data değerleri ile beraber yer değiştirir. Span büyüdükçe eğrideki pürüzlülük azalır fakat pürüzlüğü alınan datanın çözünürlüğü azalır, span küçüldükçe tam ters sonuçlar elde edilir. Optimal span değeri, data değerlerine ve kullanılan süzme yöntemine bağlıdır. Deneyerek bulmak en yaygın yaklaşımdır.

Curve fitting toolbox (eğri uydurma araç kutusu) başlıca aşağıda verilen süzme yöntemlerini kullanır. Moving average filtering-alçak geçiren bir filtredir, komşu noktaların ortalamasını alır. Lowess ve loess-Lineer en küçük kareler yöntemi ile eğri uydurur,birinci dereceden polinom (lowess) veya

ikinci dereceden polinom (loess) kullanır. Savitzky-Golay filtering-ilk yönteme benzer, filtre katsayılarının türevini alır ve çeşitli derecelerden

polinomları kullanır.

Kullanıcı isterse düzleştirme için cubic spline komutunu da kullanabilir.

Düzleştirme işlemini iyi açıklayabilmek için MATLAB arka planında saklı bulunan bir başka data çifti kullanılacaktır. cftool ortamında düzleştirme (smooting) işlemi için kullanılan arayüz şekil 13.45'de gösterilmiştir. Bu dataya ulaşmak için;

>>load enso ('enter')

63

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 64: MATLAB Uğur Arifoğlu

komutu uygulanmalıdır. Bu işlem yapıldığında Workspace ortamında, month (ay) ve pressure (basınç) adlı eşit boyutta iki vektör oluşur. y eksenini oluşturan pressure vektörü; aylık olarak Avusturalya'daki iki kritik bölge arasındaki atmosferik basınç ortalamasını içerir (bu bilgi kullanılarak güney yarım küredeki rüzgar bilgilerine ulaşılır). x eksen bilgileri ise aylar içindeki nispi zamanı gösterir. Her bir vektör 168 sayı içerir. Şekil 13.45'de Create data set butonuna 'tık'lanıldığında şekil 13.46'da gösterilen Curve Fitting Tool penceresi açılır. Şekil 14.46'da fare ile herhagi bir nokta üzerine gelinip farenin sağ tuşuna basılır ve ortaya çıkan pencereden Line Style/Solid komutuna 'tık'lanılır ise şekil 13.47'de gösterilen eğri değişimi elde edilir. Şekil 13.45'de Smooth butonuna 'tık'lanıldığında ortaya çıkan pencerede Create smoothed data set butonuna 'tık'lanıldığında şekil 13.48'de verilen pencere elde edilir. Bu pencerede Method ifadesinin sağ tarafındaki boşluktaki ok işaretine 'tık'lanıldığında kullanıcının karşısına;

Şekil 13.45 Şekil 13.46

Şekil 13.47 Şekil 13.48

Moving Average Lowess(linear fit) Loess (quadratic fit) Savitzky-Golay Robust Lowess(linear fit)-sınır dışındakilere direnç gösterir Robust Loess (quadratic fit)-sınır dışındakilere direnç gösterir

metodları çıkar. Şekil 13.48'de Span ifadesinin sağ tarafındaki boşluğa; her bir düzleştirme hesaplamasında kullanılacak nokta (data) sayısı yazılır. Eğer metod olarak Savitzky-Golay seçilirse Span altındaki

64

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 65: MATLAB Uğur Arifoğlu

boşlukta Degree ifadesi belirir. Buraya polinom derecesi yazılır ve bu değerin Span değerinden az olması istenir.

Enso adlı data dosyasına yukarıda belirtilen tüm metodlara göre ayrı ayrı düzleştirme işlemi uygulanabilir. Bunun için şekil 13.48'den bir metod seçilmeli ve daha sonra pencerede Create smoothed data set butonuna 'tık'lanılmalıdır. Aynı işlem diğer metodları ayrı ayrı seçerek tekrarlanırsa şekil 13.49'da gösterilen pencere elde edilir. Bu pencere içinde yer alan smoothed data set penceresi içinde yer alan çözüm yaklaşımlarından herhangi birine (örneğin:Moving Average) fare ile 'tık'lanılıp daha sonra View butonuna 'tık'lanılırsa şekil 13.50'de görülen View Data Set penceresi elde edilir (enso(smooth) adı altında). Eğer şekil 13.49'da Save to workspace butonuna 'tık'lanıldığında bir pencere açılır. Bu pencere içindeki boşluğa bir ad yazılırsa şekil 13.50'de Index penceresinde görülen data değerleri bu ad altında workspace ortamında bir yapı dosyasında saklanır.

Şekil 13.49 Şekil 13.50

Şekil 13.46'da Plotting.. butonuna 'tık'lanılır ise şekil 13.51'de görülen pencere açılır. Bu pencerede yer alan her adın bir düzleştirme metoduna karşı geldiği bilinmektedir. Eğer bunların içinden bir tanesi seçilir ve kutu içine 'tık'lanılır ise şekil 13.52'de verilen değişim elde edilir. Eğer kullanıcının ekranında yalnızca noktalar var ise herhangi bir noktaya farenin sağ tuşu ile 'tık'lanıldığında açılan küçük pencerede Line Style/Solid komutuna 'tık'lamalıdır. Yapılan işlemin sonucunu görmek için şekil 13.47 ile şekil 13.52 birbirleri ile karşılaştırılmalıdır.

Şekil 13.51 Şekil 13.52

13.6.1.2.8. Data içindeki bazı değerlerin eliminasyonu

Yukarıda verilen month veya pressure adlı vektörlerin içinden bazı değerlerin (uygun olmadıkları için) silinmesi gerekebilir. Silinecek data değerleri vektör içinde farklı yerlerde olabilecekleri gibi (örneğin; 1.,8. ve

65

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 66: MATLAB Uğur Arifoğlu

10. elemanlar gibi) birbirini takip eden (bölgesel-örneğin; 18. eleman ile 35. eleman arasındaki tüm sayılar) sırada da olabilirler. cftool ortamında her iki durum için de eliminasyon yapılabilir.

Bu işlemlerin yapılacağı ara yüze ulaşmak için Curve Fitting Tool penceresinde (şekil 13.47) Exclude.. butonuna basılmalıdır. Bu işlem yapıldığında kullanıcının karşısına şekil 13.53'de verilen pencere çıkar.

Şekil 13.53 Şekil 13.54

Şekil 13.53'de Select data set ifadesinin sağ tarafındaki boşlukta yer alan ok işaretine 'tık'lanılarak enso adlı (içinde iki vektör içeren) dosya işaretlenmelidir. Böylece eliminasyon işleminin bu dosya içinde yer alan vektörler içinde yapılacağı belirlenmiş olmaktadır. Eğer daha önce bir ad altında eliminasyon işlemi gerçekleştirilmiş ise (şekil 13.54) bunların isimleri Existing exlusion rule penceresi içinde yer alır (elimine1 ve elimine2 gibi). Eğer yeni bir ad altında (ör:elimine3) bir eliminasyon işlemi daha gerçekleştirilmek isteniyor ise şekil 13.54'de gösterilen Exclusion rule name ifadesinin sağ tarafındaki boşluğa bu isim yazılmalıdır. Eğer enso içinde X değerlerinden bazıları (tek-tek) elimine edilecek ise Check to exclude enso alt penceresi içindeki satırların sol başındaki kutucuklara fare yardımı ile 'tık'lanılması gerekir. Şekil 13.54'de X (veya Y) eksenindeki ilk üç değer, elimine3 adı altında enso dosyasından (diğer bir ifade ile month ve pressure vektörlerinin ilk üç elemanı bu vektörler içinden) uzaklaştırılmaktadır. Bu işlemin uygulamaya sokulabilmesi için son olarak Create exclusion rule butonuna 'tık'lanılması gerekir. Kullanıcı isterse elimine ettiği elemanları grafik ortamında da görüntüleyebilir. Örneğin daha önce gerçekleştirilmiş olan eliminasyon3 adlı dosya elemanlarını grafik ortamda görmek istersek şekil 13.54'de elimine2 adlı dosya üzerine 'tık'landıktan sonra Exclude graphically butonuna 'tık'lanılmalıdır. Bu işlem yapıldığında kullanıcının karşısına şekil 13.55'de görülen pencere çıkar. Burada 'x' işareti ile gösterilen değerler presure vektöründen elimine edilen değerlerdir. 'o' işareti ile gösterilen değerler ise yeni presure vektörünü oluşturan değerlerdir.

Şekil 13.55 Şekil 13.56

Şekil 13.55'de Exclude All butonuna 'tık'lanıldığında buradaki tüm değerler pressure vektöründen uzaklaştırılırken, Include All butonuna basıldığında ise elimine edilen tüm değerler geri alınır.

66

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 67: MATLAB Uğur Arifoğlu

Şekil 13.54'de Exclude Section penceresinde ise elimine edilecek bölgeler belirlenir. Örneğin Y vektörünün 8'e eşit ve bu değerden küçük değerleri ile Y değerlerinin 10'a eşit ve değerden büyük olduğu bölgeler, enso içinden uzaklaştırılmak istensin. Bunun için ilk adım olarak şekil 13.56'da gösterildiği gibi boşluklar doldurulmalıdır. Create exclusion rule butonuna 'tık'lanıldığında bu bölge elimine4 adı altında kaydedilir. Eğer Exclude graphically butonuna 'tık'lanılırsa şekil 13.57'de gösterilen pencereye ulaşılır. Bu pencerede sol tarafta elimine edilen bölgeler gri tonla, geri kalan (elimine edilmeyen) bölgeler ise açık tonla işaretlenmiştir. Sağ tarafta yer alan tabloda ise gri satırlar elimine edilen değerleri, açık renkli satırlar ise elmine edilmeyen değerleri gösterir (bu tabloda tüm değerler gözükmemektedir). Şekil 13.56'da sağ alt tarafta yer alan Copy, View, Rename ve Delete butonları aktif değildir. Bu butonların aktif olabilmesi için Existing exlusion rule penceresi içinde yer alan adlardan bir tanesine 'tık'lamak gerekir. Bu butonlar kullanılarak bu pencere içinde yer alan dosyalar üzerinde kopyalama, çizdirme, isimlendirme ve silme işlemleri yapılabilir. Eğer şekil 13.552de 'o' işaretlerinin üzerine fare ile gelinip sol tuşa basılırsa bu işaret 'x' işaretine dönüşür (Excluded olur). Eğer farenin sol tuşu tutularak işaretler seçilir ise tuş bırakıldığında seçilen 'o' işaretleri 'x' işaretine dönüşür.

Şekil 13.57 Şekil 13.58

13.6.1.2.8.1. Bölgesel eliminasyon örneği

Yukarıda data eliminasyon işleminin iki türlü; tek-tek ya da bölgesel olabileceği belirtilmişti. Bilindiği gibi tüm parametrik eşitliklerde, Curve Fitting Toolbox başlangıç katsayılarını şart koşmaktadır. Bazı tip datada (örneğin; bir çok periyot içeren data) iyi bir başlangıç değeri seçilemez ise tatminkar bir sonuç alınamaz. Böyle durumlarda bölgesel eliminasyon, uygun bir başlangıç değeri tespit edilme işleminde kullanıcıya yardımcı olabilir.

Burada bölgesel eliminasyona örnek olarak gürültü içeren bir sinüs dalgasında başlangıç değer kestirimi yapılacaktır. Aşağıdaki MATLAB satırlarında gurultu_sin adı ile içinde gürültü barındıran bir sinüzoidal dalga üretilmektedir. Bu dalganın üç önemli parametresi (sırası ile); genlik=10, açısal frekans=16*pi ve faz farkı=pi/4 olarak, param adlı 3 elemandan oluşan vektörde saklanmaktadır. Zaman ekseni olarak seçilen t vektörü ; 0 ila 1 saniye arasında değişmektedir, artış değeri olarak 0.005 sn alınmaktadır. Gürültü işaretinin üretilmesinde (her zamanki gibi) rand komutu kullanılmaktadır.

>>rand('state',0) ('enter')>>t=[0:0.005:1.0]; ('enter') >>param=[10 16*pi pi/4]; ('enter')>>gurultu_sin =param(1)*(sin(param(2)*t+param(3)))+(rand(size(t))-0.5);

('enter')Yukarıdaki satırlar uygulandığında X ekseni olarak t vektörü, Y ekseni olarak ise gurultu_sin değerleri kullanılacaktır. Daha önce de açıklandığı gibi; cftool komutu uygulandığında açılan Curve fitting

67

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 68: MATLAB Uğur Arifoğlu

Tool penceresinde Data.. butonu yardımı ile bu iki vektör X Data ve Y Data olarak atanırlar. Daha sonra Curve fitting Tool penceresinde Fitting.. butonuna 'tık'lanıldığında açılan pencerede New Fit butonuna 'tık'lanılmalıdır. Bu işlem sonunda gerekli ayarlamalar yapıldığında şekil 13.58'de verilen görüntü elde edilir. Bu pencerede Data set ifadesinin sağ tarafındaki boşluğa (üretilen eğri sinüs formunda olduğu için) sin1 yazılmıştır. Type of fit ifadesinin sağ tarafında ise Sum of Sin Functions seçeneği bırakılmalıdır. Bu pencerede Fit options..tuşuna basılırsa şekil 13.59'da verilen görüntü, Apply yanındaki kutucuk 'tık'lanırsa şekil 13.60 elde edilir.

Şekil 13.59 Şekil 13.60

Şekil 13.59'da StartPoint değerleri incelendiğinde a1 (sinüs işaretinin genlik değeri hariç ) diğerlerinin param değerlerine yakın olmadığı görülecektir. Şimdi şu soru sorulabilir: StartPoint değerleri, param değerlerine nasıl yaklaştırılabilir?. Bu işlem 3 adımda gerçekleştirilebilir. Bu adımlar sıra ile aşağıda gösterilmiştir:

1- Şekil 13.60'da Exclude.. butonuna 'tık'lanılmalıdır. Bu işlem yapıldığında şekil 13.61'de gösterilen pencere elde edilir. Bu pencerede Exclusion rule name ifadesinin sağ tarafındaki boşluğa (yalnızca 1 periyotluk data değerleri inceleneceği için) periyot1 yazılmıştır. Select data set ifadesinin sağ tarafına ise oku kullanarak gurultu_sin vs t ifadesi getirilmelidir. Şekil 13.61'de

Şekil 13.61 Şekil 13.62

Exclude graphically butonuna 'tık'lanıldığında Select Points for Exclusion Rule penceresi açılır. Bu pencerede farenin sol tuşu (basılı tutularak) yardımı ile 1 periyotluk bir zaman (0.125 saniye) dilimi dışında kalan bölge işaretlenir ve sol tuşu bırakılırsa şekil 13.62'de verilen pencere elde edilir. Bu pencerede 'x' işaretli data değerleri, Y eksenini oluşturan gurultu_sin adlı vektörün dışına

68

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 69: MATLAB Uğur Arifoğlu

çıkarılmıştır. Şekil 13.61'de Create exclusion rule butonuna 'tık'lanıldığında, şekil 13.62'de 'o' işareti ile gösterilen data değerleri periyot1 adlı dosya içine kaydedilmiş olmaktadır.

2- Şekil 13.60'da Fitting.. butonuna 'tık'lanıldığında açılan Fitting penceresinde Copy fit komutuna 'tık'lanıldığında yeni bir Fitting penceresi ortaya çıkacaktır. Bu pencerede Fitname boşluğuna sin2, Type of fit boşluğuna Sum of Sin Functions yazılarak, Exclusion rule boşluğuna ise ok yardımı ile periyot1 ifadesi getirildiğinde şekil 13.63 elde edilir. Bu pencerede Apply..butonuna 'tık'lanıldığında ise şekil 13.64'de verilen pencere elde edilir. Şekil 13.64 incelendiğinde genel olarak kabul edilebilir bir 'eğri uydurma yaklaşımı'na ulaşıldığı söylenebilir.

Şekil 13.63 Şekil 13.64

3- Son adımda ise, 2. adımda ulaşılan a1,a2 ve a3 katsayıları kullanılarak ile 1. adımdaki işlemler tekrar yapılacaktır (eliminasyon yok). Bunun için ilk adım olarak şekil 13.63'de Table of Fits içindeki sin1 ifadesi üzerine fare ile 'tık'lanılmalıdır. Daha sonra Fit options..tuşuna 'tık'lanılmalı ve açılan pencere içindeki a1=10.444, a2=43.332 ve a3=3.646 katsayıları yerine 2. adımdaki a1=9.948, a2=50.08 ve a3=0.7904 katsayıları yazılmalıdır (şekil 13.65). Yeni koşullarda şekil 13.63'de Fit options..butonuna 'tık'lanıldığında şekil 13.66'nın üst penceresi elde edilir. Bu pencerede View/Residuals/Line plot seçenekleri kullanıldığında ise şekil 13.66 elde edilir. Yeni koşullarda Fitting penceresine ilişkin yeni değerler ise şekil 13.67'de görülmektedir.

Şekil 13.58 ile şekil 13.67'deki istatistiksel değerler (SSE, R-square) değerleri karşılaştırıldığında önemli bir iyileşme sağlandığı görülecektir. Yeni çalışma durumunda, şekil 13.63'deki a1=9.948, a2=50.08 ve a3=0.7904 katsayılarının, şekil 13.67'de; a1=9.996, a2=50.28 ve a3=0.7744 değerlerine dönüştüğü de gözden kaçmamalıdır

69

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 70: MATLAB Uğur Arifoğlu

Şekil 13.65 Şekil 13.66

Şekil 13.67 Şekil 13.68

Açıklama: Verilen bir data dosyası içinde yer alan vektörler içinde Inf veya NaN özellikli sayılar var ise bu sayıları vektörler içinden uzaklaştırmak içn aşağıdaki komut satırları kullanılabilir. Örneğin a adlı bir vektör içinde hem Inf hem de NaN özellikli sayılar olsun. Bu vektör içindeki Inf sayıları tespit etmek için isinf komutu, Nan sayıları tespit etmek için ise isnan komutu kullanılır. Bu sayıların bulunduğu sütun numaraları find komutu ile tespit edildikten sonra bu sayılar boş kümeye atanırlar. Aşağıdaki komut satırları incelenmelidir.

>>a=[-1 3i -56 inf 0 pi NaN 34]; ('enter')>>indis1=find(isinf(a)); ('enter')>>a(indis1)=[ ]; ('enter')

70

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 71: MATLAB Uğur Arifoğlu

>>indis2=find(isnan(a)); ('enter')>>a(indis2)=[ ]; ('enter')

>>a -1. 0 + 3.i -56. 0 3.1416 34.

13.6.1.2.8.2. Fit Options penceresi

Fit Options penceresi, eğri uydurmada işlemindeki yöntem ve parametrelerin tespit edilmesinde kullanılır. Şekil 13.68'de görülen Fit Options penceresi içinde kullanılan seçenekler, şekil 13.67'de Type of fit içinde yer alan fonksiyon ve seçeneklere bağlı olarak değişir. Örneğin, Type of fit içinde yer alan Interpolant ve Smooting spline seçeneklerinde, Fit Options seçenekleri ortadan kalkar. Şekil 13.68'de görülen Fit Options penceresi, Type of fit olarak Exponantial seçeneğine göre oluşturulmuştur. Bu pencerede görülen terimler aşağıda açıklanmıştır: Method

Eğri uydurmada kullanılan yöntemdir. Type of fit içinde seçilen eğri modeline göre, method otomatik olarak belirlenir. Örneğin lineer modeller için LinearLeastSquares metod, nonlineer sistemler için NomlinearLeastSquares metod kullanılır.

RobustRobust least squares eğri uydurma metodunun tercih edilip edilmeyeceğine karar vermek için kullanılır. Bu seçenek içinde 4 alt seçenek yer alır.- Off Bu seçenek default (kendiliğinden ayarlı) dır. Bu seçenek işaretli olduğunda Robust fitting işlemi yapılmaz.-OnRobust method (bisquare weights) kullanılır.

-LAR Least Absolute Residuals ile minimizasyon işlemi yapılarak eğri uydurulur. -Bisquare

Minimizasyon işlemi, summed square of the residuals (bisquare weighting) yöntemi ile yapılır. Çoğu durumda robust, eğri uydurmada en iyi seçenektir.

AlgorithmEğri uydurmada kullanılacak algoritma seçeneklerini sunar. 3 adet algoritma içerir:-Trust-Region

-Levenberg-Marquardt -Gauss-NewtonŞekil 13.68'de yer alan DiffMinChange ve DiffMaxChange seçenekleri, sonlu fark parametrelerini içerir. DiffMinChange; sonlu fark Jacobianlar için katsayılardaki minimum değişim miktarı (default değeri 10^-8 dir), DiffMaxChange ise sonlu fark Jacobianlar için katsayılardaki maksimum değişim miktarıdır (default değeri 0.1 dir).

Şekil 13.68'de yer alan MaxfunEvals, MaxIter,TolFun ve TolX seçenekleri ise eğri uydurmada kullanılan yakınsama kriterlerini içerir. MaxfunEvals; maksimum sayıda model fonksiyon sayısıdır. Default değeri 600 dür. MaxIter; eğri uydurmada kullanılacak maksimum iterasyon sayısıdır. Default değeri 400 dür. TolFun (default değeri:10^-6) ve TolX (default değeri:10^-6) ise sırası ile fonksiyon ve katsayılar için bitirme toleransıdır.

Şekil 13.68'de yer alan (en alt pencere) seçenekler katsayı parametrelerine ilişkindir. Unknowns; uydurulan eğriye ilişkin katsayılardır. StartPoint; katsayı başlangıç değerleridir. Default değerleri seçilen modele bağlıdır.Lower; uydurulan eğri katsayılarının alt sınırıdır, Gaussians için 0'dan küçük olamaz. Upper; uydurulan eğri katsayılarının üst sınırıdır.

13.6.1.2.8.3. Prediction Bounds ve Confidence Level

71

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 72: MATLAB Uğur Arifoğlu

Şekil 13.69 Şekil 13.70

Eğri uydurmada bulunan denklem katsayıları (coefficients) belirli aralık ile birlikte verilir. Örneğin şekil 13.67'de a1 (=9.996) katsayısının 9.941(min) ile 10.05(max) arasında olduğu görülmektedir. Aynı pencerede confidence bounds değeri olarak %95 seçildiği görülmektedir. Kullanıcı isterse confidence bounds değerini şekil 13.69'da gösterildiği gibi Curve Fitting Tool penceresini kullanarak da seçebilir. Şekil 13.70'de ise confidence bounds değeri olarak %50 seçilmiştir. Her iki şekilde de noktalı çizgiler, uydurulan eğrinin alt ve üst sınırlarını göstermektedir. Her iki şekilde de görüldüğü gibi confidence bounds değeri azaldıkça noktalı çizgiler asıl eğriye (düz çizgili) yaklaşmaktadır. confidence bounds değeri büyüdükçe a1'in alt ve üst sınır değerleri arasındaki fark artacaktır. confidence bounds değerinin ne anlama geldiğini açıklamak için şöyle bir örnek verilebilir: Mevcut x ve y ekseni data değerlerini kullanarak bir eğri uydurulmuş olsun. Daha sonra (örneğin) x=5 yeni bir x değerine karşı gelen y değeri sorulsun. Bu işlemi yapabilmek için daha önce elde edilen (uydurulan) eğri denkleminden faydalanılacağı aşikardır. Eğer eğri denklemini elde etmeden önce confidence bounds değeri olarak (örneğin) %95 seçilmiş ise, x=5 değerine karşı gelen y değeri, %95 olasılıkla şekil 13.69'da gösterilen iki kesik eğri arasındaki bölge içinde kalacaktır. Eğer %50 seçilirse x=5 değerine karşı gelen y değeri %50 olasılıkla şekil 13.70'de gösterilen iki kesik eğri arasındaki bölge içinde kalacaktır. Görüldüğü gibi confidence bounds değeri büyüdükçe (y değerinin içinde kalacağı) bant aralığı genişlemektedir (aranan y değeri daha geniş sınırlar arasında aranmaya başlanmaktadır). Her iki şekilde de View menüsü içindeki prediction bounds seçeneğinin işaretli olduğu unutulmamalıdır. Eğer bu seçenek işaretlenmez ise her iki şekilde yer alan kesik çizgiler ortadan kalkar. Şekil 13.67'de Results penceresine bakarak, üstteki kesik çizgili eğrinin; y=9.941*x^2+50.26*x+0.7633, alttaki kesik çizgili eğrinin ise y=10.05*x^2+50.3*x+0.7855 denklemi ile gösterildiği söylenebilir. Düz çizgiye (asıl eğri) ilişkin denklem ise y=9.996*x^2+50.28*x+0.7744 eşitliği ile verilmiştir.

13.6.1.2.8.4. Residual hakkında

Residual (rezidü) vektörü, ölçüm sonucu bulunan y vektörü ile eğri uydurma sonunda elde edilen vektörü arasındaki farka eşittir. Residual değişimini çizmek için Curve Fitting Tool penceresinde yer alan View/Residual menüsüne girilmelidir. Rezidü değişim eğrisi iki şekilde olabilir.

1-Örneğin, data değerleri (ölçüm değerleri) şekil 13.71'de gösterildiği gibi değişiyor ise, bu değerlere ilişkin rezidü eğrisi şekil 13.72'de gösterildiği formda olacaktır (bu tip eğriler iyi bir eğri uydurma yapıldığına işaret eder). Burada görüldüğü gibi rezidü eğrisinin değişimi, y=0 eğrisinin etrafında dolaşmaktadır.

72

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 73: MATLAB Uğur Arifoğlu

Şekil 13.71

Şekil 13.722-Örneğin, data değerleri (ölçüm değerleri) şekil 13.73'de gösterildiği gibi değişiyor ise, bu değerlere ilişkin

rezidü eğrisi şekil 13.74'de gösterildiği formda olacaktır (bu tip eğriler kötü bir eğri uydurma yapıldığına işaret eder). Burada görüldüğü gibi rezidü eğrisi (şekil 13.72'nin aksine), y=0 eğrisinin etrafında dolaşmamaktadır. Böyle bir rezidü eğrisi ile karşılaşıldığında yapılacak şey; eğri modelinin, Fitting penceresindeki Type of Fit alt penceresi içinde yer alan diğer eğri modellerinden birisi ile değiştirilmesidir.

Şekil 13.73

Şekil 13.74

13.6.1.2.8.5. Parametrik olmayan eğri uydurma

73

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 74: MATLAB Uğur Arifoğlu

Şimdiye kadar parametrik eğri uydurma yaklaşımları tanıtıldı. Bazen kullanıcı ölçüm sonucu elde edilen data değerleri ile uydurulan eğri arasındaki uyumun çok daha düzgün olmasını arzu edebilir. Böyle bir durumda cftool ortamı kullanıcıya Interpolant ve Smooting Spline seçeneklerini sunar. Bu iki seçenek Fitting penceresindeki Type of Fit alt penceresi içinde yer alır. Bu iki seçenek kullanıldığında şekil 13.75'de görüldüğü gibi, eğri denklemi (katsayıları) olmaz (Fitting penceresinin Result alt penceresinde uydurulan eğriye ilişkin yalnız, istatistiksel katsayı değerleri bulunur). Kullanıcı bu iki modeli kullanarak eğriye ulaştığında, eğri üzerine fare ile gelip sol tuşa basarsa, açılan küçük pencere içinde bu noktanın x ve y değerlerini görür (şekil 13.76). Smooting Spline modelinde düzgün bir eğri uydurmak için Smooting parameter (p) seçeneği kullanılır (örneğin, şekil 13.75'de p=0.99 alınmıştır). Interpolant seçeneği altında kullanıcıya 4 farklı alt model sunulur: linear, nearest neighbor, cubic spline ve shape-preserving.

Şekil 13.75 Şekil 13.76

14.1.4. Üç boyutlu integrasyon

Aşağıda verilen üç boyutlu integral;

q= (14.8)

MATLAB ortamında (Simpson veya Lobatto yöntemleri ile üç boyutlu integral alma işlemi için) triplequad komutu ile hesaplanır.

q=triplequad(‘fonksiyon’,xmin,xmax,ymin,ymax,zmax,zmin): fonksiyon yerine gelecek eğri denklemi üç değişkenli olan q=f(x,y,z) şeklinde olmalıdır. Dış integralin alt sınırı zmin, üst sınırı zmax, ortadaki integralin alt sınırı; ymin, üst sınırı ise ymax alınmalıdır. Dıştaki integralin alt sınırı xmin, üst sınırı xmax olmalıdır. dblquad komutunu kullanmak için öncelikle f(x,y,z) eğrisi tanımlanmalıdır.

>> q=triplequad('x.^2+y.^2+z.^2',0,5,-3,2,-1,4) q =

74

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 75: MATLAB Uğur Arifoğlu

1875

Kullanıcı isterse yukarıdaki komut satırı içinde yer alan iki tırnak içindeki yere bir alt program ismi yazabilir. Daha sonra bu alt program dosyası içine integre edilecek fonksiyonu yazarak da aynı işlemi yapabilir.

Problem 14.8

Şekil 14.20’de verilen taralı alanı gösteren OKB alanını hesaplayan ve her iki eğriyi aynı eksen üzerine çizdiren MATLAB programını yazınız. (Not: Hiçbir hesaplama el ile yapılmayacak, hepsi MATLAB ortamında gerçekleştirilecektir)

Çözüm

a=roots([1 -0.5 -1]) % y1 ve y2 eğrilerinin kesiştiği noktalar aranıyorb=a(2) % B noktasının apsis değeriOKBb_yamugu=quad('0.5*x+1’,0,b) ObB_alti=quad('x.^2',0,b) % yarim parabolun altindaki alanalan=OKBb_yamugu- ObB_alti % aranılan alan hesabıx=-2:0.1:2;y=0.5*x+1;hold on % iki egri ayni eksen uzerine cizdiriliyorplot(x,y)y1=x.^2;plot(x,y1)

Yukarıda verilen programın çalıştırılması sonunda elde edilen değerler aşağıda gösterilmiştir. Program sonunda elde edilen her iki eğri ise şekil 14.21’de gösterilmiştir.

>>a =

-0.7808

1.2808

b =

1.2808

OKBb_yamugu =

1.6909

75

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

y

x

1x5.0y1

22 xy

-2

B

A0

1 K

b

Şekil 14.20

Page 76: MATLAB Uğur Arifoğlu

ObB_alti =

0.7003

alan =

0.9905

>>

Şekil 14.21

Problem 14.9

Şekil 14.22'de verilen taralı alanı gösteren ABO alanını hesaplayan MATLAB programını yazınız. (Not: Hiçbir hesaplama el ile yapılmayacak, hepsi MATLAB ortamında gerçekleştirilecektir)

Şekil 14.22

Çözüm

>>a=roots([1 -0.5 -1]) %y1 ve y2 eğrilerinin kesiştiği noktalar aranıyor>>b=a(1) % B noktasının apsis değerib= -0.78077640640442>>BbO_alani=quad('0.5*x+1-x.^2',b,0) >>AKO_alani=quad('0.5*x+1',-2,0) % üçgenin alanı>>alan=AKO_alani- BbO_alani % aranılan alan hesabıalan= 0.53029000000000>>x=-5:0.1:5;>>y=0.5*x+1;

76

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

y

x

1x5.0y1

22 xy

-2

B

A0

1 K

b

Page 77: MATLAB Uğur Arifoğlu

>>hold on>>plot(x,y)>>y1=x.^2;>>plot(x,y1)

Problem 14.10

Şekil 14.23'de verilen taralı alanı gösteren OKB alanını hesaplayan MATLAB programını yazınız. (Not: Hiçbir hesaplama el ile yapılmayacak, hepsi MATLAB ortamında gerçekleştirilecektir)

Çözüm

>> a=roots([1 -0.5 -1])% y1 ve y2 eğrilerinin kesiştiği noktalar aranıyor>> b=a(2) % B noktasının apsis değeri>> OKBb_yamugu=quad('0.5*x+1,0,b) >> ObB_alti=quad('x.^2',0,b) % yarim parabolun altindaki alan>> alan=OKBb_yamugu- ObB_alti % aranılan alan hesabı>> x=-2:0.1:2;>> y=0.5*x+1;>> hold on % iki egri ayni eksen uzerine cizdiriliyor>> plot(x,y)>> y1=x.^2;>>plot(x,y1)

15.6. Yüksek mertebeden diferansiyel denklemlerin çözümü

n. mertebeden bir diferansiyel denklem, (değişken dönüşümü yapılarak) n adet birinci mertebeden diferansiyel denklem sistemine dönüştürülebilir. Bu yaklaşım MATLAB ortamında çok kullanılır. n. mertebeden bir diferansiyel denklem;

(15.15)veya

(15.16)

olarak verilsin. (15.16) eşitliği tekrar düzenlenirse;

77

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

x

1x5.0y1

22 xy

-2

B

A0

1 K

b

Şekil 14.23

y

Page 78: MATLAB Uğur Arifoğlu

(15.17)

elde edilir. Değişken dönüşümü yapılarak;

.

.

(15.18)

elde edilebilir. (15.18)’de verilen eşitliklerin her iki tarafı t’ye göre türetilirse;

.

.

(15.19)

elde edilir.Böylece (15.15)’de verilen n. mertebeden bir adet diferansiyel denklem (15.19)’da görüldüğü gibi birinci mertebeden n adet diferansiyel denkleme dönüşmüştür.

Problem 15.9

a) Yukarıda verilen 2.mertebeden diferansiyel denklemi, birinci mertebeden 2 adet diferansiyel denkleme dönüştürünüz ( ).

b) Elde edilen iki adet birinci mertebeden diferansiyel denklemi [0 20] aralığında, ve y(0)=0.25 ilk koşulları altında MATLAB ortamında çözünüz ve gerekli eğrileri çizdiriniz.

Çözüm

a) ;

değişken dönüşümleri yapılır ve elde edilen eşitlikler her iki taraftan t’ye göre türetilirse;

;

elde edilir. eşitliği, eşitliği ve eşitliği ifadesinde yerlerine

konulursa;

(1)

elde edilir. ve eşitlikleri birlikte kullanılırsa;

78

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 79: MATLAB Uğur Arifoğlu

(2)

bulunur. Böylece eşitliği, iki adet birinci mertebeden diferansiyel denkleme dönüşmüş olmaktadır.

b)Öncelikle yukarıda verilen (1) ve (2) numaralı birinci mertebeden iki adet diferansiyel denklem bir alt program içine sokulmalıdır. Bu amaçla kullanılacak function programının ismi gcoz3.m olsun ve MATLAB editör ortamında yazılsın:

Şekil 15.10

function turev = gcoz3(t,x)turev = [x(2);x(2).*(1-x(1).^2)-x(1)]; % turev=[dx(1);dx(2)]

Alt programı çağıran ana MATLAB programı ise aşağıda verilmiş, elde edilen eğriler ise şekil 15.10’da gösterilmiştir:

[t ys]=ode23('gcoz3',0,20,[0.25 0]); subplot(211), plot(t,ys(:,1));title ('y nin zamanla degisimi'),xlabel('t'), grid;subplot(212), plot(t,ys(:,2));title ('y’nin birinci türevinin zamanla degisimi'), xlabel('t'), grid

Problem 15.10

diferansiyel denklemini [0 5] aralığında , y(0)=0.05 ilk koşulları altında değişken dönüşümünü kullanarak MATLAB ortamında sayısal çözümünü bulunuz ve çizdiriniz.

Çözüm

,

,

.05

durum değişkenleri yardımı ile;

79

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 80: MATLAB Uğur Arifoğlu

elde edilir. Öncelikle yukarıda verilen birinci mertebeden üç adet diferansiyel denklem bir alt program içine yazılmalıdır. Bu amaçla kullanılacak function programının ismi gcoz4.m olsun ve MATLAB editör ortamında yazılsın:

Şekil 15.11

function dx = gcoz4(t,x)dx=[x(2);x(3);-70*x(3)-300*x(2)-1000*x(1)]; % dx=[dx(1);dx(2);dx(3)]

Yukarıda verilen alt programı çağıran ana MATLAB programı aşağıda verilmiş, elde edilen eğriler ise şekil 15.11’de gösterilmiştir:

[t ys]=ode23('gcoz4',0,5,[0.05 0 0]); subplot(311), plot(t,ys(:,1));title ('y nin zamanla degisimi'),grid;subplot(312), plot(t,ys(:,2)); title ('y nin birinci turevinin zamanla degisimi'), grid;subplot(313), plot(t,ys(:,3));title ('y nin ikinci turevinin zamanla değişimi'), xlabel('t'), grid

15.8. Doğrusal diferansiyel denklemlerin doğrusal benzetim fonksiyonları ile çözümü

Control system toolbox’ın yapısı içinde yer alan lsim, impulse, step, initial gibi MATLAB komutları kullanılarak doğrusal diferansiyel denklemlerin çözümü yapılabilmektedir. Bu komutların kullanılabilmesi için verilen diferansiyel denklemin ‘durum denklemi’ yada ‘transfer fonksiyonu’ biçiminde yazılması yeterlidir. ‘Kontrol mühendisliği problemlerinin MATLAB ile çözümü’ başlığı altında yukarıda bahsedilen MATLAB komutları daha teferruatlı olarak anlatılacaktır. Burada yalnızca lsim komutu hakkında bilgi verilecektir. Eğer diferansiyel denklem takımı (alt indisler matris boyutlarını göstermektedir):

(15.20)

(15.21)

şekline getirilebilmiş ise lsim komutunu kullanarak x(t)-durum değişken değerlerini- ve y(t)-çıkış değerlerini- bulmak mümkündür.

[y x] = lsim (a,b,c,d,u,t,x0)

80

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 81: MATLAB Uğur Arifoğlu

Yukarıda verilen MATLAB komutu içinde yer alan ve (15.20) ve (15.21) eşitliklerinde kullanılan değişkenler aşağıda tanıtılmıştır. Yukarıda verilen matris boyutlarına ilişki tanımlar aşağıda verilmiştir:

n : durum değişkenlerinin sayısım : giriş değişkenlerinin sayısık : çıkış değişkenlerinin sayısı

Yukarıda verilen matrislerin tanımları ise aşağıda verilmiştir:

y : çıkış değerleri vektörüx : durum değişkeni vektörüa : durum değişkeni katsayılar matrisib : giriş fonksiyonu katsayılar matrisic : durum değişkeni katsayılar matrisid : giriş fonksiyonu katsayılar matrisiu : giriş fonksiyonu vektörü. Ör: u=cos(t). Bu matrisin satır sayısı ‘t’ zaman vektörü eleman sayısı kadar

olmalıdır. Bu amaçla length komutu da kullanılabilir. Bir adetten fazla giriş işareti alan sistemlerde giriş

sayısı u matrisinin sütun sayısına, length ise u matrisinin satır sayısına eşit olmalıdır. t süresi 0:Δt:

formunda belirlenmelidir. Örneğin u(t) matrisi 1*1 boyutunda bir adet giriş fonksiyonunu içeriyor ise her t anı için b*u(t) işlemi ayrı ayrı gerçekleştirilir.

x0 : durum değişkenlerinin başlangıç değerlerini belirleyen sütün vektörüdür. Boyutu durum değişkenleri sayısına eşittir. Eğer bu vektör elemanları verilmemiş ise MATLAB, x0 vektörünü sıfır olarak alır.

Eğer x0 vektörü belirtilmeksizin; [y x] =lsim (a,b,c,d,u,t)

komutu kullanılır ise lsim komutu y(t) değişimini çizdirir. Eğer ‘x’ durum değişkenlerinin değeri araştırılmıyor ise yukarıdaki komut ; y =lsim(a,b,c,d,u,t) şeklinde de kullanılabilir.

Problem 15.14

diferansiyel denklemini [0 5] aralığında , y(0)=0.05 ilk koşulları altında değişken dönüşümü ve lsim komutunu kullanarak MATLAB ortamında sayısal çözümünü bulunuz ve y(t) eğrisini çiziniz.

Çözüm

Problem 15.10’da, yukarıda verilen diferansiyel denklemin değişken dönüşümü yapılmış ve aşağıda verilen 1 . mertebeden diferansiyel denklemler elde edilmişti:

çıkış

; , (ilk koşullar)

Yukarıda verilen durum denklemleri matris formunda yazılırsa;

81

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 82: MATLAB Uğur Arifoğlu

; ;

bulunur. Yukarıdaki matris eşitliğinden elde edilen a,b,c,d matrisleri aşağıda gösterilmiştir:

; ; ; d=[ ]

Elde edilen durum denklemlerinin MATLAB-editör ortamında lsim komutu ile çözümünü yapan satırlar aşağıda verilmiştir:

a=[0 1 0;0 0 1;-1000 -300 -70];b=[0; 0; 0]; c=[1 0 0];d = 0; x0 = [0.05 0 0];t = 0:0.1:10;u = zeros(length(t),1);y = lsim(a,b,c,d,u,t,x0);plot(t,y(:,1)); % plot(t,y(t) de yazılabilirdititle('lsim komutu ile dif.denklem cozumu'), xlabel('t'), ylabel('y(t)'), grid;

Eğer y’nin her t anı için aldığı değerler merak edilirse, yukarıdaki programın en son satırına y yazmak yeterlidir. Programın çalıştırılması sonunda elde edilen çizim şekil 15.13’de gösterilmiştir.

Şekil 15.13

Problem 15.15

Seri R,L,C devresi volt olan bir alternatif gerilim kaynağı tarafından beslenmektedir.

Devreden akan i(t) akımının değişimini çiziniz. , i(0)=0 alınız.(R=1 ohm, L=1 henry , C=1 farad, f=5*10-3 hz)

Çözüm

Seri R,L,C devresine Kirchhoff gerilim yasası uygulanır ise;

elde edilir. Eşitliği integralden kurtarmak için her iki tarafın t’ye göre türevi alınır ise;

82

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 83: MATLAB Uğur Arifoğlu

elde edilir. Yukarıdaki eşitlik daha basit olarak ifade edilirse;

elde edilir. İkinci mertebeden diferansiyel denklem değişken dönüşümü yardımı ile birinci mertebeden iki diferansiyel denkleme dönüştürülebilir:

;

(çıkış fonksiyonu);

alınırsa;

; ;

elde edilir. Yukarıda verilen diferansiyel denklem, böylece iki adet birinci mertebeden diferansiyel denkleme dönüştürülmüş olmaktadır:

Bulunan denklemler durum denklemleri ve transfer fonksiyonu cinsinden yazılırsa;

% ; giriş fonksiyonu (u(t))

;

elde edilir. Elde edilen bu matris denklemlerinin çözüldüğü MATLAB programı aşağıda verilmiştir. Program sonunda elde edilen akım-zaman değişimi ise şekil 15.14’de gösterilmiştir.

a=[0 1;-1 -1]; b=[0 ; 9.77]; c=[1 0]; d=0; x0= [0 0];% akim degisimi 0:150 saniye arasinda incelenmektedirt = 0:0.1:150;u = cos(2*pi*5*0.001*t);x0 = [0 0];y = lsim(a, b, c, d, u, t, x0);plot(t,y);title('lsim komutu ile RLC devresi akimi cozumu');xlabel('t');ylabel('i(t)');grid;

83

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 84: MATLAB Uğur Arifoğlu

Şekil 15.14Şekil 15.14' de görüldüğü gibi i(t) akımı geçici bir değişimi takiben sürekli sinüzoidal duruma geçmektedir.

15.9. Parçalı fonksiyon durumunda diferansiyel denklemin çözümü

Bazı durumlarda diferansiyel denklem sisteminin içinde yer alan u(t) fonksiyonu parçalı olabilir. Bu durumda u(t) fonksiyonu uygun aralıklarda tanımlanarak diferansiyel denklemin çözümü yapılmalıdır. Aşağıdaki problem incelenmelidir:

Problem 15.16

; , y(0)=0

Yukarıda verilen diferansiyel denklemin çözümünü sağlayan y(t) değişimini çizen MATLAB programını yazınız.

Çözüm

Verilen diferansiyel denklemde değişken dönüşümü yapılırsa;

y(t)= ; ; ;

elde edilir. Bu eşitlikler verilen diferansiyel denklemde yerine konulursa;

iki adet birinci dereceden diferansiyel denklem elde edilir. İki adet diferansiyel denklem kullanılarak sisteme ilişkin durum denklemi;

; cikis(t)=[1 0] +0*u(t) % x1=y(t) çıkış değişkenidir

olarak elde edilir. Yukarıda verilen durum denklemlerini lsim komutu yardımı ile çözen ve y(t)=

değişimini çizdiren MATLAB programı aşağıda verilmiştir:

84

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 85: MATLAB Uğur Arifoğlu

a = [0 1;-2 -3];b = [0; 1];c = [1 0];d = 0; x0 = [0 0]; % ilk kosullart = 0:0.01:10; % daha hassas cizim icin delta t =0.01 yapiliyoru=ones(1,length(t)); % t ile u(t) nin boyutu esit yapiliyor

%parcali u(t) tanitiliyorfor h=1:length(t); if t(h)<0; u(1,h) = 0;[1,length(t)]; end if 0<=t(h) & t(h)<=1; u(1,h)=1; end if t(h)>1, u(1,h)=0; endend %parcali u(t) tanitimi sona erdi [cikis x] = lsim(a,b,c,d,u,t,x0);% x=[x1 x2] oldugu hatirlanmalidirx1=x(:,1); % x1(t)= y(t) oldugu hatirlanmalidir. x2=x(:,2); % x2(t)= y(t)nin türevi oldugu hatirlanmalidir % Aranan çozum x1(t) degisimidir.plot(t,x1); title('lsim komutu ile dif.denklem cozumu');xlabel('t');ylabel('y(t)');grid;

Yukarıda verilen MATLAB programının çalıştırılması durumunda elde edilen y(t)= (t) değişimi şekil 15.15’de

gösterilmiştir.

Şekil 15.15

Problem 15.19

; ; ; y=y(t);

85

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

0 t (sn)

h(t)

0.5

10

1

5

Page 86: MATLAB Uğur Arifoğlu

Şekil 15.18

Yukarıda verilen diferansiyel denklemi sağlayan y(t) değerlerini bulan ve y(t) değişimini çizdiren MATLAB programını yazınız. h(t) değişimi şekil 15.18’de gösterilmiştir. (Not: Çözümde lsim komutu kullanılacaktır)

Çözüm

Verilen diferansiyel denklemde değişken dönüşümü uygulanırsa;

; ; y=y(t);

elde edilir. Yukarıda verilen 1. dereceden diferansiyel denklemler lsim komutunda kullanılabilecek formda yazılırsa;

; x(0)=

elde edilir. Yukarıdaki ifadeleri gözeterek yazılan MATLAB programı aşağıda verilmiştir;

a=[0 1 0; 0 0 1; -1/3 0 2/3];b=[0; 0; 1/3];c=[1 0 0];d=0;x0=[1 -1 0];t=0:0.01:1;% parcali h(t) tanitiliyoruzun=length(t);for s=1:uzun if t(s)>=0 & t(s)<=0.5

h(1,s)= 10; else h(1,s)= 5; end

endy=lsim(a,b,c,d,h,t,x0)plot(t,y);title(‘lsim komutu ile diferansiyel denklem cözümü’);

Yukarıda verilen MATLAB programının çalıştırılması sonunda elde edilen çizim şekil 15.19’da gösterilmiştir.

86

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 87: MATLAB Uğur Arifoğlu

Şekil 15.19 Şekil 15.20

Problem 15.20

diferansiyel denklem sistemini x(0)=0, y(0)=-1, w(0)=2 ilk koşulları altında t [0: 2] aralığında hassasiyetle çözen ve x(t), y(t) ve w(t) değişimini alt alta çizdiren MATLAB programı yazınız. h(t) değişimi şekil 15.20’de verilmiştir.

Çözüm

% ode komutunda bu gösterim tercih edilir

Yukarıda verilen eşitlikler aşağıdaki program satırları ile çözülebilir:

[t w]=ode23('gcozturev',[0 2], [0 -1 2]');

subplot(3,1,1), plot(t,w(:,1)), title('x(t) cizimi')

subplot(3,1,2), plot(t,w(:,2)), title('y(t) cizimi')

subplot(3,1,3), plot(t,w(:,3)), title('z(t) cizimi')

% ode komutu geregi olarak

% w(:,1)) vektoru x=x(1) vektorune esittir

% w(:,2)) vektoru y=x(2) vektorune esittir

87

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

t

h(t)

1

1 2

Page 88: MATLAB Uğur Arifoğlu

% w(:,3)) vektoru z=x(3) vektorune esittir

Aşağıda ise yukarıdaki ana programda kullanılan altprogram satırları verilmiştir:

function turev=gcozturev(t,x) % t vektorunu ode komutu icinden okur

for a=1:length(t);

if t(a)<=1;

h(a)=1; % 0 ile 1 arasında gecerli olan h(t) ifadesi

else

h(a)=-t(a)+2; % 1 ile 2 arasında gecerli h(t) ifadesi

% (y=-x+2 denklemi)

end

turev = [-3*x(1)-2*x(2)+h(a); 3*x(1)-x(3)-2*h(a); -3*x(2)+2];

end

Yukarıda verilen MATLAB program satırlarının uygulanması ile elde edilen x(t),y(t),z(t) değişimleri şekil 15.21’de gösterilmiştir.

Şekil 15.21Problem 15.21

Doğru gerilim kaynağından beslenen seri R,L,C devresinde kaynak gerilimi; E=2 Volt, R=40 ohm, L=0.1 Henry,

Farad olarak verilmektedir. Kapasitenin t=0 anında uçları arasındaki gerilim değeri Volt,

devre akımı i(0)=0 Amper olduğuna göre ve i(t) değişimlerini t=[0;0.03] sn aralığında çizdiriniz.

Çözüm

Seri R,L,C devresine Kirchoff gerilim yasası uygulanırsa;

88

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 89: MATLAB Uğur Arifoğlu

elde edilir. Kapasitenin tanım bağıntısı;

olduğuna göre yukarıda verilen iki adet diferansiyel denklem aşağıdaki formda yazılabilir;

=

x vektörü için;

yazılabilir. Yukarıda verilen diferansiyel denklemler aşağıdaki program satırları ile çözülüp çizdirilebilir:

E=2;R=40;L=0.1;C=10^-7;a = [0 1/C ;-1/L -R/L];b = [0; E/L], c = [1 0]d = 0; x0 = [0 0];t = 0:0.0001:0.01;u = ones(1,length(t))[cikis x] = lsim(a,b,c,d,u,t,x0)figure(1)plot(t,x(:,1)),xlabel('t'), ylabel('Vc(t)'), grid;title('seri R L C devresinde kapasita uclari arasindaki... gerilim degisimi');figure(2)plot(t,x(:,2)),xlabel(‘t’), ylabel(‘i(t)’), gridtitle(‘seri R L C devresinde akim degisimi’), disp([' t vc i']);disp([t',x]) ;

Yukarıda verilen programın çalıştırılması sonunda elde edilen gerilim ve akım değerleri şekil 15.22 ve şekil 15.23’de gösterilmiştir.

Şekil 15.22 Şekil 15.23

Problem 15.22

a) ; [ , olarak ifade edilmiştir]

diferansiyel denklemini kabulü altında 3 adet 1. dereceden diferansiyel denkleme

dönüştürerek ode23 yardımı ile çözünüz ve ve değişimlerini subplot komutu yardımı ile

89

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 90: MATLAB Uğur Arifoğlu

çizdiriniz. Çizimde üstte y(t) olacak altta ise çizdirilecektir. t aralığı [0;2] olacaktır. ,

, y(0)=1 alınız.

b) ;

diferansiyel denklemini kabulü altında lsim komutu yardımı ile çözerek ve

değişimlerini subplot komutu yardımı ile çizdiriniz. h(t) değişimi şekil 15.24'de verilmiştir.Çizimde üstte y(t) olacak altta ise 2. dereceden türevin ( ) t'ye göre türevi çizdirilecektir. t aralığı [0;2]olacaktır.

, , y(0)=1

Şekil 15.24

Çözüm

a) ; ;

ana program% ys;satırları t olan,sutunları ise sırası ile y(t),y'(t),y''(t) % olan bir matristir.[t, ys]=ode23('yazalt12',[0 2],[1 0 0]); % x1(0)=1,x2(0)=0,x3(0)=0 subplot(211), plot(t,ys(:,1));title ('y nin zamanla degisimi'),grid;subplot(212),plot(t,ys(:,3));title ('y nin ikinci turevinin zamanla degisimi'),grid;

alt programfunction dx=yazalt12(t,x)dx=[x(2);x(3);-4*x(1)+3*x(2)-10*cos(3*t)];

1

20

h(t)

1

90

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

t (sn)

Page 91: MATLAB Uğur Arifoğlu

Şekil 15.25

Yukarıda verilen programın çalıştırılması sonunda elde edilen eğriler şekil 15.25'de gösterilmiştir.

b)

a=[0 1 0;0 0 1;-4 3 0]; b=[0;0;- 1]; c=[0 0 0]; d=0; x0=[1 0 0]; % ilk kosullar t=0:0.01:2; % daha hassas cizim icin delta t =0.01 yapiliyoru=ones(1,length(t)); % t ile u(t) nin boyutu esit yapiliyor% asagida parcali u(t) tanitiliyorfor h=1:length(t); if t(h)<0; u(1,h) = 0; end if 0<=t(h) & t(h)<=1; u(1,h)=t(h); end if 1<t(h) & t(h)<=2; u(1,h)=-t(h)+2; endend %parcali u(t) tanitimi sona erdi[cikis x] = lsim(a,b,c,d,u,t,x0);% x=[x1 x2] oldugu hatirlanmalidirx1=x(:,1); % x1(t)= y(t) oldugu hatirlanmalidir.x2=x(:,2); % x2(t)= y(t)nin birinci türevi oldugu hatirlanmalidirx3=x(:,3); % x3(t)= y(t)nin ikinci türevi oldugu hatirlanmalidir % Aranan çozum x1(t) ve x2(t) degisimidir.subplot(211),plot(t,x1); title('y(t) degisimi');xlabel('t');ylabel('y(t)');grid;subplot(212),plot(t,x3); title('y(t)nin ikinci turevinin degisimi');xlabel('t');ylabel('y''(t)');grid;

91

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 92: MATLAB Uğur Arifoğlu

Şekil 15.26

Yukarıda verilen programın çalıştırılması sonunda elde edilen eğriler şekil 15.26'da gösterilmiştir.

Problem 15.23

a) Şekil 15.27'de verilen devrede A anahtarı t=0 anında kapatıldığına göre MATLAB kullanarak tüm akım değişimlerini t'ye bağlı olarak bulunuz

Açıklama: 2 adet KGY, 1 adet KAY eşitliği kullanınız alınız. Elde

edilen eşitliklerden bazıları türev içermiyor ise bu eşitliklerin her iki tarafının bir kez t'ye göre türevini alınız). (L1=2H,L2=3H)

Şekil 15.27

b) akımlarını alt alta subplot komutunu kullanarak t;[0 0.1] saniye arasında çizdiriniz.

Çözüm

a) E= (1) KGY

(2) KGY

(her iki tarafın türevini alarak dif.denklem üretelim) (3) KAY

; ; alınarak (değişken dönüşümü)

52R

A

E=10 volt

)t(i1)t(i2

)t(i3

L1

L2

41R

92

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 93: MATLAB Uğur Arifoğlu

>>S=dsolve('2*Dx+3*Dy+4*y=10','4*y+2*Dy-5*z=0','Dx-Dy-Dz=0','y(0)=0',.. 'x(0)=0','z(0)=0') ('enter') S = x: [1x1 sym] y: [1x1 sym] % sembolik gösterim z: [1x1 sym]>> S.x ('enter') % x=i1(t) adlı yapının içine girmek içinans =16*(-3*exp(1/8*(-33+769^(1/2))*t)*(-165/3076*769^(1/2)-5/4)-exp(1/8*(-33+769^(1/2))*t)*(-165/3076*769^(1/2)-5/4)*769^(1/2)-3*exp(-1/8*(33+769^(1/2))*t)*(165/3076*769^(1/2)-5/4)+exp(-1/8*(33+769^(1/2))*t)*(165/3076*769^(1/2)-5/4)*769^(1/2)-90)/(-33+769^(1/2))/(33+769^(1/2))>> S.y ('enter') % y=i2(t) adlı yapının içine girmek için

ans =exp(1/8*(-33+769^(1/2))*t)*(-165/3076*769^(1/2)-5/4)+exp(- 1/8*(33+769^(1/2))*t)*(165/3076*769^(1/2)-5/4)+5/2 >> S.z ('enter') % z=i3(t) adlı yapının içine girmek içinans =-17/20*exp(1/8*(-33+769^(1/2))*t)*(-165/3076*769^(1/2)-5/4)-17/20*exp(-1/8*(33+769^(1/2))*t)*(165/3076*769^(1/2)-5/4)+2+1/20*exp(1/8*(-33+769^(1/2))*t)*(-165/3076*769^(1/2)-5/4)*769^(1/2)-1/20*exp(-1/8*(33+769^(1/2))*t)*(165/3076*769^(1/2)-5/4)*769^(1/2)

b) subplot(311),ezplot(S.x,[0,0.1]),grid,title('i1(t)') subplot(312),ezplot(S.y,[0,0.1]),grid,title('i2(t)') subplot(313),ezplot(S.z,[0,0.1]),grid,title('i3(t)')

Şekil 15.28

Yukarıda verilen programın çalıştırılması sonunda elde edilen eğriler şekil 15.28'de gösterilmiştir.

16.1. Harf karakterlerinin dizilişi

93

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 94: MATLAB Uğur Arifoğlu

MATLAB sayısal temeller üzerine oturan bir program olmasına rağmen (özellikle çizimler üzerine yazılan text türü yazılar vb. amaçlar için) ihtiyaç duyulduğu zaman kullanılmak üzere harf türü karakter dizilerine dönük bir alt yapıya da sahiptir.

MATLAB ortamında her harf karakteri bir sayıya karşı gelir. Aşağıda verilen harflerden oluşan bir dizinin MATLAB ortamında işgal ettiği boyutlar gösterilmiştir:

>> text = ‘Bu bir karakter dizisidir’ (‘enter’)text = Bu bir karakter dizisidir>> size(text)ans = 1 26>> whos (‘enter’) Name Size Bytes Class ans 1x2 16 double array text 1x25 50 char arrayGrand total is 27 elements using 66 bytes

16.2. ASCII kodları

ASCII kodu kullanıldığında, her karakter için disk alanında iki byte (bayt) hacime ihtiyaç duyulur. ‘A’dan ‘Z’ye kadar olan büyük harfler için kullanılan ASCII kodları 65’den 90’a kadar yer alır. Eğer ‘a’dan ‘z’ye küçük harfler kullanılacak ise bu diziliş 97’den 122’ye kadar devam eder. Örneğin 63 sayısı ‘D’ye, 75 sayısı ‘K’ya karşı gelirken, 101 sayısı ‘e’ye, 118 ise ‘v’ye karşı gelir. abs komutu (burada) karakter dizisine karşı gelen ASCII komutlarını gösterir. Aşağıdaki örnek incelenmelidir:>> text = ‘Bu bir karakter dizisidir’ (‘enter’)text = Bu bir karakter dizisidir>> d = abs(text) (‘enter’)Columns 1 through 13 66 117 32 98 105 114 32 107 97 114 97 107 116Columns 14 through 25 101 114 32 100 105 122 105 115 105 100 105 114

Yukarıdaki örnek incelendiğinde ‘boşluk’ karakterinin 32 sayısı ile simgelendiği görülmektedir.

Eğer ASCII kodlarından tekrar harflere dönüş istenir ise char komutu kullanılmalıdır:

>> char(d) (‘enter’)ans =Bu bir karakter dizisidir

Eğer a’dan z’ye tüm harf karakterleri ekranda görüntülenmek istenir ise aşağıdaki program incelenmelidir:

>> harfler = abs(‘a’):abs(‘z’); (‘enter’)>> disp (char(harfler)) (‘enter’)abcdefghijklmnopqrstuvwxyz

Karakter dizisi içinden istenilen karakterleri seçmek mümkündür:

>> text = ‘Bu bir karakter dizisidir’; (‘enter’)>> u = text(8:15) (‘enter’)

94

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 95: MATLAB Uğur Arifoğlu

u =karakter

Karakter dizileri matris formatında da yazılabilir. Burada dikkat edilmesi gereken nokta her bir satır içindeki sütun sayılarının aynı olmasıdır:

>> w = [‘Bir satirdan daha uzun karakter’ ‘dizilerinde her bir satirdaki ’ ‘kolon sayisi –matrislerde ’ ‘oldugu gibi- ayni olmalidir ’] (‘enter’)w =Bir satirdan daha uzun karakterdizilerinde her bir satirdakikolon sayisi -matrislerdeoldugu gibi- ayni olmalidir>> size(w) (‘enter’)ans =

4 31

Yukarıda verilen örnekte 4 adet satır ve 21 adet sütun bulunmaktadır. Her bir satır yazılırken eşit sayıda kolon içermesine dikkat edilmiştir. Harfler ve aralarındaki boşluğun toplam sayısı 31 olmadığı durumlarda (2.,3., ve 4. satırlarda olduğu gibi) satır sonuna uygun sayıda boşluk ilave edilmiştir. Aksi halde hata komutu ile karşılaşılır.

Aşağıdaki yazılım harf ve rakam karakterlerinin birlikte kullanımına örnek olması için verilmiştir:

>> bugun = ’ Ekim’;>> bugun = [bugun,’ 12’]bugun =Ekim 12

16.3. Harf - rakam dönüşümleri

Aşağıda verilen MATLAB komutları harf-rakam dönüşümü amacı ile kullanılırlar:

char(x) : x adlı bir rakamı (yada rakamlar içeren bir diziyi) ASCII kodlar yardımı ile harf (yada harflere) çevirir. x karekteri 0 ile 65535 arasında bir değer alabilir. (Yukarıda bir örneği verilmişti.)

int2str(x) : x matrisinin elemanlarını yuvarlar (en yakın tam sayıya atar):>> x= [0.1 2;2.9 6.1];>> int2str(x)ans = 0 2 3 6

num2str(x) : x sayı değeri ile harflerin birlikte kullanımını mümkün kılan bir komuttur. Bu komut, çizimlerde, title, xlabel, ylabel, text gibi komutların içinde yaygın bir kullanım alanı bulur. Aşağıdaki örnek incelenmelidir:>>tucus = 2.2774; (‘enter’)>>xmesaf = 144.6364; (‘enter’)>>disp([’ucus suresi:’,num2str(tucus),’s’]) (‘enter’)ucus suresi: 2.2774 s>>disp([’ucus mesafesi:’,num2str(xmesaf),’ft’]) (‘enter’)ucus mesafesi : 144.6364 ft

Yukarıda disp komutu içinde yer alan isim (harf) ile rakamı birbirlerine özdeşleştirme işlemi disp komutunun başka türlü kullanışları ile gerçekleştirilemez.

95

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 96: MATLAB Uğur Arifoğlu

str2num(s) : s dizilişi içinde yer alan harf+rakam dizisini sayısal bir büyüklüğe dönüştürür. Bu diziliş (s) içinde sayı, ondalık belirten noktalama işareti, + veya – işaretleri, e üstel sayı belirteci, kompleks sayı belirten ‘i’ harfi de olabilir:>> str2num('-2e2+300i') (‘enter’)ans = -2.0000e+002 +3.0000e+002i

16.4. Harf diziliş komutları

blanks(n) : Bu komutun soluna yazılan ifade ile sağına yazılan ifade arasına n adet boşluk bırakılır;>>n =[‘gerilim degeri’,blanks(3),‘3 Volt’]n = gerilim degeri 3 Volt

deblank(s) : Boşlukları s dizisinden uzaklaştırır.

eval(s) : s dizisindeki ifadeyi MATLAB komutu olarak uygular:>> s = '4*atan(1)';>> eval(s)ans = 3.1416% asagidaki program 1’den 3’e kadar olan % sayıları M1,M2,M3 degiskenlerine atar >>for n=1:3; (‘enter’)>>eval([‘M’,int2str(n),’= n’]); (‘enter’)>>end; (‘enter’)M1 = 1M2 = 2M3 = 3

findstr(s1,s2) : s1 harf dizisinin içinden s2 harf dizisini bulur:>>s1 = ’iki kisi iki ayri eve girdi’; (‘enter’)>>s2 = ‘iki’; (‘enter’)>>findstr(s1,s2) (‘enter’) ans = 1 10

Yukarıdaki program sonunda iki ifadesinin s1 dizisi içinde 1. ve 10. sütunlarda olduğu anlaşılmaktadır.

ischar(s) : s dizisi harf karakterlerinden oluşmuş ise bu komutun sonunda 1, aksi halde 0 elde edilir.

isletter(s) : s dizisinin tüm elemanlarını tek tek tarar ve eleman harf ise 1, rakam ise 0 değeri oluşturur.

lower(s) : s dizisinin içinde büyük harf var ise bu harfi küçük harfe dönüştürür.

strcmp(s1,s2) : s1 ve s2 dizilerini karşılaştırır, s1 ile s2 ile aynı ise 1, aksi halde 0 değerini üretir.

96

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 97: MATLAB Uğur Arifoğlu

strncmp(s1,s2,n) : s1 dizisindeki ilk n adet karakter s2 dizisi ile aynı ise 1, aksi halde 0 değerini üretir

upper(s) : s dizisinin içinde küçük harf var ise harfi büyük harfe dönüştürür.

16.5. Zaman hesaplamaları

MATLAB ortamında içinde bulunulan zaman üç farklı formatta tanımlanmıştır;

clock : Altı elemanlı bir vektör içerir. İlk eleman yıl, ikinci eleman ay, üçüncü eleman gün,dördüncü eleman saat, beşinci eleman dakika,altıncı eleman ise saniye gösterir.>>clock (‘enter’)ans = 2003 2 25 15 12 46.9

Yukarıdaki sonuca göre içinde bulunulan zaman; 2003 yılının 2.ayının 25. gününde saat 15’i 12 dakika 46.9 saniye geçmektedir.

date : Üç adet bilgiden oluşur. İlk bilgi gün, ikinci bilgi ay, üçüncü bilgi ise yıl olmaktadır. >> date (‘enter’)ans = 25-Feb-2003

now : Seri numaralar şeklinde içinde bulunulan gün ve saat bilgilerini verir:>> now (‘enter’)ans = 7.316377469854166e+005

datestr(a,’dateform’): a ile bildirilen zaman bilgisi, dateform türlerinden bir tanesi ile gösterilir. Aşağıda dateform parametresinin çeşitli türleri gösterilmiştir;>> datestr(now,0) (‘enter’)ans = 25-Feb-2003 17:57:18>> datestr(now,1) (‘enter’)ans = 25-Feb-2003>> datestr(now,2) (‘enter’)ans = 02/25/03

dateform Gün formatı Örnek 0 ’dd-mmm-yyyy HH:MM:SS’ 01-Mar-1995 15:45:17 2 ’mm/dd/yy’ 03/01/95 3 ’mmm’ Mar 4 ’m’ M 5 ’mm’ 3 6 ’mm/dd’ 03/01 7 ’dd’ 1 8 ’ddd’ Wed 9 ’d’ W 10 ’yyyy’ 1995 11 ’yy’ 95 12 ’mmmyy’ Mar95 13 ’HH:MM:SS’ 15:45:17

97

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 98: MATLAB Uğur Arifoğlu

14 ’HH:MM:SS PM’ 3:45:17 PM 15 ’HH:MM’ 15:45 16 ’HH:MM PM’ 3:45 PM 17 ’QQ-YY’ Q1-96 18 ’QQ’ Q1

datenum(‘yıl’,ay’,’gün’): İki parantez içinde verilen tarih bilgilerini ‘seri numaralara’ dönüştürür.>>datenum(2003,2,25,15,12,46.9) (‘enter’) ans = 7.316376338761575e+005

[d s]=weekday(‘a’) : a ile verilen tarihin haftanın hangi günü olduğunu belirtir. Sunday (Pazar günü)=1 ile gösterilir. Diğer günlerin numarası ise bu sırayı takip eder, örneğin, Saturday (Cumartesi)=7 olur:>>[d s] = weekday(‘9/09/99’) (‘enter’)d = 5s = Thu

calendar(‘ay/gün/yıl’) : a ile belirtilen tarihi içeren ay’a ilişkin takvimi gösterir:>> calendar('05/02/1992') May 1992 S M Tu W Th F S 0 0 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 0 0 0 0 0

16.6. Zaman sayacı

MATLAB ortamında bir işlemin başlangıç ve bitiş süreleri arasındaki zaman dilimi tic ve toc komutları ile tesbit edilebilir. tic komutu zaman sayacını çalıştırır, toc komutu ise sayacı durdurur.MATLAB editör ortamında yazılan programın başlangıç ve bitiş süreleri arasındaki fark 0.72 saniye olduğu görülmektedir.

ticfor t=1:5000 y(t)=sin(2*pi*t/10);endtocelapsed_time = 0.7200Eğer cputime komutu ekrana yazılırsa elde edilen sayı (saniye olarak), MATLAB programının çalışmaya başladığı zaman ile o ana kadar geçen süre arasındaki farkı belirler.

16.7. Sayısal taban dönüşümleri

Aşağıda verilen komutlar 10’luk tabandaki sayıyı diğer sayısal tabanlara dönüştürmekte kullanılır;

dec2bin(d) : 10’ tabanında verilen d sayısını 2’lik tabana çevirir. d sayısı pozitif ve 252

sayısından küçük olmalıdır:>>a = dec2bin(18) (‘enter’)a = 10010

10 sayısının iki'lik düzendeki 4 bit karşılığı aşağıdaki komut ile bulunabilir:>>dec2bin(10,4) (‘enter’)

98

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 99: MATLAB Uğur Arifoğlu

ans= 1010

3 sayısının iki'lik düzendeki 4 bit karşılığı aşağıdaki komut ile bulunabilir:>>dec2bin(3,4) (‘enter’)ans= 0011

bin2dec(d) : 2’lik tabanda verilen d sayısını 10’luk tabana çevirir.>>a = dec2bin(18); (‘enter’)>>bin2dec(a) (‘enter’)ans = 18

dec2hex(d) : 10’luk tabanda verilen d sayısını hex (16) tabanına dönüştürür. d sayısı pozitif ve 252 sayısından küçük olmalıdır:>> b = dec2hex(30) (‘enter’) b = 1E

hex2dec(h) : hex’ tabanında verilen d sayısını 10’luk tabana dönüştürür. d sayısı pozitif ve 252 sayısından küçük olmalıdır:>> b = dec2hex(30) (‘enter’)b= 1E>> hex2dec(b) (‘enter’)ans= 30

dec2base(d,b) : 10’luk tabanda verilen d sayısını b tabanında diğer bir sayıya dönüştürür. d sayısı pozitif ve 252 sayısından küçük, b tabanı ise 2 ile 32 sayıları arasında olmalıdır.>>c = dec2base(30,4) (‘enter’) c = 132

base2dec(d,b) : b tabanında verilen d sayısını ‘10’ tabanında diğer bir sayıya dönüştürür. d sayısı pozitif ve 252 sayısından küçük, b tabanı ise 2 ile 32 sayıları arasında olmalıdır.>> c =dec2base(30,4); (‘enter’)>> base2dec(c,4) (‘enter’)ans = 30

16.8. Bit işlemleri

MATLAB ortamında iki sayının lojik (sayısal) anlamda karşılaştırılması işleminde bitand, bitor, bitxor, bitcmp, bitset, bitget ,bitshift komutlarından yararlanılır. Aşağıda bu komutların tanımları verilmiştir; a tamsayısı 0 ile ‘bitmax=253 -1’ arasında değişir.

c= bitand(a,b) : a ve b sayılarını ikili tabana çevirerek ‘and’-ve- lojik komutu ile karşılaştırılır. Elde edilen sayı 10’luk tabanda c’ye atanır.>> a=4; (‘enter’)>> b=8; (‘enter’)>> c = bitand(a,b) (‘enter’)ans =

99

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 100: MATLAB Uğur Arifoğlu

0

Yukarıda verilen işlemde ile ‘and’ komutu ile

karşılaştırılırsa 0100&1000 = elde edilir. Programda elde edilen 0 değeri de bu sonuçla uyumludur.

c= bitor(a,b) : a ve b sayılarını ikili tabana çevirerek ‘or’-veya- lojik komutu ile karşılaştırılır. Elde edilen sayı on’luk tabanda c’ye atanır.>> a=4; (‘enter’)>> b=8; (‘enter’)>> c= bitor(a,b) (‘enter’) ans = 12

Yukarıda verilen işlemde ile ‘or’ komutu ile

karşılaştırılırsa 0100 | 1000 = elde edilir. Programda elde edilen ’12’ değeri de bu sonuçla uyumludur.

c= bitxor(a,b) : a ve b sayılarını ikili tabana çevirerek ‘xor’-özelveya- lojik komutu ile karşılaştırılır. Elde edilen sayı 10’luk tabanda c’ye atanır.>> a=4; (‘enter’)>> b=6; (‘enter’)>> bitxor(a,b) (‘enter’)ans = 2

Yukarıda verilen işlemde ile ‘xor’ komutu ile

karşılaştırılırsa 100 xor 110 = elde edilir. Programda elde edilen 2 değeri de bu sonuçla uyumludur.

bitcmp(a,N) : a sayısının 2’lik tabanda ilk N adet rakamının lojik olumsuzunu hesaplayarak elde edilen sayıyı on’luk tabanda olan c sayısına atar.>>c = bitcmp(4,3) (‘enter’)c = 3

bitset(a,b,v) : a sayısının 2’lik tabandaki gösterimindeki b. bit’i v yapar. v sayısı 0 ya da 1 olabilir:>>a=6; (‘enter’)>>b=4; (‘enter’)>>c=bitset(6,4,1) (‘enter’) c= 14 Yukarıdaki işlemde a=6 sayısının ikili tabanda karşılığı 0110 olur. Bu 4 adet ‘bit’ içinden b.=4. bit olan ‘0’ değeri v=1 yapılır. Böylece 0110 olan değer 1110 olur. Bu sayı ise 10’luk tabanda 14 sayısına eşittir. >> bitset(6,4,0) (‘enter’) ans = 6

bitget(a,b) : a sayısının 2’lik tabandaki gösterimindeki b bit değerini gösterir.

bitshift(a,N) : a sayısını 2^N ile çarpar (N negatif olabilir).

Yukarıda verilen komutların iç içe kullanıldığı bir örnek aşağıda gösterilmiştir:

100

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 101: MATLAB Uğur Arifoğlu

>>dec2bin(bitor(10,3),4) (‘enter’) ans= 1011

17.2. Bir sayının sembolik şekle dönüştürülmesi

Command Window ortamında tanımlı bir sayı, 4 farklı formatta sembolik ifadeye dönüştürülebilir:

Sembolik kayan noktalı (floating point) gösterim:>> a=3.2; (‘enter’)>>sym (a,'f') (‘enter’)ans = '1.999999999999a'*2^(1)

Sembolik kesirli gösterim:>>sym (a,'f') (‘enter’)ans = 16/5

Sembolik eps+kesirli gösterim:>>sym (a,'e') (‘enter’)ans = 16/5+4*eps/5

Sembolik anlamlı sayı gösterimi:>>sym (a,'d') (‘enter’)ans = 3.2000000000000001776356839400250

Gösterilecek sayının içerdiği rakam sayısı (default olarak) 32 dir. Kullanıcı bu sayıyı isterse kendisi aşağıdaki örnekte gösterildiği gibi belirleyebilir:>>digits(5)>>sym (a,'d') (‘enter’)ans = 3.2000

17.9. Sembolik olarak Jacobian matrisin elde edilmesi

olarak verilen 3 adet lineer olmayan denklem sistemine ilişkin Jacobian matrisi sembolik araç kutusu yardımı ile hesaplanmak istenirse (değişken olarak x,y ve z alınacaktır) aşağıdaki komut satırlar kullanılabilir.

>>syms x y z (‘enter’) >>f=x*cos(y)*sin(2*z)+x^2; (‘enter’) >>g=x^3*sin(2*y)+z^3; (‘enter’) >>h=x^3-y^4+x*z; (‘enter’) >>J=jacobian([f;g;h],[x y z]) (‘enter’) J =

101

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 102: MATLAB Uğur Arifoğlu

[ cos(y)*sin(2*z)+2*x, -x*sin(y)*sin(2*z), 2*x*cos(y)*cos(2*z)][ 3*x^2*sin(2*y), 2*x^3*cos(2*y), 3*z^2][ 3*x^2+z, -4*y^3, x] Yukarıdaki matrisin determinantı hesaplanmak istenirse;

>> det(J); % sonuç çok uzun olduğu için buraya yazdırılmamıştır

yazmak yeterlidir.

17.10. Sembolik ortamda limit işlemleri

MATLAB ortamında işlemi;

>>limit(f) (‘enter’)

komutu kullanılarak; işlemi;

>>limit(f,x,a) % veya limit(f,a) (‘enter’)

komutu kullanılarak; işlemi (soldan limit);

>>limit(f,x,a,'left') (‘enter’)

komutu kullanılarak; işlemi (sağdan limit);

>>limit(f,x,a,'right') (‘enter’)

komutu kullanılarak hesaplanır. Bilindiği gibi f(x) fonksiyonunun türevi ;

eşitliği ile hesaplanır. Örnek olarak f(x)=cos(x) alınırsa, =sin(x) olur. Bu sonuç sembolik araç kutusunda limit komutu ile kontrol edilebilir:

>> syms h n x (‘enter’) >> limit((cos(x+h)-cos(x))/h,h,0) (‘enter’)

ans =

-sin(x)

Görüldüğü gibi aynı sonuç elde edilmiştir. Diğer bir örnek olarak, f(x)= fonksiyonunun için

limiti aranırsa;

>> syms n x (‘enter’) >> limit((1+x/n)^n,n,inf) (‘enter’) ans = exp(x)

elde edilir. Örnek olarak, işlemi yapılsın; (soldan limit işlemi)

>> syms x (‘enter’) >> limit(x/abs(x),x,0,'left') % soldan limit alınıyor (‘enter’) ans =

102

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 103: MATLAB Uğur Arifoğlu

-1

Eğer, işlemi yapılırsa; (sağdan limit işlemi)

>> limit(x/abs(x),x,0,'right') % sağdan limit alınıyor (‘enter’) ans = 1

elde edilir. Yukarıda verilen fonksiyonun aynı noktada sağdan ve soldan limitleri farklı olduğundan iki taraflı limitin de olmaması gerekir:

>> limit(x/abs(x),x,0) (‘enter’) ans = NaN

Görüldüğü gibi limit değeri (Not a Number) NaN olmakta, diğer bir ifade ile limit tanımsızdır.

Yukarıda verilen örneklerde f fonksiyonu hep limit komutu içinde tanıtıldı. İstenirse daha önce de tanıtılabilir. Aşağdaki örnek incelenmelidir:

>> syms x (‘enter’) >> f= x/abs(x); (‘enter’) >> limit(f,x,0,'left') (‘enter’) ans = -1

17.15. Sembolik işlemlerin Laplace dönüşümüne uygulanması

s=

olmak üzere,

(17.1)

ifadesi f(t) fonksiyonunun Laplace dönüşümü olarak adlandırılır ve

F(s)= (17.2)

şeklinde gösterilir. F(s) Laplace fonksiyonunun ters Laplace fonksiyonu ise;

(17.3)

ifadesi ile bulunur. Yukarıda j= , sayı, w için ise aralığı tanımlıdır. (17.2) ve (17.3) eşitliklerinin bir başka gösterimleri ise aşağıda verilmiştir:

F(s)=£[f(t)] - Laplace dönüşümü (17.4)

f(t)= £ - Ters Laplace dönüşümü (17.5)

Yukarıda verilen Laplace dönüşümü için MATLAB ortamında laplace komutu, ters Laplace dönüşümü için ise ilaplace komutu kullanılır. Aşağıda laplace komutunun çeşitli kullanımları gösterilmiştir:

103

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 104: MATLAB Uğur Arifoğlu

laplace : Sembolik işlemlerde Laplace dönüşümünde kullanılır. Aşağıda bu komutun çeşitli kullanılışları gösterilmiştir:

F=laplace(f) : Sembolik f(t) fonksiyonunun Laplace transformunu bulur. f fonksiyonu (default olarak) t'ye bağlıdır. Dönüşüm sonunda (default olarak) s ile değişen bir fonksiyon elde edilir. Diğer bir ifade ile f=f(t) fonksiyonuna laplace komutu kullanılarak dönüşüm uygulandığında, F=F(s) elde edilir. F fonksiyonu f fonksiyonunun Laplace dönüşümüdür:

£{f(t)} =

(17.5a)

F=laplace(f,v) : (17.5a) eşitliğinde (default değer olan) s yerine t koyarak f fonksiyonunun Laplace dönüşümünü bulur:

£{f(x)} =

F=laplace(f,w,z): (17.5a) eşitliğinde (default değer olan) s yerine z ve (default değer olan) t yerine w koyarak f fonksiyonunun Laplace dönüşümünü bulur:

£{f(u)}

Aşağıdaki problemde bazı f(t) fonksiyonlarının Laplace dönüşümleri gösterilmiştir:

Problem 17.3

a) f(t)= olmak üzere £{f(t)} ifadesini bulunuz. ( =?)

b) g(v)= olmak üzere £{g(v)} ifadesini bulunuz. ( =?)

c) f(t)= olmak üzere £{f(t)} ifadesini bulunuz. ( =?)

eşitliklerinin Laplace transformlarını bulunuz.

Çözüm

a)>> syms t (‘enter’) >> f=t^4; (‘enter’) >> laplace(t^4) (‘enter’) ans = 24/s^5

b)>> syms v; (‘enter’) >> g=1/sqrt(v); (‘enter’) >> laplace(g) (‘enter’) ans = (pi/s)^(1/2)

c) >> syms a t (‘enter’) >> f=exp(-a*t); (‘enter’) >> laplace(g) (‘enter’)

104

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 105: MATLAB Uğur Arifoğlu

ans = 1/(s+a)

f(t) fonksiyonunun türevinin Laplace transformu aşağıda gösterilmiştir:;

F(s)=£ =sF(s)-f(0)

F(s)=£ = F(s)-sf(0)-

ilaplace : Sembolik işlemlerde ters Laplace dönüşümünde kullanılır. Aşağıda bu komutun çeşitli kullanılışları gösterilmiştir:

f=ilaplace(F) : Sembolik F(s) fonksiyonunun ters Laplace transformunu (f(t)) bulur. F fonksiyonu (default olarak) s'e bağlıdır. Dönüşüm sonunda (default olarak) t ile değişen bir f fonksiyonu elde edilir. Diğer bir ifade ile F=F(s) fonksiyonuna ilaplace komutu kullanılarak dönüşüm uygulandığında f=f(f) elde edilir. f fonksiyonu F fonksiyonunun ters Laplace dönüşümüdür:

£ {F(s)}=

(17.5b)

f=ilaplace(F,y) : (17.5b) eşitliğinde (default değer olan) t yerine y koyarak F fonksiyonunun ters Laplace dönüşümünü bulur:

£ {F(y)}=

(17.5c)f=ilaplace(F,y,x): (17.5b) eşitliğinde (default değer olan) t yerine x ve (default değer olan) s

yerine y koyarak F fonksiyonunun ters Laplace dönüşümünü bulur:

£ {F(y)}=

(17.5d)

Aşağıdaki problemde bazı F(s) fonksiyonlarının ters Laplace dönüşümleri gösterilmiştir:

Problem 17.4

a) F(s)= olmak üzere £ {F(s)} ifadesini bulunuz. (£ {F(s)}= =?)

b) F(v)= olmak üzere £ {F(v))} ifadesini bulunuz. (£ {F(v)}= =?)

c) F(u)= olmak üzere £ {F(u)} ifadesini bulunuz. (£ {F(u)}= =?)

eşitliklerinin ters Laplace transformlarını bulunuz.

105

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 106: MATLAB Uğur Arifoğlu

Çözüm

a)>> syms s (‘enter’) >> f=1/s^2; (‘enter’) >> ilaplace(f) (‘enter’) ans = t

b)>> syms v a; (‘enter’) >> f=1/(v-a)^2; (‘enter’) >> ilaplace(f) (‘enter’) ans = x*exp(a*x)

c) >> syms x u (‘enter’) >> syms a real (‘enter’) >> f=1/(u^2-a^2); (‘enter’) >> simplify(ilaplace(f,x)) (‘enter’) ans = sinh(x*abs(a))/abs(a)

Problem 17.5

diferansiyel denklemini, y(0)=1 ve ilk koşulları altında Laplace transformunu kullanarak bulunuz.

Çözüm

Öncelikle verilen eşitliğin sol tarafı Laplace transformu yardımı ile F(s) fonksiyonuna dönüştürülsün:

£[3t-2cost]

Yukarıda görülen £[3t-2cost] ifadesinin Laplace transformunun elde edilişi aşağıda gösterilmiştir:

>> syms s t (‘enter’)>> laplace(3*t-2*cos(t)) (‘enter’)ans = 3/s^2-2*s/(s^2+1)

Elde edilen bu sonuç yukarıdaki eşitlikte yerine konulursa;

elde edilir. Y(s) fonksiyonuna ters Laplace dönüşümü uygulanır ise;

106

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 107: MATLAB Uğur Arifoğlu

>> syms s (‘enter’)>> ilaplace((1/(2*s^2-3*s+4))*(3/s^2-2*s/(s^2+1)-4+2*s)) (‘enter’)

ans =

3/4*t+9/16+155/208*exp(3/4*t)*cos(1/4*23^(1/2)*t)-

1889/4784*exp(3/4*t)*23^(1/2)*sin(1/4*23^(1/2)*t)-

4/13*cos(t)+6/13*sin(t)

elde edilir. Yukarıdaki sonuç aşağıdaki şekilde de yazılabilir:

MATLAB ortamında Laplace dönüşümlerinin uygulandığı alanlardan bir tanesi de elektrik devre çözümleridir. Örnek olarak verilen bir elektrik devresine ilişkin ‘s-domeni’ eşitlikleri aşağıda gösterildiği gibi olsun:

Yukarıda verilen denklemde ve akımlarının t-domenindeki karşılıkları bulunmak istenirse;

>>syms s (‘enter’)>>A= [-s 2*s; 2*s 1-s] (‘enter’)>>B= [1/s ;1] (‘enter’)>>C= inv(A)*B (‘enter’)>> ilaplace(C) (‘enter’)ans =[ -t+4-10/3*exp(-1/3*t)][ -5/3*exp(-1/3*t)+2]

elde edilir. Bu sonuçlara göre aşağıdaki akım eşitlikleri yazılabilir:

;

17.16. Sembolik işlemlerin Z dönüşümüne uygulanması

Z dönüşümü, ayrık sistemlerdeki fark eşitliklerinde, Laplace dönüşümüne benzer bir rol oynar. fonksiyonunun Z dönüşümü;

(17.6)

olarak ifade edilir. Yukarıdaki ifadenin bir diğer gösterimi;

(17.7)

olarak verilir. Ters Z dönüşümü ise F(z) eşitliğinden yola çıkarak fonksiyonunun bulunması

107

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 108: MATLAB Uğur Arifoğlu

(17.8)

işlemidir. MATLAB ortamında Z dönüşümünde ztrans komutu, ters Z dönüşümünde ise iztrans komutu kullanılır.

Laplace dönüşümünde olduğu gibi Z dönüşümünün de çok önemli özellikleri vardır. Bunların içinde en önemli iki eşitlik aşağıda verilmiştir:

(soldan kaydırma eşitliği) (17.9)

(sağdan kaydırma eşitliği) (17.10)

Z dönüşümü aşağıda verilen örnekte olduğu gibi fark eşitliklerinin çözümünde kullanılır:

Aşağıda ztrans komutunun çeşitli kullanılış biçimleri gösterilmiştir:

ztrans : Sembolik işlemlerde Z dönüşümünde kullanılır. Aşağıda bu komutun çeşitli kullanılışları gösterilmiştir:

F=ztrans(f) : Sembolik f(t) fonksiyonunun Z transformunu bulur. f fonksiyonu (default olarak) n'e bağlıdır. Dönüşüm sonunda (default olarak) z ile değişen bir fonksiyon elde edilir. Diğer bir ifade ile f=f(n) fonksiyonuna laplace komutu kullanılarak dönüşüm uygulandığında, F=F(z) elde edilir. F fonksiyonu f fonksiyonunun Z dönüşümüdür:

{f(n)} = (17.10a)

F=ztrans(f,w) : (17.10a) eşitliğinde (default değer olan) z yerine w koyarak f fonksiyonunun Laplace dönüşümünü bulur:

{f(n)} =

F=ztrans(f,k,w): (17.10a) eşitliğinde (default değer olan) n yerine k ve (default değer olan) z yerine w koyarak f fonksiyonunun Laplace dönüşümünü bulur:

{f(n)} =

Aşağıdaki problemde bazı f(n) fonksiyonlarının Z dönüşümleri gösterilmiştir:

Problem 17.6

a) f(n)= olmak üzere Z{f(n)} ifadesini bulunuz. ( {f(n)} = =?)

b) f(u)= olmak üzere Z{f(u)} ifadesini bulunuz. ( {f(u)} = =?)

c) f(n)=sin(a*n) olmak üzere Z{f(n)} ifadesini bulunuz. ( {f(n)} = =?)

Çözüm

a) >> syms n (‘enter’)

108

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 109: MATLAB Uğur Arifoğlu

>> f=n^4; (‘enter’) >> y=ztrans(f) (‘enter’) y= z*(z^3+11*z^2+11*z+1)/(z-1)^5

b) >> syms a u (‘enter’) >> f=a^u; (‘enter’) >> y=ztrans(f) (‘enter’) >>simplify(y) (‘enter’) y= -z/(-z+a)

c) >> syms a n (‘enter’) >> f=sin(a*n); (‘enter’) >> y=ztrans(f) (‘enter’) y= z*sin(a)/(z^2-2*z*cos(a)+1)

iztrans : Sembolik işlemlerde ters Z dönüşümünde kullanılır. Aşağıda bu komutun çeşitli kullanılışları gösterilmiştir:

f=iztrans(F) : Sembolik F(z) fonksiyonunun ters Z transformunu bulur. F fonksiyonu (default olarak) z'ye bağlıdır. Dönüşüm sonunda (default olarak) n ile değişen bir fonksiyon elde edilir. Diğer bir ifade ile F=F(z) fonksiyonuna iztrans komutu kullanılarak dönüşüm uygulandığında, f=f(n) elde edilir. f fonksiyonu F fonksiyonunun ters Z dönüşümüdür:

)n(f {F(z)} = ; n=1,2,..

(17.10b)

f=iztrans(F,k) : (17.10b) eşitliğinde (default değer olan) n yerine k koyarak f fonksiyonunun ters Z dönüşümünü bulur:

f=iztrans(F,k,w): (17.10b) eşitliğinde (default değer olan) n yerine k ve (default değer olan) z yerine w koyarak F fonksiyonunun ters Z dönüşümünü bulur:

Aşağıdaki problemde bazı F(z) fonksiyonlarının ters Z dönüşümleri gösterilmiştir:

Problem 17. 7

a) olmak üzere )n(f {F(z)} ifadesini bulunuz. ( {F(z)} =

=?)

b) olmak üzere = {F(u)} ifadesini bulunuz.

c) olmak üzere )n(f {F(z)} ifadesini bulunuz.

Çözüm

a) >> syms z (‘enter’) >> f=2*z/(z-2)^2; (‘enter’)

109

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 110: MATLAB Uğur Arifoğlu

>> y=iztrans(f) (‘enter’) y= 2^n*n

b) >> syms n (‘enter’) >> f=n*(n+1)/(n^2+2*n+1); (‘enter’) >> y=iztrans(f) (‘enter’) y= (-1)^k

c) >> syms z a (‘enter’) >> f=z/(z-a) (‘enter’) >> y=iztrans(f) (‘enter’) y= a^n

Problem 17. 8

;

fark eşitliğini sağlayan ifadesini, ; ilk koşulları altında bulunuz.

Çözüm

Verilen eşitliğin her iki tarafına Z dönüşümü uygulanır ise;

elde edilir. Eşitliğin sağ tarafındaki Z dönüşümü MATLAB yardımı ile bulunabilir:

>> syms z n (‘enter’)>> ztrans (1/4^n) (‘enter’)ans = 4*z/(4*z-1)

Elde edilen sonuç son eşitlikte yerine konulursa;

elde edilir. Eşitlikte ilk koşullar yerlerine konularak ifade düzenlenirse;

elde edilir. Son eşitliğe iztrans komutu uygulanarak aranılan ayrık değeri bulunabilir:

>> syms z (‘enter’)>>iztrans ((4*z/(4*z-1)-z^-1+5)/(6-5*z^-2)) (‘enter’)ans =1/2*(1/4)^n+5/2*(1/2)^n-2*(1/3)^n

Elde edilen sonuca göre;

110

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 111: MATLAB Uğur Arifoğlu

bulunur. En başta verilen ilk koşulların bulunan ifadeyi sağlayıp sağlamadığı kontrol edilebilir.

17.17. Sembolik işlemlerin Fourier dönüşümüne uygulanması

[0 T] aralığında T periyoduyla tekrarlanan bir f(x) fonksiyonu aşağıdaki sonsuz seriyle ifade edilebilir;

(17.11)

Periyodik bir fonksiyon periyot içinde sürekli veya parçalı sürekli olabilir, n=1,2,3,.., olmak üzere sonsuz sayıda cos(2 ) ve sin(2 ) fonksiyonlarının doğrusal bileşimi olarak yazılabilir. Yukarıda verilen ifadede;

(17.12)

(17.13)

(17.14)

eşitlikleri geçerlidir. Fourier serileri sonlu sınırları olan periyotlarda tekrarlanan fonksiyonlar içindir. Bir fonksiyon periyodik değilse ve aynı zamanda bütün uzayda tanımlı ise Fourier serisi anlamsızdır. Bu durumlarda Fourier serilerinin genel biçimi olarak kabul edilebilecek olan Fourier dönüşümü ele alınmalıdır. Fourier dönüşümü Fourier serisinden türetilir. Ancak dönüşüm sonunda elde edilen artık bir serinin terim katsayıları değil, bir fonksiyondur. Fourier dönüşümü zaman (t) uzayından frekans (w) uzayına dönüşümü sağlar. Ters Fourier dönüşümü ise w uzayından t uzayına dönüşümü sağlar. Bu olaya teknolojiden bir örnek verilebilir: Bir otomobil üreticisi otomobilin yolda sarsılmadan gitmesini temin etmek için amortisör olarak bilinen şok tutucular kullanır. Araçta kullanılacak şok tutucuların özelliğini iyi tespit etmek için araçta çeşitli testler uygular. Üretici deneme aracına taktığı amortisörleri kötü yol koşullarında test eder ve aracın titreşimini bir alet ile kaydeder. Elde edilen kayıt çeşitli frekanslarda titreşim yapan gürültü sinyalidir. Bu sinyalin Fourier dönüşümü alınırsa, üretici aracın hangi frekanslarda şiddetli, hangilerinde ise zayıf titreşim yaptığını görür. Amortisörü şiddetli frekanslardaki titreşimi yutacak şekilde yeniden düzenleyerek dizayn eder.

Bütün uzayda tanımlı bir f(t) fonksiyonunun w uzayına Fourier dönüşümü;

(17.15)

ifadesi ile verilir. (17.15) ile verilen dönüşümün tersi, yani w uzayından t uzayına geçişi veren ters Fourier dönüşümü;

(17.16)

ifadesi ile hesaplanır. (17.15) ve (17.16) eşitlikleri;

F{f(t)} (17.17)

F {F(w)} (17.18)

111

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 112: MATLAB Uğur Arifoğlu

ifadeleri ile de gösterilebilir. Buraya kadar anlatılan Fourier serisi ve dönüşümü, matematik işlemlerde, çeşitli çözümlerde analitik olarak kullanılmaktadır. Fakat bilimsel ve teknolojik uygulamalarda elde edilen ölçüm değerleri bir fonksiyon değil, belirli bir eleman sayısı olan sayısal bir dizidir. Dolayısı ile bu tür sayısal verilerin dönüşümlerinin de sayısal olarak yapılması gerekir. Sayısal Fourier dönüşümü (Discrete Fourier Transform-DFT) analitik dönüşümlerin tüm özelliklerini sağlar. Eğer bir ölçüme ilişkin N adet data değeri mevcut ise (örneğin bir elektriksel işaretin çeşitli zamanlardaki değişimi ölçülmüş ise- k=1,2,3,.... adet ölçüm sonucu

dizisi oluşturulmuş ise) bu dizinin sayısal Fourier dönüşümü , Fourier seri ve Fourier dönüşüm formüllerinden hareketle;

h=0,1,2,3,.....N-1 (17.19)

olarak tanımlanır. Ters sayısal Fourier dönüşümü de yine aynı biçimde;

h=0,1,2,3,.....N-1 (17.20)

olur. DFT için data sayısında bir sınırlama yoktur. Mikroişlemci hızları arttıkça DFT algoritması büyük sayıdaki data değerlerini değerlendirme açısından cazipliğini koruyabilir. Ancak düşük hızdaki işlemciler için yüksek sayıda datayı işleme sokmak, DFT algoritması için oldukça zamana ihtiyaç duyulacağından pek tercih edilmez. Ölçüm sayısının çok sayıda olduğu işlemlerde hızlı Fourier dönüşümü (Fast Fourier Transform-FFT) tercih edilmelidir. FFT algoritmasının uygulanabilmesi için data sayısının olması gerekir. Bu özellik FFT’nin DFT’ye göre bir dezavantajıdır, zira DFT de data sayısında bir kısıtlama bulunmamaktadır. Eğer FFT de data sayısında eksiklik olursa ve datalar ‘0’ a doğru yakınsıyor ise ilk yol eksik dataları ‘0’ ile doldurmaktır. Böyle bir durum söz konusu değil ise datalar içinden uygun görülenleri dışarı atarak data sayısını ’e çekmektir. Diğer bir yaklaşım ise interpolasyon yaparak yeni datalar üretmektir. MATLAB ortamında Fourier yöntemine ilişkin çeşitli komutlar bulunmaktadır. bunlardan ilki fft komutudur:

Y=fft(y): Hızlı Fourier dönüşümünde (Fast Fourier Transform) kullanılan MATLAB komutudur. y vektörünün ayrık Fourier dönüşümünü (DFT-Discrete Fourier Transform) bulur. Bu işlem, hızlı Fourier dönüşümü (FFT) algoritması kullanılarak gerçekleştirilir. Y değerinin, aranılan harmonik genliklerinin k/2 katı olduğu unutulmamalıdır. fft komutu kullanıldığında, örnekleme sayısının yarısı kadar (k/2) harmonik ve bunların genlikleri incelenir. Örnek olarak k=16 adet örnekleme yapılmış ise bu komut kullanıldığında doğru bileşen dahil k/2=8 adet (pozitif bileşen) harmonik ile ilgili bilgi alınır. Diğer kalan 16-k/2=8 bileşen ise negatif bileşen değerleridir. 1. bileşen doğru akım bileşenini, 2.,3.,4.,5.,6.,7., bileşenler pozitif bileşenleri verir. 8. harmonik bileşeni ise Nyquist frekans bileşenidir. Nyquist frekansını takip eden bileşenler ise (9-15) negatif bileşenlerdir. 9. bileşen değeri 7. bileşenin eşleniğine (konjugesine) eşittir. 10. bileşen 6. bileşenin, 11. bileşen 5. bileşenin, 12. bileşen 4. bileşenin, 13. bileşen 3. bileşenin, 14. bileşen 2. bileşenin, 15. bileşen 1. bileşenin eşleniğidir (bak.şekil 17.6).

Yukarıda da bahsedildiği gibi hızlı Fourier dönüşüm uygulamalarında harmonik analizi yapılacak fonksiyonun (y) eleman sayısı (ne), özelliğini sağlamalıdır. k adet eleman içeren bir y fonksiyonuna fft komutu uygulandığında ancak k/2 kadar harmonik ve bunların genlikleri hakkında bilgi sahibi olunabilir (doğru bileşen değeri bu harmonik sayısına dahildir).

Problem 17.9

Periyodu T=9.6 sn olan y(t) fonksiyonu içinden, [0;T] aralığında, eşit zaman aralıkları ile 16 adet örnek (ölçme yöntemi ile) alınmaktadır. Elde edilen örnek (ayrık) değerler aşağıda verilmiştir.

y=[ 0 4.7163 6.5026 5.6751 3.2878 0.5738 -1.5028 -2.4723 -2.3602 -1.5293 -0.4619…

112

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 113: MATLAB Uğur Arifoğlu

0.4301 0.9153 0.9619 0.6876 0.2770 -0.0979];

y ayrık vektörüne fft komutu kullanılarak harmonik analizini yapınız ve grafik ortamda gösteriniz.

Çözüm

Şekil 17.4'de y(t) değişimi gösterilmiştir. Şekil 17.4'de y(t) değişimi, örneklenmiş y ve t değerleri gösterilmiştir. Zamana ilişkin başlangıç, artış ve bitiş değerleri t=0:0.6:9.6 saniye olarak verilmektedir. Örneklenmiş y vektörünün eleman sayıları =16 şartını sağlamaktadır. Şekil 17.4'e dikkatli bakıldığında y

vektörünün ile arasında değerler aldığı görülecektir ( elemanı bulunmamaktadır-şekil 17.5). Diğer bir ifade ile örnekleme sayısı k=0,……., n-1 olmakta , k=n olmamaktadır (bak. (17.19) eşitliği ve şekil 17.4). Yukarıda, fft komutu kullanılarak ancak k/2 sayıda harmonik hakkında bilgi sahibi olunabileceği belirtilmişti. Bu bilgiye göre ulaşılabilecek harmonik sayısı (m); verilen y vektörü için k/2=16/2=m=8 olmaktadır.

Yatay eksen olarak t (zaman) domeninden f (frekans) domenine geçildiğinde frekans artışı;

Hz ; ( sn olduğu unutulmamalıdır)

olacaktır. fft komutu kullanılarak incelenebilecek en büyük harmonik frekansı (Nyquist frekansı);

Hz

Şekil 17.4 Şekil 17.5

olacaktır. Şekil 17.6'da işaret frekansı ile Nyquist frekansı arasındaki ilişki gösterilmiştir. Burada görüldüğü örneğin, 3. harmonik genliği ile 14. harmonik genliği, ve 7. harmonik genliği ile 9. harmonik genliği birbirlerine eşittir. Aynı şekilde Nyquist frekanslarının tek katları kendi aralarında ve çift katları da kendi aralarında eşit harmonik genlik değerlerine sahiptir.

Şekil 17.6

0 maksf2 4 6maksf maksf3 5

)y(fft

3* 14*

7*

9*

8*

113

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 114: MATLAB Uğur Arifoğlu

Yukarıda, 'Y değerinin, aranılan harmonik genliklerinin k/2 katı olduğu unutulmamalıdır' ifadesi kullanıldı. Bundan hareketle;

>>Y=fft(y)

komutu uygulandığında (aranılan gerçek harmonik genlik değerlerine ulaşmak için) Y harmonik genlik değelerini k/2 sayısına bölmek gerekmektedir. Aşağıda verilen programda bu işlem;

>>Yss(1:nt/2)=(2/nt)*Y(1:nt/2);

satırında yapılmaktadır. Verilen programda;

>>[fss' Yss'];

satırında gerçek frekans ve gerçek harmonik genlik değerlerine ulaşılmaktadır.

Şekil 17.5'de verilen örnekleme şartlarında y vektörünün harmonik analizini yapan MATLAB programı aşağıda gösterilmiştir.

nt=16; % örnekleme sayısı şartını sağlamalı

T=9.6; % periyod (nt+1)*dt=Tdt=T/nt; % örnekleme aralığı sn df=1/T; % frekans artışı Hz

fmax=(nt/2)*df; %Nyquist frekansı Hz

t=0:dt:(nt-1)*dt; %t=0:0.6:9; f=0:df:(nt-1)*df; % f=0:0.10146:fmax=0.83%y harmonik analizi yapılacak y(t)fonksiyonun örneklenmiş data değerleriy=[0 4.7163 6.5026 5.6751 3.2878 0.5738 -1.5028 -2.4723 -2.3602... -1.5293 -0.4619 0.4301 0.9153 0.9619 0.6876 0.2770 ];Y=fft(y) % y vektörüne fft komutu uygulanıyorfigure(1) %Y (y'nin ayrık Fourier dönüşümü) zaman ekseninde gösteriliyorsubplot(221),bar(t,abs(Y)),xlabel('zaman (sn)'),ylabel('genlik(Y)'); subplot(222),bar(t,real(Y)),xlabel('zaman (sn)'),ylabel('reel(Y)'); subplot(223),bar(t,imag(Y)),xlabel('zaman (sn)'),ylabel('imajiner(Y)'); fss=0:df:(nt/2-1)*df;Yss=zeros(1,nt/2);Yss(1:nt/2)=(2/nt)*Y(1:nt/2);%Y degeri nt/2'ye bölünüyor(an+jbn)degerleri[fss' Yss'] % aranılan harmonik ve gerçek genlik değerleri%figure(2) % gerçek harmonik genlikleri frekans domeninde gösteriliyorsubplot(221),bar(fss,abs(Yss)); % harmonik genliginin cubuk formunda cizimixlabel('frekans (Hz)'),ylabel('genlik(Yss)'); subplot(222);bar(fss, real(Yss)); % an katsayisinin cubuk formunda cizimixlabel('frekans (Hz)'),ylabel('reel(Yss)'); subplot(223);bar(fss, imag(Yss)); % bn katsayisinin cubuk formunda cizimixlabel('frekans (Hz)'),ylabel('imajiner(Yss)');

Yukarıda verilen programın çalıştırılması sonunda Command Window ortamında elde edilen harmonik sayısı ve gerçek genlik değerleri aşağıda gösterilmiştir:>>ans = 0 15.7010 % doğru akım bileşeni 0.6000 19.2996 +11.5735i % 1. harmonik nt/2 katı 1.2000 -11.2650 +13.8929i % 2. harmonik nt/2 katı

114

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 115: MATLAB Uğur Arifoğlu

1.8000 -5.8754 + 2.3748i % 3. harmonik nt/2 katı 2.4000 -3.3826 + 0.8128i % 4. harmonik nt/2 katı 3.0000 -2.3512 + 0.3682i % 5. harmonik nt/2 katı 3.6000 -1.8616 + 0.1811i % 6. harmonik nt/2 katı 4.2000 -1.6322 + 0.0769i % 7. harmonik nt/2 katı 4.8000 -1.5642 % fmax (Nyquist) frekansındaki genlik (nt/2 katı) 5.4000 -1.6322 - 0.0769i % 7. harmonik eşleniği nt/2 katı 6.0000 -1.8616 - 0.1811i % 6. harmonik eşleniği nt/2 katı 6.6000 -2.3512 - 0.3682i % 5. harmonik eşleniği nt/2 katı 7.2000 -3.3826 - 0.8128i % 4. harmonik eşleniği nt/2 katı 7.8000 -5.8754 - 2.3748i % 3. harmonik eşleniği nt/2 katı 8.4000 -11.2650 -13.8929i % 2. harmonik eşleniği nt/2 katı 9.0000 19.2996 -11.5735i % 1. harmonik eşleniği nt/2 katı >>ans = % gerçek genlik değerleri) 0 1.9626 % doğru akım bileşeni= 0.1042 2.4124 + 1.4467i % 1. harmonik genliği 0.2083 -1.4081 + 1.7366i % 2. harmonik genliği 0.3125 -0.7344 + 0.2969i % 3. harmonik genliği 0.4167 -0.4228 + 0.1016i % 4. harmonik genliği 0.5208 -0.2939 + 0.0460i % 5. harmonik genliği 0.6250 -0.2327 + 0.0226i % 6. harmonik genliği 0.7292 -0.2040 + 0.0096i % 7. harmonik genliği

Şekil 17.7

115

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 116: MATLAB Uğur Arifoğlu

Şekil 17.8Yukarıda verilen progamın çalıştırılması sonunda elde edilen t-Y(t) ve fss-Yss değişimleri şekil 17.7 ve şekil 17.8'de gösterilmiştir. Şekil 17.7 ve şekil 17.8'de Data Cursor ikonu yardımı ile bazı harmonik gnlik değerleri şekil üzerinde gösterilmiştir. aşağıda verilen problemde ise değişim fonksiyonu verilen bir y(t) eğrisinin harmonik analizinin yapılışı gösterilmiştir.

Problem 17.10

y(t)= 0.5+2sin(2* *3.125*t)+cos(2* *9.25*t)

fonksiyonu ile değişen ve periyodu T=3.2 sn olan bir işaretin fft komutu yardımı ile harmonik analizi yapın. y(t) fonksiyonundan periyod boyunca eşit zaman aralıklarında nt=64 adet örnek alınmaktadır.

Çözüm

Şekil 17.9

116

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 117: MATLAB Uğur Arifoğlu

y(t) değişimi şekil 17.9'da görülmektedir. Verilen problemi çözen MATLAB programı aşağıda gösterilmiştir:

nt=64; T=3.2; dt=T/nt ; df=1/T; fmax=nt/(2*T); t=0:dt:(nt-1)*dt; f=0:df:(nt-1)*df; y= 0.5+2*sin(2*pi*3.125*t)+cos(2*pi*9.25*t);% egri denklemiY=fft(y); figure(1) % y(t) egrisinin değişimi çizdiriliyorplot(t,y)fss=0:df:(nt/2-1)*df;Yss=zeros(1,nt/2);Yss(1:nt/2)=(2/nt)*Y(1:nt/2); % an+jbn degerleri[fss' Yss']

figure(2) % y(t)nin frekans domeninde harmonik genlikleri çizdiriliyorsubplot(221),bar(fss,abs(Yss)); xlabel('frekans (Hz)'),ylabel('genlik(Yss)'); subplot(222);bar(fss,real(Yss));xlabel('frekans(Hz)'),ylabel('reel(Yss)')subplot(223);bar(fss,imag(Yss));xlabel('frekans(Hz)'),ylabel('imajiner(Yss)');

Yukarıda verilen programın çalıştırılması sonunda Command Window ortamında elde edilen harmonik frekans değerleri ve harmonik genlik değerleri aşağıda göasterilmiştir:>> 0 1.0272 % doğru bileşen: 0.3125 0.0272 - 0.0014i % 1.h 0.6250 0.0272 - 0.0028i % 2.h 0.9375 0.0272 - 0.0043i % 3.h 1.2500 0.0271 - 0.0057i % 4.h 1.5625 0.0271 - 0.0072i % 5.h 1.8750 0.0271 - 0.0087i % 6.h 2.1875 0.0270 - 0.0103i % 7.h 2.5000 0.0270 - 0.0119i % 8.h 2.8125 0.0269 - 0.0136i % 9.h 3.1250 0.0269 + 1.9846i % 10.h 3.4375 0.0268 - 0.0173i % 11.h 3.7500 0.0267 - 0.0193i % 12.h 4.0625 0.0266 - 0.0214i % 13.h 4.3750 0.0264 - 0.0237i % 14.h 4.6875 0.0263 - 0.0263i % 15.h 5.0000 0.0261 - 0.0291i % 16.h 5.3125 0.0258 - 0.0322i % 17.h 5.6250 0.0255 - 0.0357i % 18.h 5.9375 0.0251 - 0.0397i % 19.h 6.2500 0.0246 - 0.0443i % 20.h 6.5625 0.0240 - 0.0498i % 21.h 6.8750 0.0231 - 0.0564i % 22.h 7.1875 0.0219 - 0.0646i % 23.h 7.5000 0.0202 - 0.0753i % 24.h 7.8125 0.0175 - 0.0899i % 25.h 8.1250 0.0130 - 0.1115i % 26.h 8.4375 0.0046 - 0.1473i % 27.h 8.7500 -0.0159 - 0.2231i % 28.h 9.0625 -0.1107 - 0.5318i % 29.h 9.3750 0.2830 + 0.6553i % 30.h 9.6875 0.1222 + 0.1214i % 31.h

Yukarıda verilen programın çalıştırılmassı sonunda elde edilen harmonik değerleri ise şekil 17.10'da gösterilmiştir.

117

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 118: MATLAB Uğur Arifoğlu

Şekil 17.10

fft2 : İki boyutlu hızlı Fourier dönüşümünde kullanılır.

y = ifft(X) : X vektörünün ters ayrık Fourier dönüşümü (hızlı fourier dönüşümü algoritmasını kullanarak) hesaplar. Eğer X bir matris ise her bir kolonun ters ayrık fourier dönüşümünü bulur.

y = ifft(X,n) : X vektörünün n noktalı ters ayrık Fourier dönüşümü (hızlı fourier dönüşümü algoritmasını kullanarak) hesaplar.

y = ifft(X,n,dim) :y = ifft(X,[],dim) :

Boyut (dim) boyunca, X vektörünün n noktalı ters ayrık Fourier dönüşümü (hızlı fourier dönüşümü algoritmasını kullanarak) hesaplar.

y = ifft(..., 'symmetric'): Aktif olan boyut(dim)boyunca eşlenik simetrik X matrisinin ters ayrık dönüşümünde kullanılır. Özellikle yuvarlama hataları dolayısı ile tam anlamı ile eşlenik simetrik olamayan X matrislerinde tercih edilir.

y = ifft(..., 'nonsymmetric'): Aktif olan boyut(dim)boyunca eşlenik simetrik olmayan X matrisinin ters ayrık dönüşümünde kullanılır.

ifft2 (X) : X vektör (ya da matrisinin) iki boyutlu Ters hızlı Fourier dönüşümü bulur.

fourier : Sembolik işlemlerde Fourier dönüşümünde kullanılır. Aşağıda bu komutun çeşitli kullanılışları gösterilmiştir:

F=fourier(f) : Sembolik f(x) fonksiyonunun Fourier transformunu bulur. f fonksiyonu (default olarak) x'e bağlıdır. Dönüşüm sonunda (default olarak) w ile değişen bir fonksiyon elde edilir. Diğer bir ifade ile f=f(x) fonksiyonuna fourier komutu kullanılarak dönüşüm uygulandığında, F=F(w) elde edilir. F fonksiyonu f fonksiyonunun fourier dönüşümüdür:

F{f(x)} =

118

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 119: MATLAB Uğur Arifoğlu

(17.21)

F=fourier(f,v) : (17.21) eşitliğinde (default değer olan) w yerine v koyarak f fonksiyonunun fourier dönüşümünü bulur:

F{f(x)} =

F=fourier(f,u,v): (17.21) eşitliğinde (default değer olan) w yerine v ve (default değer olan) x yerine u koyarak f fonksiyonunun fourier dönüşümünü bulur:

F{f(u)}

Aşağıdaki problemde çeşitli fourier dönüşüm örnekleri verilmiştir:

Problem

Lineer olmayan bir yüke ilişkin ani akım ve ani gerilim değişimleri aşağıda verilmiştir. Bu yükün şebekeden çektiği (harmonikli) toplam aktif ve toplam reaktif güç değerlerini hesaplayan bir MATLAB programı yazınız.

Çözüm

akim =[0 2.4695 4.7981 6.8567 8.5387 9.7686 10.5078 10.7580 10.5595 … 9.9877 9.1455 8.1535 7.1393 6.2254 5.5180 5.0974 5.0109 5.2680 … 5.8401 6.6627 7.6413 8.6603 9.5932 10.3144 10.7109 10.6924 10.2004 … 9.2135 7.7503 5.8684 3.6598 1.2437 -1.2437 -3.6598 -5.8684 -7.7503… -9.2135 -10.2004 -10.6924 -10.7109 -10.3144 -9.593 -8.6603 -7.6413 -6.6627 … -5.8401 -5.2680 -5.0109 -5.0974 -5.5180 -6.2254 -7.1393 -8.1535 -9.1455… -9.9877 -10.5595 -10.7580 -10.5078 -9.7686 -8.5387 -6.8567 -4.798…-2.4695 -0.0000];gerilim =[ 53.5500 60.0747 63.6723 63.9568 60.9137 54.8064 46.1458 35.6458… 24.1611 12.6114 1.9019 -7.1572 -13.9199 -17.9614 -19.1129 -17.4759 -13.4101 … -7.5000 -0.500 6.7331 13.3217 18.4449 21.4148 21.7404 19.1725 13.7288 … 5.6943 -4.4024 -15.833 -27.7368 -39.1877 -49.2830 -57.2183 -62.3594 -64.2974 …-62.8848 -58.2484 -50.7779 -41.0917 -29.9819 -18.3455 -7.1043 2.8742 10.8545… 16.2951 18.8965 18.6249 15.7138 10.6410 4.0838 -3.1428 -10.1618 -16.1135 … -20.2351 -21.9299 -20.8235 -16.7985 -10.0077 -0.8623 10.0028 21.7835 33.5767 … 44.4582 53.5650];nt=64; T=0.02; dt=T/nt ; df=1/T; fmax=nt/(2*T) t=0:dt:(nt-1)*dt; f=0:df:(nt-1)*df; Y1=fft(akim); figure(1) % i(t) egrisinin değişimi çizdiriliyorplot(t,akim)fss=0:df:(nt/2-1)*df;Yss1=zeros(1,nt/2);tss=0:dt:(nt/2-1)*dt;Yss1(1:nt/2)=(2/nt)*Y1(1:nt/2); % an+jbn degerleri[fss' Yss1'];akimgenlik=abs(Yss1);akimaci=angle(Yss1);% gerilim hesabi basladiY2=fft(gerilim); figure(2) % v(t) egrisinin değişimi çizdiriliyorplot(t,gerilim)fss=0:df:(nt/2-1)*df;Yss2=zeros(1,nt/2);tss=0:dt:(nt/2-1)*dt;Yss2(1:nt/2)=(2/nt)*Y2(1:nt/2); % an+jbn degerleri[fss' Yss2'];gerilimgenlik=abs(Yss2);gerilimaci=angle(Yss2);toplamQ=0;for k=1:nt/2;toplamQ=toplamQ+akimgenlik(k)*gerilimgenlik(k)*0.5*sin…(gerilimaci(k)-akimaci(k));

119

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 120: MATLAB Uğur Arifoğlu

endtoplamQtoplamP=0;for k=1:nt/2;toplamP=toplamP+akimgenlik(k)*gerilimgenlik(k)*0.5*cos…(gerilimaci(k)-akimaci(k));endtoplamP

Program hakkında (açıklamalar ilave et)…………………………………………

Açıklama:

Eğer işaret (örneğin i(t)) 0:T aralığında, Ts (örnekleme zamanı) aralıkla örneklenmiş ve genlik değerleri (i(t)) bir vektör içinde,

Y=[ ]; m=örnekleme sayısı

olarak kaydedilmiş ise ve bu örnekleme aralıklarına karşı gelen (t) zaman (ya da wt ekseni) elemanları;

t=[ ]

veya

wt=[ ]

ise, fourier katsayıları;

; n: incelenen harmonik sayısı

eşitlikleri kullanılarak hesaplanabilir (ayrık zaman analizinde). Yukarıda kullanılan t ve wt vektörleri arasında;

wt=2*pi*t/T

ilişkisi vardır.

ifourier : Sembolik işlemlerde ters Fourier dönüşümünde kullanılır. Aşağıda bu komutun çeşitli kullanılışları gösterilmiştir:

f=ifourier(F) : Sembolik F(w) fonksiyonunun ters Fourier transformunu (f(x)) bulur. F fonksiyonu (default olarak) w'ya bağlıdır. Dönüşüm sonunda (default olarak) x ile değişen bir f fonksiyonu elde edilir. Diğer bir ifade ile F=F(w) fonksiyonuna ifourier komutu kullanılarak dönüşüm uygulandığında f=f(x) elde edilir. f fonksiyonu F fonksiyonunun ters fourier dönüşümüdür:

F {F(w)}=

(17.22)

f=ifourier(F,u) : (17.22) eşitliğinde (default değer olan) x yerine u koyarak F fonksiyonunun ters fourier dönüşümünü bulur:

120

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 121: MATLAB Uğur Arifoğlu

F {F(w)}=

(17.23)f=ifourier(F,v,u): (17.22) eşitliğinde (default değer olan) w yerine v ve (default değer olan) x

yerine u koyarak F fonksiyonunun ters fourier dönüşümünü bulur:

F {F(v)}=

(17.24)

Aşağıdaki problemde çeşitli ters fourier dönüşüm örnekleri verilmiştir:

Problem 17.12

a) f(w)= olmak üzere, F {F(w)}=

b) g(x)= olmak üzere, F {G(w)}=

c) f(w)= olmak üzere, F {F(w)}=

d) ; w reel bir sayı olmak üzere, F {F(w)}=

fonksiyonlarının sembolik gösterimde ters Fourier dönüşümlerini bulunuz.

Çözüm

a) >> syms w a real; (‘enter’) >> f =exp(-w^2/(4*a^2)); (‘enter’) >> F =ifourier(f); (‘enter’) >> F = simple(F) (‘enter’) ans= a*exp(-x^2*a^2)/pi^(1/2)

b) >> syms x; (‘enter’) >> g = exp(-abs(x)); (‘enter’) >> ifourier(g) (‘enter’) ans= 1/(1+t^2)/pi

c) >> syms w; (‘enter’) >> f =2*exp(-abs(w))-1 ; (‘enter’) >> simple(ifourier(f,t)) (‘enter’) ans= -(-2+pi*Dirac(t))/(1+t^2)/pi

d) >> syms v w real; (‘enter’) >> f = exp(-w^2*abs(v))*sin(v)/v (‘enter’) >> ifourier(f,v,f) (‘enter’) ans= -1/2*(-atan((t+1)/w^2)+atan((-1+t)/w^2))/pi

17.19. MATLAB ortamında seri açılımı

MATLAB ortamında f(x) fonksiyonunun Taylor açılımı için taylor komutu kullanılır;

121

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 122: MATLAB Uğur Arifoğlu

taylor (f) : f(x) fonksiyonunu 5. dereceden Maclaurin polinomuna göre seriye açar.

>> syms x (‘enter’)>> taylor(cos(exp(x)) (‘enter’)ans = cos(1)-sin(1)*x+(-1/2*cos(1)-1/2*sin(1))*x^2- 1/2*cos(1)*x^3+(5/24*sin(1)- 1/4*cos(1))*x^4+(23/120*sin(1)-1/24*cos(1))*x^5 taylor(f,n): f(x) fonksiyonunu (n-1). dereceden Maclaurin polinomuna göre seriye açar.

>> syms x (‘enter’)>> taylor(exp(x),4) (‘enter’)ans = 1+x+1/2*x^2+1/6*x^3>>pretty(ans) % görsel açılım elde etmek için (‘enter’) 2 3 1 + x + 1/2 x + 1/6 x

taylor (f, n, u) : f(x,u) fonksiyonunu ‘u’ya göre (n-1). dereceden Maclaurin polinomuna göre kadar seriye açar.

>> syms u v (‘enter’)>> taylor(cos(u+v),u,4) (‘enter’)ans = cos(v)-sin(v)*u-1/2*cos(v)*u^2+1/6*sin(v)*u^3

Aşağıdaki diğer örnekler incelenmelidir:

>> syms x (‘enter’)>> f=1/(5+4*cos(x)); (‘enter’) >> T=taylor(f,8) (‘enter’) T = 1/9+2/81*x^2+5/1458*x^4+49/131220*x^6>>pretty(T) 2 4 49 6 1/9 + 2/81 x + 5/1458 x + ------ x 131220

>> syms x (‘enter’)

>> g=exp(x*sin(x)) (‘enter’) >> t=taylor(g,12,2); (‘enter’)

>> ezplot(t,[1,3]) (‘enter’)

Yukarıda g adlı fonksiyonun Taylor serinin ilk 12 (sıfır olmayan) elemanı x=2 civarında üretilmekte ve çizdirilmektedir. Elde edilen eğri şekil 17.11'de gösterilmiştir.

122

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 123: MATLAB Uğur Arifoğlu

Şekil 17.11 Şekil 17.12

17.20. Basit fonksiyonların asimtot, maksimum, minimum ve bükülme noktalarının bulunması

fonksiyonu sembolik olarak MATLAB'e tanıtılsın:

>> syms x (‘enter’) >> pay= 3*x^2+6*x-1; (‘enter’) >> payda= x^2+x-3; (‘enter’) >> f=pay/payda;>> ezplot(f) % f çizdiriliyor (‘enter’)

f fonksiyonunun değişimi şekil 17.12'de gösterilmiştir. Eğer f fonksiyonunun yatay asimtotu bulunmak istenirse pozitif sonsuzda limiti alınmalıdır:

>> limit(f,inf) (‘enter’) ans = 3 % 3 de yatay asimtot vardır

Eğer f fonksiyonunun dikey asimtotu bulunmak istenirse paydayı 0 yapan kökler bulunmalıdır::

>>roots=solve(payda) (‘enter’) kokler = -1/2+1/2*13^(1/2) -1/2-1/2*13^(1/2) >> kok1=double(roots(1)) % 1. kök sayıya çevriliyor (‘enter’) kok1 = 1.3028>> kok2=double(roots(2)) % 2. kök sayıya çevriliyor (‘enter’) kok2 = -2.3028>>ezplot(f); (‘enter’) >>hold on % f eğrisi tutulup üzerine yatay ve düşey asimtotlar çizdirilecek% yatay asimtot çizdiriliyor>>plot([-6 6],[3 3]) % [3 3] ile yatay y=3 eğrisi çizdiriliyor (3 yatay asimtot idi)% düşey asimtot çizdiriliyor>>plot(kok1*[1 1],[-4 9]) % [1 1] ile kok1 değerinde düşey asimtor çizdiriliyor )

123

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 124: MATLAB Uğur Arifoğlu

>>plot(kok2*[1 1],[-4 9]) % [1 1] ile kok1 değerinde düşey asimtor çizdiriliyor )>>title('yatay ve dusey asimtotlar'),hold off

Yukarıdaki program satırlarının uygulanması sonunda elde edilen eğri,yatay ve düşey asimtotlar şekil 17.13'de gösterilmiştir (yatay eksen sınırı [-6 6], düşey eksen sınırı [-4 9] alınmıştır).

Şekil 17.13 Şekil 17.14

Şekil 17.3'e bakıldığında x=2 ile x=3 arasında bir yerde lokal maksimum, x=-4 ile x=-2 arasında da lokal minimum olduğu görülmektedir. Maksimum ve minimum noktaları bulmak için f fonksiyonunun birinci dereceden türevini almak gerekir:

>> f1=diff(f) (‘enter’) f1 = (6*x+6)/(x^2+x-3)-(3*x^2+6*x-1)/(x^2+x-3)^2*(2*x+1)

>> f1=simplify(f1) % f1 basitleştiriliyor (‘enter’)

f1 = -(3*x^2+16*x+17)/(x^2+x-3)^2>> pretty(f1) % kokler daha iyi görülmek isteniyor (‘enter’) 2 3 x + 16 x + 17 - ----------------- 2 2 (x + x - 3)>>krit_nokt=solve(f1) % f1 in kritik noktaları bulunuyor (‘enter’)krit_nokt = -8/3-1/3*13^(1/2) % lokal minimum -8/3+1/3*13^(1/2) % lokal maksimum>>krkok1=double(krit_nokt(1)) % lokal minimum sayıya çevriliyor (‘enter’)krkok1 = -3.8685>>krkok2=double(krit_nokt(2)) % lokal maksimum sayıya çevriliyor (‘enter’)krkok2 = -1.4648

f fonksiyonunun bükülme noktasını bulmak için ikinci türevini sıfır yapan kökler bulunmalıdır:

>> f2=diff(diff(f)); % veya diff(f,2) komutu kullanılabilir (‘enter’)>> bukulme_nok=solve(f2); (‘enter’)>> bukkok=double(bukulme_nok) (‘enter’)bukkok =

124

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 125: MATLAB Uğur Arifoğlu

-5.2635 -1.3682 - 0.8511i -1.3682 + 0.8511i

Yukarıda elde edilen 3 kökten 2. ve 3. kökler kompleks olduğu için (şekil 17.13'de her iki eksen de reel) bu problemde değerlendirmeye alınmayacaktır. Yalnızca bukkok(1)ile ilgilenilecektir.Aşağıdaki komut satırları ile maksimum,minimum ve bükülme noktaları şekil üzerinde gösterilmektedir:

>>ezplot(f) (‘enter’) >>hold on (‘enter’)>>plot(krkok1,double(subs(f,krkok1)),'o') (‘enter’)>>text(-4.5,3.2,'lokal minimum') (‘enter’)>>plot(krkok2,double(subs(f,krkok2)),'o') (‘enter’)>>text(-2.5,2,'lokal maksimum') (‘enter’)>>plot(bukkok(1),double(subs(f,bukkok(1))),'*') (‘enter’)>>text(-6,2,'bukulme noktasi') (‘enter’)>>hold off (‘enter’)

Yukarıdaki program satırlarının çalıştırılması sonunda şekil 17.14'de verilen görüntü elde edilir.

17.21. MATLAB ortamında serilerin toplanması

Sembolik ifadeler içeren matematiksel toplama işlemlerinde symsum komutu kullanılır.

symsum(f,a,b): f adlı sembolik fonksiyonun [a b] aralığında matematiksel toplamını gerçekleştirir.

f = işlemi MATLAB ortamında yapılsın:

>>syms n (‘enter’) >>symsum(n*n,1,5) (‘enter’) ans = 55

f = işlemi MATLAB ortamında yapılsın:

>>syms n (‘enter’)>>symsum((0.1)^(n-1)/gamma(n),1,5) (‘enter’)

ans = 265241/240000 >>double(ans) (‘enter’) ans = 1.1052

f = işlemi MATLAB ortamında yapılsın:

>> syms n k (‘enter’) >> symsum(k^3,1,n) (‘enter’) ans = 1/4*(n+1)^4-1/2*(n+1)^3+1/4*(n+1)^2 >> factor(ans) % sadeleştirme yapılıyor (‘enter’) ans =

125

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 126: MATLAB Uğur Arifoğlu

1/4*n^2*(n+1)^2

f = işlemi MATLAB ortamında yapılsın;

>> syms r (‘enter’) >> symsum(1/r^2,1,inf) (‘enter’) ans = 1/6*pi^2 >>double(ans) (‘enter’) ans = 1.6449 f = işlemi MATLAB ortamında yapılsın: ( ) >> syms x k (‘enter’) >> symsum(x^k,k,0,inf) (‘enter’) ans= -1/(x-1)

MATLAB ortamında tanımlanmış matematiksel fonksiyonlar bulunmaktadır. Bunlardan bazıları ve MATLAB komut karşılıkları aşağıda verilmiştir:

' ,gamma' fonksiyonu:

Aşağıdaki MATLAB satırı k= için ‘gamma’ fonksiyonunu hesaplar: >> syms r (‘enter’) >> symsum((1/gamma(r),1,inf) (‘enter’) ans = exp(1) >> double(ans) (‘enter’) ans = 2.7183 ‘ ,bessel’ fonksiyonu:

Aşağıdaki MATLAB satırı ve k=2 için ‘bessel’ fonksiyonunu hesaplar: >> syms r (‘enter’) >> besseli (0, 2) (‘enter’) ans = 2.2796

Aşağıdaki MATLAB satırı ve k=2 için ‘bessel’ fonksiyonunu hesaplar:>> besseli(n,2) (‘enter’)ans = besseli(n,2)>> double(ans) (‘enter’)ans =

126

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 127: MATLAB Uğur Arifoğlu

1.5906

Aşağıdaki MATLAB satırları ‘bessel’ fonksiyonunun integralini ( ) hesaplar:

>> syms x (‘enter’) >>int(besselj(1,x)) % veya int(besselj(1,x),x) (‘enter’)ans = -besselj(0,x)

Diğer bir 'bessel' integrali aşağıda verilmiştir:

>> syms z (‘enter’)>> a=int(besselj(1,z)^2,0,1) (‘enter’) a= 1/12*hypergeom([3/2, 3/2],[2, 5/2, 3],-1)>> double(a) (‘enter’)ans = 0.0717

Hatırlatma : MATLAB ortamında U(t) birim basamak fonksiyonunu tanımlamak için Symbolic Toolbox içinde Heaviside komutu tanımlanmıştır. Örneğin birim basamak fonksiyonu için;

>>vpa(‘Heaviside(2)’) ( ‘enter’)ans= 1.

elde edilir. Örneğin, –4 ile 8 arasında U(t) birim basamak fonksiyonunun integrali alınmak istenirse;

>int(‘Heaviside(x)’,-4,8) ( ‘enter’)ans= 8

elde edilir. Diğer bir örnekte ise aşağıda verilen f(x) fonksiyonunun Fourier transformu bulunmak istensin. f(x) yapısı parçalı olarak U(t) yapısına uyduğu için tüm x değerleri için f(x)=U(t)* yazılabilir:

>>syms x ( ‘enter’)>>fourier(‘Heaviside(x)’*exp(-2*x)) ( ‘enter’)ans = 1/(2+i*w)

Hatırlatma : MATLAB ortamında ; dirac delta (ya da impulse) fonksiyonunu tanımlamak için Symbolic Toolbox içinde Dirac komutu tanımlanmıştır. Bilindiği gibi dirac fonksiyonu için;

;

yazılabilir. Eğer x’in tüm değerleri için f(x)=1 ise yukarıdaki integral;

127

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 128: MATLAB Uğur Arifoğlu

olacaktır. integrali MATLAB ortamında yapılırsa;

>>syms x ( ‘enter’)>>int(‘Dirac(x)’, -inf, inf ) ( ‘enter’)ans= 1.

elde edilir. Birim basamak fonksiyonunun türevi MATLAB ortamında alınırsa;

>>diff(‘Heaviside(x)’) ( ‘enter’)ans=Dirac(x)

bulunur. Birim basamak fonksiyonunun Fourier transformu MATLAB ortamında şöyle yazılabilir:

>>fourier(sym(‘Heaviside(x)’)) ( ‘enter’)ans = pi*Dirac(w)-i/w

Hatırlatma : MATLAB ortamında signum(x) işaret fonksiyonunu tanımlamak için Symbolic Toolbox içinde signum komutu tanımlanmıştır. Bilindiği gibi sgn(x) fonksiyonu için;

yazılabilir.>>vpa(‘signum(4)’) ( ‘enter’)ans= 1.>> syms x ( ‘enter’)>>int(‘signum(x)’ ) ( ‘enter’)ans = signum(x)*x>>int(‘signum(x)’, -5, 12 ) ( ‘enter’)ans = 7>> syms x ( ‘enter’) >>int(‘Heaviside(x)’,0,t ) ( ‘enter’) Heaviside(t)*t

17.23. Fonksiyon hesap makinası

Command Window ortamında;

>> funtool ( ‘enter’)

işlemi yapıldığında kullanıcının karşısına şekil 17.17'de görülen 'fonksiyon hesap makinası' çıkar. Bu pencerede f, g, x, a adlarında 4 adet ekran ve 28 adet buton bulunur. 4 satır halinde yerleştirilen butonların ilk satırında kontrol butonları yer alır.Bu butonlar yardımı ile f fonksiyonuna ilişkin çeşitli dönüşümler yapılır. İkinci satırda yer alan tuşlar kullanılarak, a sabiti ile f fonksiyonu arasında çeşitli işlemler gerçekleştirilir. Üçüncü satırda yer

128

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 129: MATLAB Uğur Arifoğlu

alan tuşlar kullanılarak f ve g fonksiyonu arasında dönüşüm işlemleri yapılır. 'Fonksiyon hesap makinası' nın ekran ve butonların görevleri aşağıda gösterilmiştir:

Şekil 17.17

f : f fonksiyonu (klavye yardımı ile) bu ekrana yazılır.g : g fonksiyonu (klavye yardımı ile) bu ekrana yazılır.x : f ve g değişimlerinin değişim aralığı (klavye yardımı ile) girilir.a : f fonksiyonunu değiştirmek için kullanılacak sabit değer (klavye ile) buraya yazılır.df/dx : f ekranına yazılan fonksiyonunun türevinı alır.int f : f ekranına yazılan fonksiyonunun integralini alır (hesaplanan fonksiyonun kapalı formda

gösterimi yoksa hata verebilir).simple f : f ekranına yazılan fonksiyonu (mümkünse) basitleştirir.num f : f in pay fonksiyonunu gösterir.den f : f in payda fonksiyonunu gösterir.1/f : f fonksiyonunun pay ve paydasının yerini değiştirir finv : f fonksiyonunun tersini bulur (hesaplanan fonksiyonun kapalı formda gösterimi yoksa

hata verebilir).f+a : f fonksiyonuna a sayısını ekler.f-a : f fonksiyonundan a sayısını çıkarır.f*a : f fonksiyonu ile a sayısını çarpar.f/a : f fonksiyonunu a sayısına böler.f^a : f fonksiyonunun a.kuvvetini hesaplar.f(x+a) : f fonksiyonunda x yerine x+a koyar. f(x*a) : f fonksiyonunda x yerine x*a koyar. f+g : f fonksiyonu ile g fonksiyonunu toplar ve sonucu f ekranına yazar.f-g : f fonksiyonundan g fonksiyonunu çıkarır ve sonucu f ekranına yazar.f*g : f fonksiyonu ile g fonksiyonunu çarpar ve sonucu f ekranına yazar.f/g : f fonksiyonunu g fonksiyonuna böler ve sonucu f ekranına yazar.g=f : f fonksiyonunu g ekranına yazar.swap : f fonksiyonunu g ekranına, g fonksiyonunu f ekranına yazar.Insert : f ekranına yazılan en son fonksiyonu, fonksiyon listesinin en sonuna ilave eder

(kullanıcının f ekranına yazdığı her fonksiyon arka planda saklanır.Bundan amaç

129

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 130: MATLAB Uğur Arifoğlu

yazılan fonksiyonların daha sonra tekrar çağrılma ihtimalidir)Cycle : f ekranında yazılan fonksiyon ile (daha önce kullanıcı tarafından bu ekrana yazılan ve

fonksiyon listesine kaydedilen) fonksiyon listesindeki bir sonraki fonksiyonu yer değiştirir.

Delete : Fonksiyon listesinde yer alan tüm fonksiyonları siler.Reset : 4 adet ekran görüntüsünü default ayarlara geri getirir.Help : funtool ile ilgili help ortamını çağırır.Demo : Fonksiyon hesap makinasında gerçekleşen görüntüleri 4 adet ekranda kısa aralıklarla

gösterir.Close : funtool komutu ile açılan pencereyi kapatır.

17.24. Özel fonksiyonlar listesi

MATLAB arka planında saklı bazı özel fonksiyonlar bulunmaktadır. Bu fonksiyonlara ulaşmak için;

>> mfunlist ('enter')

komutu uygulanmalıdır. Aşağıda bu fonksiyonlarla ilgili açıklamalar verilmiştir:

Fonksiyon ismi Fonksiyonun tanımı MATLAB komutu Koşullar

Bernoulli sayıları ve polinomları

bernoulli(n)bernoulli(n,t)

0n

Bessel fonksiyonları

BesselI, BesselJ ( birinci dereceden Bessel fonksiyonları)

BesselK,BesselY ( ikinci dereceden Bessel

fonksiyonları)

BesselJ(v,x)BesselY(v,x)BesselI(v,x)BesselK(v,x)

v; reel sayı

Beta fonksiyonu Beta(x,y)

Binom katsayıları Binomial(m,n)

Tüm eliptik integraller

Birinci,ikinci ve üçüncü dereceden Legendre'nin tüm eliptik

integraller

EllipticK(k)EllipticE(k)

EllipticPi(a,k)

a; reel sayı

k; reel sayı

Tamamlayıcı (complementary)

modüllü tüm eliptik integraller

Birinci,ikinci ve üçüncü dereceden tamamlayıcı modüllü, birleşik tüm

eliptik integraller

EllipticCK(k)EllipticCE(k)

EllipticCPi(a,k)

a; reel sayı

k; reel sayı

Tamamlayıcı hata fonksiyonları ve bunların iteratif

integralleri

erfc(z)erfc(n,z)

n>0

130

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 131: MATLAB Uğur Arifoğlu

Dawson integrali dawson(x)

Digamma fonksiyonu Psi(x)

Dilogaritmik integral dilog(x) x>1

Hata fonksiyonu erf(z)

Euler sayı ve polinomları

(Euler sayıları için fonksiyon

üretir) euler(n)euler(n,z)

Eksponansiyel integraller

Ei(n,z)Ei(x) Reel z>0

Fresnel'in sin ve cos integralleri

FresnelC(x)FresnelS(x)

Gamma fonksiyonuGAMMA(z)

Harmonik fonksiyonu γ harmonic(n) n>0

Hiperbolik sin ve cos integralleri

Shi(z)Chi(z)

Genelleştirilmiş hipergeometrik

fonksiyonlar

(j ve m; sırası ile n ve d içindeki terim sayısıdır)

hypergeom(n,d,x)

n=[n1,n2,..]d=[d1,d2,..]

n1,n2,.. reel sayılardır.

d1,d2,.. reel ve negatif

olmayan sayılardır.

Tamamlanmamış eliptik integraller

Legendre'nin birinci, ikinci ve üçüncü dereceden

tamamlanmamış eliptik integralleri

EllipticF(x,k)EllipticE(x,k)ElipticPi(x,a,k)

a; reel sayı

k; reel sayı

131

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 132: MATLAB Uğur Arifoğlu

Tamamlanmamış gamma fonksiyonu GAMMA(z1,z2)

Gamma fonksiyonunun

logaritmasılnGAMMA(z)

Logaritmik integral Li(x) x>1

Poligamma fonksiyonu Psi(n,z)

Kaydırılmış sin integrali Ssi(z)

MATLAB arka planında ortogonal polinomlara ilişkin hazır komutlar da yer alır. Bu tür polinomlara ulaşmak için kullanıcının Extended Symbolic Math Toolbox 'a sahip olması gerekir. Bu araç kutusu bilgisayarda yüklü ise;

>>maple('with','orthopoly') ('enter')

komutu kullanılarak bu fonksiyonlara ulaşılabilir. Aşağıda ortogonal polinomlara ilişkin bilgiler yer almaktadır. Komutlar içinde yer alan (tüm koşullarda) n; negatif olmayan tam sayı, x ise reel bir sayıdır.

Polinomlar MATLAB komutu Koşullar

Gegenbauer G(n,a,x)a, oranlı olmayan bir ifade

ya da -1/2 den büyük oranlı bir sayıdır

Hermite H(n,x)Laguerre L(n,x)

Genelleştirilmiş Laguerre

L(n,a,x)a, oranlı olmayan bir ifade ya da -1 den büyük oranlı

bir sayıdır Legendre P(n,x)

Jacobi P(n,a,b,x)a ve b, oranlı olmayan bir ifade ya da -1 den büyük

oranlı sayılardır Birinci ve ikinci

dereceden Chebyshev

T(n,x)U(n,x)

17.25. Diğer sembolik araç kutusu komutları

Aşağıda diğer bazı sembolik araç kutusu komutları ve uygulamaları gösterilmiştir:

P=poly2sym(A) : Katsayıları A vektörü ile verilen polinomo sembolik olarak yazar. Default olarak x kullanır.

P=poly2sym(A,s) : Katsayıları A vektörü ile verilen polinomo s harfini kullanarak oluşturur.

>>A=[2 5 -3 1]; (‘enter’)>>P=poly(A) (‘enter’)P = 2*x^3+5*x^2-3*x+1>>syms s; (‘enter’)>>P=poly(A,s) (‘enter’)

132

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 133: MATLAB Uğur Arifoğlu

P = 2*s^3+5*s^2-3*s+1

P=sym2poly(s) : S adlı sembolik polinomun katsayılarını P adlı vektöre atar.

>>syms x u v;>>sym2poly(x^3 - 2*x - 5)return 1 0 -2 -5

ccode(f) : f ifadesinin C programlama dili kod karşılığını yazar.

>> syms x; (‘enter’)>> f=log(1+x); (‘enter’)>> ccode(taylor(f)) (‘enter’)ans= t0 = x-x*x/2.0+x*x*x/3.0-x*x*x*x/4.0+x*x*x*x*x/5.0;

ezcontour(f) : f sembolik fonksiyonunun x=[-2 2 ] ve y=[-2 2 ] aralığında çizer

ezcontour(f,[xmin xmax],[ymin ymax]): x ve y gibi iki değişkenli f sembolik fonksiyonunun eş yükselti eğrilerini x=[xmin xmax] ve y=[ymin ymax] aralığında çizer.

>> syms x y; (‘enter’)>> f=3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) - 10*(x/5 - x.^3... - y.^5).*exp(-x.^2-y.^2)- 1/3*exp(-(x+1).^2 - y.^2); (‘enter’)>> ezcontour(f,[-3,3],[-3 3]) % çizim gösterilmemiştir (‘enter’)

ezmeshc(f,[xmin,xmax,ymin ymax]): x ve y gibi iki değişkenli f sembolik fonksiyonunu ve eş yükselti eğrilerini x=[xmin xmax] ve y=[ymin ymax] aralığında çizer.

Örnek olarak; z=f(x,y)= y/( eğrisi , -5<x<5 ve -8<y<8 aralığında çizdirilsin:>> syms x y; (‘enter’)>> ezmeshc(y/(1+x^2+y^2),[-5,5,-8,8]); % çizim gösterilmemiştir (‘enter’)

ezplot3(x,y,z,[tmin,tmax]): x(t), y(t) ve z(t) f sembolik fonksiyonlarını kullanarak [tmin tmax] aralığında 3 boyutlu parametrik eğri çizer.

Aşağıda; x=sin(t),y=cos(t) ve z=t parametrik eğrisini ,t=[0,6*pi] aralığında çizdiren komut satırı verilmiştir:

>> syms t; (‘enter’) >> ezplot3('sin(t)','cos(t)','t',[0,6*pi]); % çizim gösterilmemiştir (‘enter’)

ezpolar(f,[a,b]): f( ) polar sembolik fonksiyonunu [a b]= [ min max] aralığında çizer.

Default aralığı [0 2 ] dir. Bu aralık için [a b] yazmaya gerek yoktur.

>> syms t; (‘enter’) >> ezpolar(1+cos(t),[-pi pi]); % çizim gösterilmemiştir (‘enter’)

J=jordan(A): A matrisinin Jordan kanonik (normal) formunu bulur. Burada A matrisi sembolik ya da sayısal olabilir.

[V,J]=jordan(A): Bu komut ile hem J (kanonik form) hem de benzerlik dönüşüm matrisi olan V hesaplanır. V’nin kolonları genelleştirilmiş eigen vektörleridir. (V/A*V=J)

133

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 134: MATLAB Uğur Arifoğlu

>>A = [1 -3 -2; -1 1 -1; 2 4 5]; (‘enter’) >>[V,J] = jordan(A) (‘enter’) return A = 1 -3 -2 -1 1 -1 2 4 5 V = -1 -1 1 0 -1 0 1 2 0 J = 3 0 0 0 2 1 0 0 2

[Y]=lambertw(x) Bu komut, Lambert’in w fonksiyonunu x için hesaplar. x sayısal olabileceği gibi sembolik de olabilir.

Lambert’,in w sı, eşitliğini çözer. Burada w; x’in bir fonksiyonudur.

>>lambertw([0 -exp(-1); pi 1]); (‘enter’) ans = 0 -1.0000 + 0.0000i 1.0737 0.5671 >>syms x y; (‘enter’) >>lambertw([0 x;1 y]) (‘enter’) return[ 0, lambertw(x)][ lambertw(1), lambertw(y)]

Z=null(A) A matrisinin boş uzayını oluşturur.

>> A=[2 5 9 5;-3 1 8 -2;7 9 0 8]; (‘enter’) >> B=null(A) (‘enter’) B = -0.8171 0.1849 -0.2028 0.5070

[Pay Payda]=numden(A): A ifadesinin payını Pay’a, paydasını Payda’ya atar. A; sayı olabileceği gibi sembolik bir ifade de olabilir.

>>A=3/5; (‘enter’) >>[Pay Payda]=numden(sym(A)) (‘enter’) Pay = 3Payda = 5>>B=x/y+y/x; (‘enter’) >>[Pay Payda]=numden(sym(B)) (‘enter’) Pay = x^2+y^2Payda = y*x

134

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 135: MATLAB Uğur Arifoğlu

rank(A): A matrisinin rank’ını hesaplar. A matrisi sayılardan oluşabileceği gibi sembolik ifadelerden de oluşabilir.

>> syms x y; (‘enter’) >> A=[x 2*x 3*y;x y 2*x;3*y 2*y 3*x]; (‘enter’) >> rank A (‘enter’) ans= 3

Y=zeta(w): w elemanlarında zeta fonksiyonunu hesaplar. w sayısal bir matris olabileceği gibi sembolik bir matris de olabilir.

Zeta fonksiyonu aşağıda verilmiştir:

Y=zeta(w,n): Zeta(w) fonksiyonunun n. dereceden türevini hesaplar.

>>zeta(1.5) (‘enter’) ans = 2.6124>>syms x y; zeta([x 2;4 x+y]) (‘enter’) ans = [ zeta(x), 1/6*pi^2] [ 1/90*pi^4, zeta(x+y)]

17.26. Taylor serisi hesap makinası

Kullanıcı MATLAB Command Window ortamında;

>>taylortool (‘enter’)

komutunu uyguladığında karşısına şekil 17.18’de verilen görüntü çıkar.

135

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları

Page 136: MATLAB Uğur Arifoğlu

Şekil 17.17

Şekil 17.17’de gösterilen Taylor serisi hesap makinesı ekranında, f(x) iadesinin sağ tarafına yazılan fonksiyonun,

N ifadesinin sağ tarafına yazılan sayı derecesinden Taylor serisine açılmış hali ’in sağ tarafındaki

boşluğa yazılır. Fonksiyon x=a noktası çivarında seriye açılır. Şekil 17.17’de fonksiyonu a=0

civarnda 8. dereceden Taylor serinine açılmıştır. Elde edilen fonksiyon ise ifadesinin sağ tarafında

gösterilmiş ve grafik ekranında ise çizdirilmiştir. x aralığı ise [-2* ; 2* ] dir.

136

Uğur Arifoğlu MATLAB7.0 Simulink ve mühendislik uygulamaları