• Sonuç bulunamadı

- Matlab a Giriş- BÖLÜM -12- Matlab a Giriş

N/A
N/A
Protected

Academic year: 2022

Share "- Matlab a Giriş- BÖLÜM -12- Matlab a Giriş"

Copied!
39
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

BÖLÜM -12-

Matlab’a Giriş

(2)

12. Matlab’a Giriş

12.1. Giriş

Temelde MATLAB aşağıda şekilde görülen menülere sahiptir. Programı çalıştırdığınızda Command Window, Current Directory, Workspace ve Command History varsayılan olarak karşımıza çıkmaktadır. Programın kullanımında temel olarak iki mantık geliştirilebilir. Bir doğrudan command window kullanılarak yapılmak istenilen işlemlerin gerçekleştirilmesi digger ise şekilde görüldüğü gibi m. files gibi bir dosya kullanılarak MATLAB dilinde hazırlanmış kod ile istenilen işlerin yaptırılması olarak söylenebilir.

Şekil 12.1. Matlab masaüstü

1. İlk olarak command window kullanarak aşağıdaki basit işlemleri yapalım.

3-2 <Enter>

2*3 <Enter>

1/2 <Enter>

Araç çubuğu Adres çubuğu Komut penceresini

küçültmek için

kullanılan undock

(3)

2\1 <Enter>

2. İkinci olarak ise aşağıdaki örnekleri yapalım

2 .* 3 <Enter>

1 ./ 2 <Enter>

2 .ˆ 3 <Enter>

3. Bu örneklerin ilk olarak yapılanlardan farklı olarak *,/ ve ^ operatörlerinden once (.) kullanılmış olmasıdır. Hesap açısından bu işlemler de aynı sonucu üreteceklerdir ancak, daha sonra dizilerin(array) içeriği olan elemanlarla ilgili yapıalacak işlemler konusunda bu işlem şekli daha detaylı irdelenecektir.

4. Aşağıdaki işlemleri yapalım 0/1

<Enter>

1/0

<Enter>

MATLAB yukarıdaki gibi özel durumlarda size sonuç vermektedir. Ikinci durumda sonucu Inf(infinity, sonsuz için kısaltma) olarak vermektedir. Bu işlemi veya sonucunu kullanmak istediğinizde ise sonucu 13+1/0 =13+Inf olarak vererek işlemi devam etmektedir. 0/0 durumunda ise matlab NaN değeri üretecektir. Bu ise Not a Number ifadesinin kısaltılmasıdır.

5. Command Window kullanılarak değişkenlere atama yapılabilir

_ a = 2 <Enter>

Burada a değişkenin ismini tanımlamaktadır. Yukarıdaki satırla a değişkenine bir atama yapılmış olur. Sırasıyla aşağıdaki işlemleri yapalım. Sonuç olarak a değişkeni 90 değerini alacaktır. Her bir işlem ile a değişkeninin değer takrar tekrar değiştirilmiş olacaktır.

a = a + 7 <Enter>

a = a * 10. <Enter>

6. Matlab mühendislikte kullanılabilecek hemen bütün matematik fonksiyonlara sahiptir ve bu fonksiyonlar hemen kullanılabilecek durumdadır. Bunlardan bazıları aşağıda verilmektedir.

Bazı Matematik fonksiyon isimleri abs Absolute value

acos, acosh Inverse cosine and inverse hyperbolic cosine acot, acoth Inverse cotangent and inverse hyperbolic cotangent acsc, acsch Inverse cosecant and inverse hyperbolic cosecant angle Phase angle

asec, asech Inverse secant and inverse hyperbolic secant asin, asinh Inverse sine and inverse hyperbolic sine

atan, atanh Inverse tangent (two quadrant) and inverse hyperbolic tangent

atan2 Inverse tangent (four quadrant)

(4)

bessel Bessel function ceil Round up

conj Complex conjugate

cos, cosh Cosine and hyperbolic cosine cot, coth Cotangent and hyperbolic cotangent csc, csch Cosecant and hyperbolic cosecant erf Error function

exp Exponential

fix Round toward zero floor Round down gamma Gamma function imag Imaginary part log Natural logarithm

log2 Dissect floating point numbers into exponent and mantissa log10 Common logarithm

mod Modulus (signed remainder after division) rat Rational approximation

real Real part

rem Remainder after division round Round toward nearest integer sec, sech Secant and hyperbolic secant sign Signum function

sin, sinh Sine and hyperbolic sine sqrt Square root =-16pt =8pt tan, tanh Tangent and hyperbolic tangent Örnek 1:

sqrt(pi)

<Enter>

bu işlem pi sayısının karekökünü alarak 1.7725 sonucunu üretecektir.

sin(x)işleminde x değişkeninin radyan olarak tanımlanması gerekmektedir. O halde Sin (90o) için aşaıdaki işlemi yapmak gerekmektedir.

sin(90*pi/180) <Enter>

işlem sonucu olarak 1 bulunacaktır

.

Exponansiyel fonksiyon için matlab matlab exp(x) tanımlası yapmaktadır. O halde;

exp(1)

<Enter>

1/exp(1)

<Enter>

işlemleri sırasıyla 2.7183 ve 0.3679 sonuçlarını verecektir.

(5)

C++’da olduğu gibi MATLAB da da değişken isimlendirmeleri belirli kurallara uygun olarak yapılmaktadır. Yukarıda verilen fonksiyon isimlerinin veya pi gibi tanımlanan sabitlere değer ataması yapılması veya değişken olarak tanımlanması karışıklığa neden olabilir. Bunu daha iyi anlamak için aşağıdaki işlemleri yapınız

pi = 4 <Enter>

sqrt(pi) <Enter>

whos <Enter>

  clear pi <Enter>

  whos <Enter>

  sqrt(pi) <Enter>

clear <Enter>

whos <Enter>

7. Yukarıdaki fonksiyonlara ek olarak Matlab’da genel maksatlı kullanılabilecek date ve calendar gibi birçok fonksiyonda bulunmaktadır.

date <Enter>

calendar<Enter>

8. Fonksiyonlara ek olarak Matlab’da genel maksatlı kullanılabilecek clc ve help gibi birçok komut bulunmaktadır.

clc <Enter>

help <Enter>

burada ifade edilen help komutu matlab da çalışırken oldukça ihtiyaç duyulabilecek bir komuttur. Ne işe yaradığı veya nasıl kullanılacağı öğrenmek istenen bir komut yada fonksiyon için command window’unda aşağıdaki şekilde help komutunu kullanmakla sonuca ulaşılabilir.

help real <Enter>

9. Matlabda her değişken bir dizi mantığıyla tanımlanmaktadır. Bir skaler dahi olsa matlab tanımlanan değişken için 1x1 boyutunda bir dizi tanımlaması yapar. Matlab ayrıca dizileri (array) kullanarak vektör yada matris tanımlaması yapabilir.

x=1:10 <Enter>

x =

0 1 2 3 4 5 6 7 8 9 10 size (x) <Enter>

length (x) <Enter>

y = 2 * x <Enter>

y = 0 2 4 6 8 10 12 14 16 18 20

(6)

>> y = 2 .* x

y = 0 2 4 6 8 10 12 14 16 18 20

w = y / x <Enter>

y = 2

w = y ./ x <Enter>

w =

NaN 2 2 2 2 2 2 2 2 2 2

Aşağıdaki satırlar kullanılarak, şimdiye kadar öğrenilen bazı özellikler kullanırlarak veriler elde edilebilir ve bunların grafikleri aşağıdaki gibi çizilebilir.

x = 0 : 0.1 : 10; <Enter>

z = sin(x); <Enter>

plot(x,z), grid <Enter>

z değişkeninin herhangi bir elemanını kullanmak veyahut görmek için aşağıdaki formda tanımlama yapmak yeterli olacaktır. Burada (z) 1x101 boyutunda bir dizi olduğundan 66 elemanını aşağıdaki şekilde ifade etmek mümkün olacaktır.

x(66) <Enter>

ans = 0.2151

Burada x ve z her ikisi de 1x101 boyutunda iki vektördür. Bunlardan x in transpozunu alarak z ile çarpılması durumunda 101x101 boyutunda yeni bir matris elde edilmiş olacaktır.

M = x' * s;

<Enter>

Yeni oluşturulan matrisin herhangi bir elemanı ise artık aşağıdaki şekilde çağrılabilir.

M(44,33)

<Enter>

Matematik fonksiyonların grafiklerinin çizdirilmesi isteniyorsa aşağıdaki formda plot

fonksiyonu kullanılabilir

(7)

ezplot('tan(x)')

<Enter>

y = 0 : 0.2 : 10

<Enter>

ezplot('x^2 + 3y')

<Enter>

10. MATLAB herhangi bir komut yada fonksiyonun bir kaç harfi girildikten sonra TAB tuşuna basılması durumunda girilen harflerle başlayan bütün komutlar ekranda çıkacaktır.

Şekil 12.2. Matlab masaüstü

11. Lineer denklem sistemlerinin çözümü mühendislikte çok önemli ve sıklıkla kullanılan bir konudur. Örnek olarak aşağıda verilen iki bilinmeyenli iki denklem sisteminden bilinmeyenler farklı şekilde elde edilebilir.

x

1

+ 2x

2

= 4, 2x

1

– x

2

= 3.

(a) Matris yaklaşım (Cramer Kuralı uygulamasına benzer şekilde) _ a = [1 2; 2 -1]; <Enter>

_ b = [4; 3]; <Enter>

_ x = a\b <Enter>

Sonuç x = 2 1 I

_ x + 2*y % degerler yerine koyulursa sonuc = 4 <Enter>

_ 2*x - y % degerler yerine koyulursa sonuc = 3 <Enter>

% sembolü burada açıklama girebilmek için kullanılmıştır. Program bu satırda %

operatüründen sonraki bütün yazılanları açıklama olarak değerlendirir.

(8)

Daha geniş örnekler için command window’a demo girerek internet explorer yardımıyla birçok örnek izlenebilir

12. Matlab çok iyi tasarlanmış bir yardımcı sisteme sahiptir. Command window kullanarak herhangi bir komut için help komutu help elfun şeklinde kullanılabilir. Bu ifadenin yazılmasıyla matlab da kullanılan bütün temel matematik fonksiyonların ekrana basılması sağlanabilir. Ekrandan seçilecek herhangi bir fonksiyon için ise detaylar incelenebilir.

Bu maksatla kullanılacak bir diğer komut ise lookfor komutudur. Bu komut sayesinde bütün yardımcı dosyalar içerisinde geçen bir kelime aranabilir. lookfor eigenvalue bu sayede eigenvalue ile ilgili olarak tanımlanmış bütün fonksiyonlar command windowa getirilmiş olacaktır.

13. Matlab daha bir çok farklı araca sahiptir. Örnek olarak 10x10 boyutunda bir sihirli kare magic(10), bu sayede belirli bir mantıkla üretilmiş (genelde nxn için bir satın ve sütün n(n2 + 1)/2 nin toplamı ile ilişkilendirilmiş şekilde hazırlanır).

Üretilen bu değerleri kullanarak bir contour çizmek mümkündür bu maksatla contour(magic(22)) komutuyla 22x22 boyutundaki matris elemanları kullarak bir kontur hazırlanamış olur.

14. Örnek olması maksadıyla matematik ifadeler yardımıyla bir meksika şapkası çizebilmek dahi mümkündür.

>> [x y ] = meshgrid(-8 : 0.5 : 8); <Enter>

>> r = sqrt(x.ˆ2 + y.ˆ2) + eps; <Enter>

>> z = sin(r) ./ r; <Enter>

>> mesh(z); <Enter>

Aynı veri için farklı çizim fonksiyonlarını kullanarak aradaki farkları görünüz surf(z) (yüzeyleri dolgulu olarak çizecektir)

surfc(z) (planda yüzeyin izdüşümlerini gösterecektir)

meshc(z) (mesh den farklı olarak izdüşümler planda görülür) Bazı durumlarda bu fonksiyonları ekstra özelliklerle birlikte kullanmakta mümkündür.

Aşağıdaki formatta, çizilen yüzeyde kenarların gölgelendirilmesi işlemi gerçekleştirilmiş olacaktır.

>>

surf(z), shading flat <Enter>

(9)

Şekil 12.3. Meksika şapkası

15. Bilgisayarınızın hoparlöre sahip ise aşağıdakileri deneyebilirsiniz.

>> load handel <Enter>

>> sound(y,Fs) <Enter>

Benzer şekilde load ile birlikte aşağıdakileri de deneyin ancak her defasında sound(y,Fs) yazmayı unutmayın.

16. Uzaydan dünya görünümü:

>> load earth <Enter>

>> image(X); colormap(map) <Enter>

>> axis image <Enter>

17. Eğer gerçekten sıkıldıysanız bunu why komutunu deneyebilirisiniz why ve why(2) ve bunun gibi değerleri değiştirerek command window’a girin. Komutları Türkçeleştirmek ve fonksiyonun nasıl çalıştığını görmek için

>> edit why <Enter>

12.2. Matlab Masaüstü

Matlab programının arayüzü veya digger ifadeyle MATLAB masaüstü şekil 12.1 de

daha once verilmişti. Bu ara yüzü sayesinde program oldukça kullanışlı bir arayüz

sunmaktadır: bu sayede komutları rahatlıkla girmek, ve geçmiş komutları takip etmek,

değişkenleri takip etmek ve bunun gibi daha birçok eylem kolaylıkla

gerçekleştirilebilimektedir. Daha once de ifade edildiği gibi yine bu ara yüz sayesinde

(10)

help kamutu, yada lookfor komutu kullanılarak, MATLAB’I derinlemesine anlamak ve ilgili örneklere ulaşmak da mümkün olabilmektedir.

Help dosyalarına iki yolla ulaşmak mümkündür bunlardan ilki daha once de gösterildiği üzere doğrudan help komutu ile aranan komutu komut ekranında yazmak diğeri ise, menu çubuğunda help menüsünü seçmektir.

Bununla birlikte MATLAB masaüstü Current Directory isimli windows gezginine benzer işlevleri olan ve sol tarafta sürekli çalışılan klasörü içerisindeki dosylarla bilirlikte gösteren bir menüye sahiptir. Bu yolla istenilen dosyaya arayüzden çıkmadan ulaşmak mümkün olabilmektedir. Yapılan işlemlerin sonuçlarını ve değişken atamaları sonucunda depolanan değerlerin saklı tutulduğu workspace menüsü ise varsayılan olarak command window’un hemen sağında bulunmaktadır. Workspace’in hemen altında ise bütün komut geçmişini gösteren command history menüsü bulunmaktadır ki komutlarınızı geçmişe dönük olarak buradan takip etmek mümküdür.

12.3. Örnek Program

Matlab komut penceresi vasıtasıyla girilecek komutlarla işlem yapmak konusunda bir kaç örnek gösterilmişti. Oysaki bu tür programlar kullanılarak bir kaç satırda çözülmeyecek problemler için uzun işlemler yapmak dolayısıyla da uzun kodlar hazırlamak gerekir. Bu nedenle komut pencerisi kullanılarak bu işlemlerin yapılması pekte kolay olmamaktadır.

MATLAB ifadeleri kullanılarak bir problem için hazırlanacak sıralı kodlara daha once C++ da olduğu gibi program kodu yada doğrudan program denilebilir. Çünkü C++’dan farklı olarak matlab hazırladığınız bu ifadeleri derlemeden ancak kendi arayüzü ile birlikte kullanmanıza izin vermektedir.

Varsayalım 0- 6π aralığında e

0.2x

sin (x) periyodik dalga denkleminin grafiğininin elde edilmesi istenmektedir. Bu problemin çözümünde command window kullanılarak bir kaç ifadeyle sonuca ılaşmak mümkün olduğu gibi, bu ifadelerin birlikte kullanıldığı kısa bir program hazırlayarak çözüme ulaşmak da mümkündür.

İlk olarak aşağıda verilen satırları komut penceresi kullanarak ekrandan girin.

x = 0 : pi/20 : 6 * pi;

plot(x, exp(-0.2*x) .* sin(x), 'r'),grid

Aynı işlemi File -> New -> M-file youlunu izleyerek açılacak olan m.files (script diye

de isimlendirilir) içerisine yazdığınız kodu girerek de yapabilirsiniz. Bunun için ise

aynı aralıkta değişken için aşağıda verildiği gibi üç farklı grafik çizdirelim. Kodu düzgün

şekilde yazdıktan sonra dosyayı kaydetmek ve uygun şekilde çalıştırmaktır. Çalıştırma

işlemi iki şekilde yapılabilir. Bunlardan ilki m.files editöründe imleci kullanılarak

program koşturulabileceği gibi, doğrudan programa verilen isim command window’a

yazılarak da bu işlem gerçekleştirilebilir.

(11)

x = 0 : pi/20 : 6 * pi;%x’in 0-6π aralığında π/20 artımla değerler almasını sağlar figure (1); %1. Grafik penceresini açar

plot(x, exp(-0.2*x) .* sin(x), 'r'),grid

%değerleri yatayda x düşeyde ise e

0.2x

sin (x) olan (‘r’ red) kırmızı çizgi ile grafiği çizer figure (2);

plot(x, exp(-0.2*x) .* cos(x), 'm'),grid figure (3);

plot(x, exp(-0.2*x) .* tan(x), 'b'),grid

Şekil 12.4. Figure 1’in görünümü

Aynı kodu command window’a satır satır girmekte mümkündür. Herhangi bir satırı bitirdiğinizde satırın bittiğini ve bir sonraki satıra geçildiğini gösterir (;) kayoabilir veyahut shift+enter tuşlarına basarak bir alt satırdan devam edebilirsiniz. C++’da olduğu gibi burada da (;) satırın bittiğini göstermekle birlikte, koyulmaması “eğer satır bu noktada enter ile bitirilmişse” hataya neden olmaz. Bu durumda (;) koyulmamış olmaması nedeniyle programın bu satırda yaptığı tüm işlemler command windowda görülecektir. (;) işaretinin olması ile olmaması arasındaki en önemli fark yapılan işlemlerin ekranda görünüp görünmemesi olmaktadır.

Benzer şekilde bir başka program kodu hazırlayalım.

Banka hesabınızda 1000 olduğunu varsayalım. Aylık 1800 maaşınız bu hesaba yattığına ve her ay standart olarak 800 harcamanız olduğuna gore. Yıl sonunda banka hesabınızda ne kadar para olacağını hesaplayan bir program hazırlayın.

As another example, suppose you have saved in the bank. Interest is compounded at the rate of 9 percent per year. What will your bank balance be after one year? Now, if you want to write a MATLAB program to find your new balance, you must be able to do the problem yourself in principle. Even with a relatively simple problem like this, it often helps first to write down a rough structure plan:

hesap_TL = 1000;

ayl_maas = 1800;

harcama=800;

(12)

hesap_12ay = hesap_TL + 12*(ayl_maas-harcama);

disp( ’12 ay sonunda hesabınızdaki para:’ );

disp( hesap_12ay );

Bu program kodunu daha esnek hazırlamak da mümkündür. Örneğin kullanıcıya bağlı olarak ayın gelirin ve harcamanın girildiği bir kod hazırlayalım

hesap_TL = input('hesabınızdaki parayı girin :');

ayl_maas = input('Aylık Maasınızı girin :');

harcama = input('Aylık Harcamanızı girin :');

hesap_12ay = hesap_TL + 12*(ayl_maas-harcama);

disp( '12 ay sonunda hesabınızda para:' );

disp( hesap_12ay );

** yazılan bu kodun olduğu dosya kaydedilip kapatıldığında kodun command window’a getirilerek incelenmesi mümkün olduğu gibi doğrudan command windowdan çağrılarak dosyanın açılması da mümkündür. Bu dosyalardan en sonuncusuna aylk_hesap.m ismi verildiğine gore aşağıdaki komutları command window’u kullanarak deneyin.

type aylk_hesap <enter>

edit aylk_hesap <enter>

Matlab da C++ gibi değişken isimlendirmede belirli kuralları olan bir yazılımdır. Bununla beraber değişkenlerin isimlendirilmesinde olduğu gibi dosya isimlendirmelerinde de aynı kurallar geçerlidir.

Örneğin sayı ile başlayan bir dosya ismi veremeyeceğiniz gibi ( _ ) dışında özel karakter de kullanmamalısınız. Bu isimlendirmeler ileride daha detaylı açıklanacaktır.

Herhangi bir script (m dosyası) çalıştırıldığında Matlab mevcut çalışma klasörünün içerisinde o script’i arar. Çalışırken hangi klasörde olduğunuzu ve dosyanın çalıştığınız kalasösürün içerisinde olup olmadığını MATLAB masaüstünden sizde control edebilirsiniz. Bunun için solda bulunan Current Directory’i control etmeniz yeterli olacaktır. Burada bulunan menüler yardımıyla çalışılan klasör değiştirilebileceği gibi, command window kullarak da değiştirlebilir.

Bunun için cd komutunu kullanabilirsiniz örnek olarak cd A % A gidilmek istenen klasör ismi

cd .. % bu komut ile bir önceki klasöre geri dönülür

cd komutu tek başına kullanıldığında o an bulunduğunuz dosyanın adresini geri

döndürür.

(13)

BÖLÜM -13-

Matlab Temel Kavramlar

(14)

13. Matlab’Temel Kavramlar

13.1. Temel Kavramlar

Bu bölümün temel amacı MATLAB programı ile ilgili temel kavramları vermektir. Bu kavramlar aşağıda verilen sırayla aktarılmaktadır.

➤ değişkenler, operatörler ve ifadeler.

➤ diziler, sıralı veriler (arrays, vectör ve matrisler);

➤ Temel girdi ve çıktılar;

➤ döngüler (for);

➤ şartlar (if).

Matlab gerek profesyonel hatta gerekse eğitim döneminde birçok bilimsel ve mühendislik probleminin çözümünde kullanılabilecek çok önemli bir araçtır. bu bölümün son kısmı ile ileriki bölümlerde burada verilen bilgiler ışında yukarıda ifade edilen problemlerin çözümlenmesi için program kodları rahatlıklla hazırlanabilmektedir.

Değişkenler daha önce de ifade edilmeye çalışıldığı üzere, programlamının temel taşlarından biridir. Bu nedenle program tasarlandığında değişken doğru yerde doğru formatta ve doğru zamanlama ile tanımlanmaıdır. C++ olduğu gibi değişkenler doğru isimlendirilmelidir. Bu nedenle değişken isimlendirmede C++’daki kuralların hemen hepsi burada da geçerlidir.

Dğişkenler isimlendirilirken harfler (a-z, A-Z) sayılar (0-9) ve altçizgi ( _ ) kullanılabilir.

Ancak her durumda değişken isimlendirilmesinde bir har ile başlanmalıdır.

Örnek:

r2d2 pay_day (DOĞRU) pay-day 2a name$ _2a(YANLIŞ)

Örnek

: balance, BALANCE ve BaLance üç farklı değişkendir.

C++’da veya diüer tüm programlama kodlarında olduğu gibi Matlab’da değişkenin doğru yerde ve doğru zamanda değer ataması yapılmasını bekler. Diğer bir ifadeyle değişkeni işleme koyulduğu yerden daha önce tanımlamak ve değer ataması yapmak gerekmektedir. Bu değer ataması doğrudan olabileceği gibi bir işlem sonucu da olabilir. Aksi taktirde program

???

Undefined function or variable

mesajını verecek ve kullanılan değişkenin hata mesajının verildiği satıra kadar tanımlanmadığını veya değer atamasının yapılmadığını ifade edecektir.

Matlabda her değişken bir dizi mantığıyla tanımlanmaktadır. Bir skaler dahi olsa matlab

tanımlanan değişken için 1x1 boyutunda bir dizi tanımlaması yapar. C++ dan farklı olarak

değişken tanımlaması için değişken tipinin belirlenmesine gerek yoktur. Özel durumlarda

veyahut ihtiyaç olması durumunda MATLAB da (double xx) gibi değişken tipi tanımlamaları

yapılır aksi takdirde kullanılan her değişken için varsayılan olarak matlab reel sayı tanımlaması

yapar.

(15)

C++’da olduğu gibi MATLAB’da da büyük ve küçük harf ayrı algılanır ve değişken tanımlamalarında kullanıldıklarında ayrı tanımlama yapılmış olur. Bu durum Matlabın hazır fonksiyonları içinde böyledir ve MATLAB fonksiyonları bu nedenle küçük harflerle isimlendirilmiştir. Örneğin MATLA B geometridie kullanılan ∏ için (pi) değişkenini tanımlamıştır ve küçük harfle tanımlanmıştır. Programın her neresinde kullanırsanız kullanın pi değişkeni için alacağı değerler sabittir ve değişmez. Burada ifade edilmesi gereken bir digger husus da pi gibi kullanıcının işini kolaylaştırmak için MATLAB da tanımlanmış çok sayıda sabit ve fonksiyon bulunduğudur. Bu nedenle değişken isimlendirmelerinde bunların tekrar kullanıcı tarafından isimlendirmede kullanılmaması program mantığı için faydalı olacaktır.

13.2. WORKSPACE

MATLAB için önemli temel unsurlardan biri de WORKSPACE dir. Gerek script yardımıyla koşturulan bir program sayesinde kodda tanımlı değişkenlerin aldığı değerleri gerekse de command window kullanılarak yapılan işlemler sonucu elde edilen sonuçları ve değişkenlerdeki değişimleri buradan takip etmek mümkündür.

Workspace de kayıtlı değişkenlerin listesini görmek için who komutu kullanılabilir. Bu sayede o an workspace de kayıtlı değişkenler aşağıdaki örnekte verildiği gibi ekrana basılacaktır.

>> who

Your variables are:

a as harcama hesap_TL ans ayl_maas hesap_12ay x

işlemler sonucu olarak kaydedilmiş ve değer ataması yapılmış tüm değişkenler silinene kadar (clear) workspace alanında kalacaktır. Burada ans ile tanımlanmış olan isehiçbir değişken tanımlaması yapmaksızın yapılan işlemler sonucu elde edilmiş en son işlem sonucunu göstermektedir.

Kayıtlı değişkenlerin boyutlarını ve tiplerini görebilmek için ise whos komutu kullanılbalilir. Bu durumda aşağıdakine benzer şekilde command window’da değişkenlerin boyutlari ve tipleri görülecektir.

>> whos <ENTER>

Name Size Bytes Class Attributes

a 1x1 8 double ans 1x1 8 double as 1x1 8 double ayl_maas 1x1 8 double harcama 1x1 8 double hesap_12ay 1x1 8 double hesap_TL 1x1 8 double x 1x121 968 double

burada herhangi bir değişkenin workspaceden temizlenmesi veyahut diğer bir ifadeyle kaldırılması istendiğinde

clear x <ENTER>

yazmak yeterli olacaktır. Birden fazla değişken silinmek isteniyorsa clear komutundan sonra aynı satırda değişken isimleri arasında birer boşluk bırakılarak bu işlem gerçekleştirilebilir. Tüm workspace’i temizlemek için ise clear komutunu tek başına kullanmak yeterlidir.

(16)

13.2.1. Sıklıkla kullanılan sabitlerin tanımlanması

Matlab kullanılıcıları yazdıkları programlarda sık sık kullandıkları değişlenler için sabit tanımlamaları yapabilirler. Örnek olarak bazı matemetatik ve fiziksel sabitler için her program yazımında sürekli değer ataması yapmak sıkıcı olabilmektedir. Bunun için aşağıdaki gibi sabit tanımlamaları yapılabilir. Bu nedenle bazı sabitler bir script(m.files) dosyasına yazılarak sabitler dosyası oluşturulabilir veya bir sabitler fonksiyon dosyası oluşturularak programa eklenebilir. Fonksiyon yapılması durumunda yazılan kod içerisinde C++ da olduğu gibi bu fonksiyonun çağrılması bütün sabitleri aktif hale getirecektir.

Yalnızca script dosyası halinde bunların tanımlanması durumunda ise her bir matlab oturumunda ilk olarak bu sabit dosyasının çağrılarak koşturulması gerekmektedir. Her iki durum için de birer örnek aşağıda verilmiştir.

sabitlerim.m : (yeni bir m dosyası açılıp bu isimle kaydedilerek içeriği aşağıdaki gibi düzenirse) g = 9.8; % yerçekimi ivmesi (m/s2)

avo = 6.023e23; % Avogadro sayısı

e = 2.718281828459045; % doğal logaritme tabanı

pi_4 = pi / 4; % alan hesaplarında çap ile kullanabilmek için pi/4 bar_to_kP = 101.325; % atmosfer basıncı kiloPascals

matlab oturumu açıldığında sabitlerim dosyası koşturulduğunda (command window’a sabitlerim yazmak yeterli olacaktır). Dosya içerisinde tanımlanmış olan tüm değişkenler artık sabit gibi kullanılabilecektir.

Diğer bir yolda bu sabitleri bir fonksiyon dosyası içerisinde tanımlamaktır. Fonksiyon dosyası da temelde bir script dosyası dır ve .m uzantılı olarak kaydedilir. Ancak yazım şekli örnek olarak aşağıdaki gibidir. Burada dikkat edilmesi gereken husus foksiyonun adı (sabitlerim) ile dosya isminin aynı olması gerekmektedir (sabitlerim.h). Burada belirtilmesi gereken bir diğer husus ise sabitlerim fonksiyonun hiçbir girdiye sahip olmamasıdır. sabitlerim(girdi bölmesi). Bunun nedeni sabitlerim fonksiyonunda tanımlanmış değişkenlerin program içerisinde kullanılması için hiçbir girdiye ihtiyaç duyulmamasıdır. Anlaşılacağı üzere C++ da olduğu gibi Matlab’da da fonksiyonlar belirli girdiler kullanarak sonuç üretmek için tasarlanırlar. Burada verilen örnek özel bir hali kapsamaktadır.

sabitlerim.m dosyası içeriği

function [g, avo, e, pi_4, bar_to_kP] = sabitlerim( ) g = 9.8; % yerçekimi ivmesi (m/s2)

avo = 6.023e23; % Avogadro sayısı

e = 2.718281828459045; % doğal logaritma tabanı

pi_4 = pi / 4; % alan hesaplarında çap ile kullanabilmek için pi/4 bar_to_kP = 101.325; % atmosfer basıncı kiloPascals

end

Yukarıdaki gibi tanımlanmış sabitlerim dosyası herhangi bir program kodu içerisinde kullanılarak sabitlerden faydalanmak mümkündür. Aşağıdaki gibi bir örnek script dosyası hazırlanırsa ikinci satırda olduğu gibi sabitlerim fonksiyonu çağrılarak bütün değişkenleri işlemlerde doğrudan kullanmak mümkündür.

Ornek1.m dosyası içeriği

D = input('Dairenin çapını girin :');

[g, avo, e, pi_4, bar_to_kP] = sabitlerim( );

Alan_daire = pi_4*D^2;

disp( 'Dairenin alanı:' );

(17)

13.3. DİZİLER: vektör ve matrisler

MATLAB ismi MATrix LABoratory kısaltması olarak belirlenmiş olmasından anlaşılacağı gibi, MATLAB her işlemi matris yapılarını kullanarak gerçekleştirmektedir. Bilindiği üzere matrisler eşit sayıda kolon ve sütüna sahip yapılardan oluşmaktadır ve vektörler özel tipte matris elemanlardır. Vektörler ayrıca MATLAB’de list veyahut array olarak da isimlendirilirler.

13.3.1. Vektör tanımlamaları: dışarıdan listeleme tekniği

Aşağıda verilen örnekte de görüleceği üzere, bu şekilde girilecek very girişi ile vektör tanımlaması yapılabilir.

1.5 kolondan oluşan bir x satır vektörü aşağıdaki gibi tanımlanabilir.

x = [1 3 0 -1 5]

2. MATLAB’ın bu vektörü size tekrar göstermesini istiyorsanız disp(x) komutunu kullanabilirsiniz.

3. daha once de ifade edildiği gibi x vektörünün tipi ve boyutunu görmek istiyorsanız whos komutunu kullanabilir veya workspace’den değerleri ve boyutunu görebilirsiniz.

4. Benzer bir vektör tanımlaması boşluk yerine virgülle de yapılabilir:

a = [5,6,7]

5. Ancak bilinmelidir ki iki farklı dizi elemanı arasında mutlaka boşluk veya virgule tanımlanmalıdır.

Aşağıdaki gibi bir tanımla dizi tanımlaması olmayacaktır.

x = [130-15]

Bu tür bir tanımlama size ne verecektir ? uygulayıp görmeniz tavsiye edilir…

6. Bir veya daha çok vektörü yeni bir dizi oluşturmak için kullanabilirsiniz:

a = [1 2 3];

b = [4 5];

c = [a -b];

c vektörünü merak mı ettiniz, görebilmeniz için bu uygulamayı yapmalısınız … 7. Benzer farklı bir uygulama da aşağıda verilmektedir.

8.

a = [1 3 7];

a = [a 0 -1];

8. Aşağıda verilen şekliyle yapılan tanımlamalar boş bir dizi tanımlaması yapar. Diğer bir ifadeyle 0x0 boyutunda içeriği olmayan bir değişken tanımlaması yapmış olunur. Bu değişkene 0 atamak manasına gelmemektedir.

x = [ ]

(18)

13.3.2. Kolon operatörü (:) ile vektör tanımlama

Bir vektör kolon operatörü kullanarak da tanımlanabilir. Aslında şu ana kadar verilen birçok örnekte bu operator yardımıyla tanımlamalar gerçekleştirildi. Örnek olarak

x = 1:10 (birden başlayıp birer birer artan bir vektör tnaımlaması manasındadır);

x = 1:0.5:4 (1 den başlayıp 4 e kadar 0.5 artımla elemanların tanımlanması anlamındadır. Artım değeri burada olduğu gibi ortada tanımlanır.);

x = 10:-1:1 (10 dan başlayıp 1 azalma ile 1 e kadar eleman içeriğinin tanımlanmasını sağlar) x = 1:2:6 (bu tür bir tanımlamada elemanlar 1, 3, 5 olacaktır);

x = 0:-2:-5 (bu tür bir tanımlamada ise elemanlar 0,−2,−4);

x = 1:0 (Boş vektör tanımlaması yapmanın karmaşık bir yolu!).

13.3.3. Linspace komutu

Kolon operatörüne benzer şekilde, linspace komutu da eşit aralıklarla bir vektör tanımlaması için aşağıdaki gibi kullanılabilir.

Örneğin;

linspace(0, pi/2, 10) eşit aralıklar 0 dan π/2’ye kadar 10 adet elemanın oluşturullmasını sağlamaktadır. Kolon operatöründen farklı olarak, linspace komutu ile en üçük ve en büyük değerlerden sonra aralığın kaça bölünmesi gerektiği fonksiyonda tanımlanmıştır.

13.3.4. Vektörün Transpozu

Buraya kadar üretilen tüm vektörler satır vektörü olarak tanımlanmıştır. Bunların her biri bir satıra ve bir yada daha çok sütüna sahiptiler. Kolon vektörü tanımlamak için yapılması gereken tanımlanmış bu vektörlerin transpozunu almak gerekmektedir. Matris işlemler sırasında da bazen matrislerin satırlarını sütun yapmak gerekebilir. Bu işlemi gerçekleştirebilmek için, diğer bir ifadeyle herhangi bir matrisin transpozunu alabilmek için yapılması gereken apostrophe (’) operatörünü kullanmaktır.

Örnek olarak x = 1:5 ile kolon operatürünü kullanarak bir x satır vektörü oluşturalım, x’ işlemi ile satırda elemanları olan vektörün transpozunu almış oluruz.

Diğer bir tanımlama şeklide aşağıdaki gibidir. Bu sayede satırda girilen elemanlar sütuna çevrilmiş olacaktır

y = [1 4 8 0 -1]’

Bu vektörlerden herhangi bir elamnın değerini indisleri yardımıyla çağırmak istediğimizde aşağıdaki yolları kullanabilirsiniz.

1. r = rand(1,7)

Bu tür bir giriş işlemi size, 7 sütunu bir satırı olan rastgele verilerle oluşturulmuş bir vektör verecektir.

2. r(3) girişi ile

r. vektörünün 3 üncü elemanını çağırmış olursunuz.

(19)

Bu giriş işlemi ile 2,3 ve 4. Elemanları çağırmış olursunuz.

4. Bu şekildei tanımlamayı kolon operatörü mantığı ile değerlendirin r(1:2:7)?

5. r([1 7 2 6])?

6. istenilen elemanlar boş vektör kullanılarak boşaltılabilir. r([1 7 2]) = [ ] bu sayede 1. 7. ve 2.

Elemanlar boşaltılacak ve vektör boyutu 3 azaltılmış olacaktır.

will remove elements 1, 7 and 2.

13.3.5. MATRİSLER

Matrisler matematikten bilindiği gibi sütün ve satırlardan oluşan vektörlerden ibarettir. Bu nedenle matsiler vektörlerin birleşimyle oluşturulabilirler. O halde vektöreler için geçerli olan her kural matrisler içinde geçerlidir. Aşağıda iki satır vektöründen oluşan bir matris örneği görülmektedir.

a = [1 2 3; 4 5 6]

bu matris tanımlaması ile aşağıdaki formda 2x3 türünde bir matrisleri a = 1 2 3

4 5 6

Vektörlerde olduğu gibi matrisin transpozu da a’şekilinde alınabilir ve sonuç aşağıdaki gibi 3x2 şeklinde bir matris olacaktır.

a = 1 4 2 5 3 6

Bir matris aşağıdaki formda iki kolon vektrörü kullanılarak da türetilebilir. Bunun için ilk olarak kolon operatörü kullanılarak x değişkeni üretililir ve x ler kullanılarak üretilen sin değerleri ile aşağıdaki formda bir matris türetilmiş olur.

x = 0:30:180;

x_sinx = [x’ sin(x*pi/180)’]

sonuç olarak, x_sinx =

0 0

30.0000 0.5000 60.0000 0.8660 90.0000 1.0000 120.0000 0.8660 150.0000 0.5000 180.0000 0.0000

(20)

13.3.6. Çıktıların depolanması

Kes yapıştır tekniği ile yapılan işlemler neticesi olarak command window’a dökğlen sonuçlar alınabileceği gibi, workspace alanine kaydedilen bütün sonuçlarda workspace editörleri vasıtasıyla kaydedilebilir. Bu tür çıktıların alınmasına ilişkin bir diğer yöntem de diary komutudur ki kullanıldığında command windowda dökümü verilen herşey bu komutla çalıştığınız klasörün içerisinde otamatik olarak oluşturulacak diary dosyası içerisine kaydedilecektir. Bu kayıt işleminin sona erdirilmesi için ise diary off komutunun kullanılması gerekmektedir. Aşağıdaki uygulama ile bu komutun nasıl kullanıldığını anlayabilirsiniz.

diary;

hesap_TL = 1000 ayl_maas = 1800 harcama=800

hesap_12ay = hesap_TL + 12*(ayl_maas-harcama);

disp( '12 ay sonunda hesaptaki para: "hesap_12ay"') disp( hesap_12ay );

diary off;

13.4. Operatörler, İfadeler ve Tanımlamalar

Her program kendi mantığı içerisinde değişkenleri kullanarak belirli ifadeler oluştururlar, örnek olarak hız (u) zaman(t) ve yerçekimi ivmeleri değişkenleri kullanarak (t) zamanında kaydedilen yol için fizik prensipleri kullanılarak *, - , / .^ operatörleri yardımıyla (u*t - g/2*t.ˆ2 ) ifadesi elde edilebilir. Tanımlama veya atama işlemi ise ifadelerin ürettikleri sonucun yine belirli bir operator yardımıyla başka bir değişkende saklanması işlemi ile gerçekleştirilir.

X= u*t - g/2*t.ˆ2

13.4.1. Sayılar

Matlab’da sayılar aşağıda verildiği gibi ondalık formatta (.) ile ayrılmak suretiyle tanımlanır. Burada hatırlanması gereken önemli bir husus ondalık ayracının alışkın olduğumuz şekliyle (,) değil nokta olmasıdır. Sayı tanımlamalarına örnek olarak 1.2345 -123 .0001 verilebilir.

Matlabda buna ek olarak diğer bilinen formatlar da kullanılabilir. Örneğin 1.2345×109bilimsel sayı formatı (scientific notation) matlabda 1.2345e9 olarak tanımlanabilir. Burada e ile ayrılan iki kısımdan bahsetmek mümkündür. Sayının ilk kısmı 1.2345 (mentissa) ondalık formatta girilebiliecek işaretli bir reel sayıdır ikinci kısım ise üstel ifadeyi içermekte ve integer formatta işaretli (signed) veya işaretsiz (unsigned) tanımlanabilmektedir. Burada ifade edilmesi gereken bir diğer ifade ise (e) nin (E) olarak ta kullanılabileceğidir. Aşağıdaki örnekler doğrudur doğrudur.

1.2345×109 ==1.2345*10ˆ9

1.2345×109 == 1.2345e9 == == 1.2345E9

Benzer bilimsel tanımlama sayların çok küçük olduğu durumlarda da kullanılabilir.

0.000000001 == 1e-9

(21)

Sayıların çok küçük veyahut çok büyük olmaları durumunda bilimsel tanımlama oldukça kullanışlı bir yol olmaktadır. Bu sayede sayıların tanımlamasında hata yapma olasılığı azalmaktadır. Matlab’da iki reel sayı arasındaki en küçük farkı eps komutunun kullanarak öğrenebilirsiniz. Her işletim sistemi için ve bilgisyar teknik özelliklerine gore bu sayılar değişiklik gösterebilmekle birlikte, bu günlerde yaygın olarak kullanılan sistemler için dikkate alınan en küçük fark diğer bir ifadeyle rölatif doğruluk;

>> eps ans =

2.2204e-016

seklindedir. Diğer taraftan matlabın yine yukarıda ifade edildiği gibi sistemden sisteme değişebilmekle birlikte bugün için yaygın olarak kullanılan sistemler için tanımlayabileceği en büyük ve en küçük sayılar ise realmin ve realmax komutlarıyla öğrenilebilir. Bu sayılar 10308

~

10+308aralığındadır.

13.4.2. Data Tipleri

MATLAB da toplam 14 adet temel data tipi bulunmaktadır. Daha öncede ifade edildiği üzere varsayılan olarak girilen her değişken double tipinde olduğu kabul edilir. Özel bir tanımlama yapmak gerektiğinde yalnızca o değişken için seçilen tipi belirtmek gerekir. Data tipleri C++ da tanımlandığı gibi aynı isimlerle burada da kullanılabilir. Daha geniş bilgi için help komutundan faydalanarak dat tipleri konusunda bilgi alınabilir. C++ da olduğu gibi MATLAB ayrıca işaretli (signed) ve işaretsiz (unsigned) data tiplerini de tanımlayabilmektedir. Integer tipinde bir işaretli işaretsiz ve

MATLAB has 14 fundamental data types (or classes). The default numeric data type is double- precision; all MATLAB computations are done in double-precision. More information on data types can be found in the Help index. MATLAB also supports signed and unsigned integer types and single- precision floating point, by means of functions such as int8, uint8, single, etc.

a = magic(4);

b = single(a);

whos

Name Size Bytes Class

a 4x4 128 double array b 4x4 64 single array

(22)

13.4.3. Arithmetic operators

İfadelerin işlem görmelerinde tüm matematik işlemler gibi MATLAB’da aritmetik operatörleri kullanmaktadır. Aşağıdaki tabloda genel manada bilinen kullanım şekilleri ile (Algebric form) Matlab da kullanım şekilleri karşılaştırmalı olarak verilmektedir. Operatörler bu örneklerde a ve b gibi iki verinin işlenmesini sağlamaktadırlar. Burada genel bilinenlerden farklı olarak yalnızca (\) sola bölüm oparatörü bulunmaktadır. Tablodan da anlaşılabileceği gibi 1/3 ve 3\1 aynı ifadenin farklı yazılış şekilleridir.

Halbuki bu operator matris işlemlerde kullanıldığında oldukça farklı bir anlam ifade etmektedir. Daha öncede ifade edildiği üzere lineer denklem sistemlerin çözümünde doğrudan kullanılmakta ve bilinmeyenlerin elde edilmesini sağlamaktadır.

13.4.4. Operatörlerin Önceliği

Bir ifade içerisinde birden fazla operator aynı anda kullanarak ifadeler yazılırlar. Bu nedenle tüm matematik işlemlerde olduğu gibi ifadeler içerisinde de işlem görmede operatörlerin bir öncelik sırası bulunmaktadır. Örneğin g * t ˆ 2. ifadesinde iki farklı operatörün farklı sırayla işlem görmesi farklı iki sonucun çıkmasına neden olur. Bu nedenle MATLAB hangi operatörün ilk sırada işlem göreceği konusunda belirli kurallara sahiptir. Operatörlerin önceliklerine ilişkin tablo aşağıda verilmektedir.

Matematik işlemlerde olduğu gibi paratezler her durumda ilk önceliğe sahip operatörlerdir. Burada parantezler konusunda önemli bir farklılığı da hatırlamak gerekir, ( ) parantezler işlem önceliğini veyahut bir matrisin elemanını ifade etmede kullanılırken, köşeli parantezler [ ] bir vektör veya matris oluşturmak için kullanılmaktadır. Belirtilmesi gereken bir diğer önemli husus ise aynı önceliğe sahip operatörler için işlem önceliği soldan saga doğru tanımlanacaktır.

Çok yaygın şekilde kullanılan operatörlerin işlem önceliklerine ilişkin tablo aşağıda verilmektedir.

(23)

13.4.5. Kolon operatörü ve (.) operatörü

Kolon operatüre + operatöründen daha düşük bir önceliğe sahiptir bun nedenle 1+1:5 işleminde ilk olarak toplama işlemi gerçekleştirilir daha sonra kolon operatörü işlem görür. Bu nedenle çıktı, 2, 3, 4, 5 olacaktır.

Kolon operatörü aşağıdaki formda kullanılması durumda, ilk olarak parantez içerisinde vektör oluşturulur daha sonra ise her bir elemana 1 eklenerek çözüm gerçekleştirilir.

1+[1:5]

Bu sayede görülmektedir, köşeli parantez kullanımıyla işlem önceliği sağlanarak oluşturulan vektöre dizi işlemi yapılarak her bir eleman bir arttırılmaktadır. Daha once de ifade edildiği üzere, aritmetik operatörler aşağıdaki tabloda verildiği formda (.) ile birlikte kullandıklarında dizilerde eleman eleman işlem görmelerini sağlarlar, bu sayede bir dizinin herhangi bir elemanı ile aynı sütün ve satırdaki diğer bir dizinin elemanı ile skaler olarak işleme tabi tutulabilirler.

13.4.6. Transpoz Operatörü

Transpoz operatörü parantezler dışarıda bırakıldığında en yüksek önceliğe sahip operatördür. Bunu anlamak için aşağıdaki işlemi gerçekleştirilem,

(24)

1:5’

Köşeli parantez ile birlikte kullanıldığında ise aynı örnek sütün matrisinin oluşmasını sağlayacaktır.:

[1:5]’

13.4.7. Dizilerde aritmetik işlemler

Aşağıda verilen işlemleri deneyiniz:

a = [2 4 8];

b = [3 2 2];

a .* b a ./ b

Daha once tabloda verildiği üzere MATLAB bilinen 4 işlem operatörüne ek olarak diziler için kullanılan dört adet daha işlem operatörüne sahiptir. Bu operatörler dizilerin ilgili elemanlarını biribirleri ile işleme sokmak için kullanılırlar. Aynı mantıkla işlem gördüklerinden (+) ve (–) operatörleri için bunu yapmaya gerek yoktur.

Bu operatörler çoğu bazen dizi operatörleri olarak veya bire-bir işlem operatörleri olarak isimlendirilirler.

Örnek olarak yukarıdaki a .* b işlemi aşağıda açık şekilde verildiği şekliyle işlem görmektedir.

[a(1)*b(1) a(2)*b(2) a(3)*b(3)]

Benzer şekilde a ./ b işlemide eleman eleman bölüm işlemi gerçekleştirmektedir.

Dizi operatörünü [2 3 4] .ˆ [4 3 1] formunda kullanılması durumunda ise bu sefer, ikinci dizinin ilk elemanı birinci dizinin üstü olarak işem görecektir. Bütün örneklerden de görülebileceği üzere, dizilerin bu şekilde işleme sokulmak istenmeleri durumunda (.) her bir operator için kullanılmalıdır.

Bir skaler ile dizi arasındaki işlemlerde de bu operator aynı şekilde kullanılabilir. Ancak bilinmelidir ki, a bir vektör olmakla birlikte, 3 .* a ile 3 * a arasında bir farklılık bulunmamaktadır. Ancak alışkanlık olması açısından vektörlerin eleman eleman işleme sokuldukları durumda dizi operatörünün yazılmasında fayda bulunmaktadır.

Son olarak MATLAB’da bulunan sum( ) fonksiyonu ile dizi operatörünün birlikte kullanıldığı bir önekle konuyu bitirelim. sum(z) ile z vektörünün elemanları bire bir toplanarak sonuç bulunmaktadır.

Aşağıdaki gibi bir tanımlamada ise a ve b vektörleri eleman eleman çarpılarak çıkacak yeni vektör elemanları toplanmakta ve sonuç 30 olmaktadır.

sum(a .* b)

13.4.8. İfadeler

İfadeler değişkenleri, sayıları, operatörleri ve fonksiyonları içerebilen ve bunların bir işleme tabi tutulduğu yazım şeklidir. Örnek olarak 2π ifadesi aşağıdaki şekilde gösterilebilir.

2 * pi

(25)

ans = 6.2832

Burada bir kez daha hatırlamak gerekir ki MATLAB ans fonksiyonunu en son yapılan işlemin sonucunu tanımlamakta kullanmaktadır. Bu nedenle bir tanımlama işlemi olarak değerlendirilmemelidir.

Herhangi bir ifade (;) ile bitiriliriIirse bu hem o satırnın bittiğinin hemde ekranda gösterilmesine gerek olmadığının bir ifadesidir. Ekranda gösterilmemiş olması sonucun kaydedilmediği manasında gelmemektedir.

13.4.9. Tanımlama (Atamalar)

MATLAB genellikle atama işlemlerini değişken = ifade şeklinde gerçekleştirmektedir. Örneğin s = u * t - g / 2 * t .ˆ 2;

bir atama işlemidir. Eşitliğin sağ tarafında ifade işlem önceliğine gore sonlandırılıp elde edilen sonuç denklemin solundaki değişkene (s) atanmaktadır. (s). Atamalar sürekli bu mantıkla ve bu yönler dikkate alınarak çalıştırılırlar, ifadenin solda değişkenin ise sağda olduğu bir örnek doğru olmayacaktır.

a + b = c (YANLIŞ)

Bir program kodu içerisinde veya MATLAB komut penceresinde, her bir satır, bir ifade olarak dikkate alınmaktadır. Bu nedenle ifadeler, atama olabileceği gibi bir komut yada basit bir işlem içeriği de olabilir.

x = 29; % assignment clear % command pi/2 % expression

Özel durumda bir ifadenin satıra sığmaması durumunda, en az üç nokta kullanılarak ikinci bir satırda ifadenin tanımlanmasına devam edilebilir.

x = 3 * 4 - 8 ...

./ 2 ˆ 2;

Bir satırda birden fazla ifadenin girilmek istenmesi durumunda ifadeler arasında (;) veya (,) kullanılması gerekmektedir.

a = 2; b = 3, c = 4;

Burada not edilmelidir ki (;) ve (,) ifadenin bir parçası değil, yalnızca ayraç olarak kullanılmaktadır. Note that the commas and semicolons are not technically part of the statements; they are separators.

Statements may involve array operations, in which case the variable on the left-hand side may become a vector or matrix.

13.4.10. Formüllerin Vektörleştirilmesi

Dizi operatörleri kullanılarak birçok işlem bir önceki sütün veya satırda bulunan elemanlar kullanılarak yeni sütünlar ve satırlar oluşturulabilir (tablo oluşturma işlemi gibi). Bu MATLAB’da dizi operatörlerinin faydalı olarak kullanılabileceği bir husustur. Örneğinin, (A) gibi bir yatırım (n) yıl için bankada belirli bir faiz oranı (r) ile tutuluyor olsun. Bu sayede Yatırımın getirisi için A(1+r)n formülize edilebilir. Bu mantıkla

(26)

farklı yatırım değerleri için tanımlanmış A vektörüne karşılık olarak getirileri yine bir vektör gibi hesaplanabilir, sonuç olarak elde edilen iki sutünlu matris, yatırım, ve getirileri şeklinde tablolaştırılmış olacaktır.

A = [750 1000 3000 5000 11999];

r = 0.09;

n = 10;

B = A * (1 + r) ˆ n;

disp( [A’ B’] ) Çıktı:

750.00 1775.52 1000.00 2367.36 3000.00 7102.09 5000.00 11836.82 11999.00 28406.00

13.5. Çıktılar

Temel olarak MATLAB’da basit manada iki farklı çıktı türü tanımlamak mümkündür:

1. (;) olmaksızın herhangi bir ifadeyi bir satırda ifade etmekle bunun sonucunun ekranda gösterilmesi sağlanmış olur;

2. diğer taraftan istenilen bir değişken veya ifade de disp komutu ile gösterilebilir. Örneğin disp(x).

13.5.1. disp

Nümerik bir değişkenin gösterilmesi için genel manada bu komutun kullanılması aşağıdaki gibidir.

disp( degisken adı )

Bu şekilde bir tanımlada değişkenin ismi değil yalnızca değişkene atanmış değer gösterilecektir. Bu sayade yalnızca ekranda değer görülecektir. Herhangi bir textin ekrana bastırılmak istenmesi durumunda ise format

disp( ’Daha once söylendiği gibi ’’MATLAB sınırlarnızı zorlar’’ ’ );

Bir satır içerisinde hem texti hemde değişkeni göstermek istemeniz durumunda ise bu format, aşağıdaki gibi kullanılmalıdır.

x = 2;

disp( [’Çözüm : ’, num2str(x)] );

Bu durumda çıktı Çözüm : 2 Olacaktır.

Daha öncede ifade edildiği üzere MATLAB her değişkeni dizi mantığı ile tanımlamaktadır. Burada da

(27)

çevrilerek dizinin ikinci elemanına atanmış olur, bu sayede iki elemanı da string olan bu dizi disp komutu ile ekrana bastırılır.

disp( [x y z] )

Yukarıdaki gibi bir tanımlamada, x,y ve z den oluşan vektör olduğu gibi ekrana basılacaktır. Bazı durumlarda çok büyük matrislerin ekranda adım adım gösterilmesi gerekebilir, bunun için

more on

komtunun kullanılmasıyla çıktıyı adım adım kontrol etmek mükün olacaktır. Bu komutu denemek için more komutu kullanıldıktan sonra aşağıdaki gelişigüzel oluşturulmuş matrisi gözlemleyin.

rand(100,7).

*** Ctrl+Break veya Ctrl+C ile işlemi istediğiniz yerde kesebilirsiniz

Matlab sayıların ekrana basılmasında aşağıda verilen temel iki kuralı kullanmaktadır,

1. Genel olarak doğal sayıların tümünü ekranda göstermek eğiliminde olsada, çok büyük sayıları toplamda 5 adet digit kullanarak bilimsel formatta göstermektedir. Örneğin 1234567890 sayısı MATLAB’da 1.2346e+009 şeklinde gösterilecektir. Varsayılan olarak 9 haneye kadar normal formatta gösterilen sayılar 10 hane ve üstü için otamatik olarak bilimsel formata dönüştürülür. Bu şekilde ekrana basılmasını istenmiyorsa,

format

Komutu kullanılarak bu özellik kabatılabilir.

2. Reel sayılar ise ilk 5 adet digitleri kullanılarak ekrana basılırlar. Sayı 0.001<x ≤1000 aralığında olması durumunda normal formmatta, bu sınırlar dışında ise bilimsel formatta gösterilir.

Diğer örneğe benzer şekilde herhangi bir tipi formatlayarak bu gösterimin değişimini saplayabilirsiniz.

Bilimsel formatta gösterilen bir sayının normal görünümünü istemeniz durumda, boyutu önemli olmaksızın aşağıdaki komut kullanılarak bilimsel gösterim kapatılabilir. Bunu tekrar kullanmanız durumunda ise işlem tersine dönmüş olacaktır.

format short e

Çıktıda daha hassas olarak sonuçların görülmesi isteniyorsa aşağıdaki farklı formatlar aktif gale getirilebilir, aşağıdaki örnekleri deneyin,

format <enter>

12345678900000000000000000000000000000<enter>

1.2346e+037

format short e <enter>

12345678900000000000000000000000000000<enter>

1.2346e+037

format long e <enter>

12345678900000000000000000000000000000<enter>

(28)

1.234567890000000e+037

format long g <enter> % matlab kaç digit göstereceğine kendi karar verir 12345678900000000000000000000000000000<enter>

1.23456789e+037

***Daha fazla bilgi için help format okunabilir.

Aşağıdaki komutları giriniz, format compact <enter>

x = [1e3 1 1e-4] <enter>

x = 1.0e+003 *

1.0000 0.0010 0.0000

Görüleceği üzere MATLAB bu şekilde bir tanımlamada dizinin elemanları için ortak bir çarpan belirlemekte ve bunu 1.0e+003 * olarak yazmaktadır.

Bu şekilde çarpan gösterilmek istenmiyorsa formatın format bank veya format short e olarak ayarlanması yeterli olacaktır. :

format bank x <enter>

x = 1000.00 1.00 0.00 format short e <enter>

x <enter>

x = 1.0000e+003 1.0000e+000 1.0000e-004

13.6. for döngüsü

Bu noktaya kadar dataların nasıl oluşturlacağı, nasıl işleneceği ve sonuçların nasıl elde edilip değerlendirileceği konusunda işlemler gerçekleştirildi. Bu başlıkta MATLAB’da tekrarlanması gereken işlemlerin nasıl işleneceği diğer bir ifadeyle döngüler konusunda bilgi verilmeye çalışılacaktır. Bu maksatla for yapısı bu başlıkta irdelenmektedir. İlk olarak for yapısı konusunda basit örnekler üzerinde durulacak, daha sonrada farklı kullanım şekilleri ifade edilmeye çalışılacaktır. İlk olarak döngünün nasıl çalıştığını anlayabilmek için aşağıdaki örnekleri gerçekleştirin. (formatı compact olarak ayarlarsanız sonuçları daha net görme şansımız olabilir)

for i = 1:5, disp(i), end for i = 1:1, disp(i), end for i = 1:0, disp(i), end

Buradan da görülebileceği gibi döngü ilk tanımlama için 5 defa tekrarlarken ikincisinde bir kere, son olarak ise işlem görmeksizin tamamlandı.

(29)

Örnek: karekök problemi için Newton metodu,

Herhangi bir pozitif x sayısının karekökü Newton metodu kullanılarak aritmetik işlemler sayesinde sonuca ulaşılabilir. Bu yöntem iterativ bir metottur ve aşağıdaki akış kodu ile ifade edildiği gibi gerçekleştirilebilir.

Akış kodu:

BAŞLA

1. Karekökü alınacak pozitif sayıyı belirleyin a 2. sayının yarısını x’ e atayın x=a/2

3. Kaç tekrarda karekök değerine ulaşılmak istediğini belirleyin (say) Her bir adımda atamasını yapın x =(x + a/x)/2

x I gösterin BİTİR

a = input('karekökü alınacak sayısı girin :');

x = a/2;

b = input('iterasyonun tekrar sayısını girin :');

disp(['Bu adımda (a) degeri = ', num2str(a)]) for i = 1:b

x = (x + a / x) / 2;

disp([num2str(i), ' adımda a degeri = ', num2str(x)]) end disp( 'matlabın hesapladıgı deger')

disp( sqrt(a) )

çıktı formatını format long olarak ayarlarsanız çıktı a=6 tekrar sayısı 5 için

>> format long

karekökü alınacak sayısı girin :6 iterasyonun tekrar sayısını girin :5 Bu adımda (a) degeri = 6

1 adımda a degeri = 2.5 2 adımda a degeri = 2.45 3 adımda a degeri = 2.4495 4 adımda a degeri = 2.4495 5 adımda a degeri = 2.4495 matlabın hesapladıgı deger 2.449489742783178

Örnek: Faktöriyel problemi,

Herhangi bir pozitif sayının faktöriyelinin hesaplanması n!

n! = 1 × 2 × 3 × . . . × (n − 1) × n.

basit bir şekilde kod aşağıdaki şekilde hazırlanabilir, n = 10;

fact = 1;

for k = 1:n fact = k * fact;

(30)

disp( [k fact] ) end

Benzer şekilde örnek aşağıdaki şekilde daha complex bir şekilde de hazırlanabilir.

n = input('faktöriyeli aranan sayısı girin :');

fact=1 ;

disp(['Bu adımda (a) degeri = ', num2str(a)]) for k = 1:n

fact = k * fact;

disp( [num2str(k), '. adımda = ', num2str(k), ' faktöriyel :' num2str(fact)] )

enddisp( 'sonuç aranan deger') disp(fact)

genel olarak for döngüsü temel yapısı aşağıdaki şekilde tanımlanabilir. Bu kalıp program kodu içerisinde bu yapıda kullanılabilir. Komut penceeresi için bu formda kullanılamaz.

for index = j:k ifade

end veya

for index = j:m:k ifade

end

komut penceresinde de kullanabilien tek satırda yazım şekliyle for k = ilk:artım:son

for döngüleri tanımlanabilir

Aşağıdaki husuların iyi anlaşılması gerekmektedir.

1. j:k kolon vektörü yardımıyla elemanları j, j + 1, j + 2, . . . , k olan bir vektör tanımlamasıdır.

2. j:m:k kolon vektörü yardımıyla elemanları j, j +m, j +2m, . . . , olan bir vektör tanımlamasıdır, ancak son elemanı k dan büyük olamaz (m>0), veya küçük olamaz (m<0).

3. index bir değişken olmalıdır, he bir döngü sonunda, bir sonraki vektör elemanının değerini almaktadır, (j:k veya j:m:k).

for k = ilk:artım:son

düşünüldüğünde bir döngünün kaç defa tekrarlıyacağı (son-ilk) / artım+1 ifadesiniyle bulunabilir.

4. Döngünün sonlanması ile indexsin son değeri oluşturulan vektörün son değeridir. Daha once de ifade edildiği üzere bu yukarıda son ile ifade edilen terim olmak zorunda değildir. Artıma bağlı olarak değişkenlik gösterebilir.

(31)

for döndügüsü bir satır içerisinde kullanılmak istendiğinde aşağıda verilen formatta tanımlanaabilir.

for index = j:k, ifade, end veya

for index = j:m:k, ifade, end Not:

1. Yukarıdaki kullanıldığı şekliyle (,) kullanılması unutulmamalıdır. (;) da gerktiği durumlarda kullanılabilr. Kullanılmaması durumunda MATLAB hata mesajı verecektir.

2. İfadeler birden fazla olabilir, dikkat edilmesi gereken tek husus (,) veya (;) ile ayrı ayrı yazılmaları gereğidir.

3. Döngü sonunda end kullanılmaması durumunda MATLAB sizden enter’a basmanızı bekleyecek ve bu ana kadar hiçbir işlem yapmayacaktır.

for döngüsünün en genel ifade tarzı aşağıdaki gibidir. Bu halde önceden tanımlanmış bir vektör içeriği kullanılmaktadır. Elemanlar her bir döngü için sırasıyla index değerine atanarak döngü işlemi vektörün son elemanına ulaşılıncaya kadar gerçekleştirilir.

for index = v end

bu döngünün çalışma mantığını anlmak için aşağıdaki örnek denebilir.

v=1:4; for index = v, disp(index), end

13.7. Vektörleştirme yoluyla döngü oluşturma

Şu ana kadar birçok uygulamada olduğu gibi bazı problemlerin çözümünde döngü kullanılmak zorunda kalınabilmektedir. Oysaki for döngüsünün kullanıldığı bazı durumlarda işlem zamanı bakımından oldukça büyük zamanlar geçmekte ve program gereğinden fazla sürede son bulabilmektedir. Örnek olarka aşağıdaki işlemi düşünelim;

bu tür bir matematik problemin çözümü için aşağıdaki kod yazılabilir. Bu kod ayrıca döngü esnasında ne kadar sürenin geçtiğini de bize gösterecektir.

t0 = clock;

s = 0;

for n = 1:100000 s = s + n;

end etime(clock, t0)

(32)

clock fonksiyonu elemanları mevcut zamanı ve tarihi gösterecek şekilde toplam 6 elemanlı bir vetkör içeriğine sahiptir. Bunlar sırasıyla yıl, ay, gün, saat, dakika ve saniye olarak sıralanmaktadır.

etime fonksiyonu ise başlangıçta kaydedilen zaman ile bitişte çalıştırılan clock fonksiyonu ile üretilen zaman arasındaki farkı bulabilmek için kullanılmaktadır.

t0 = clock;

n = 1:100000;

s = sum( n );

etime(clock, t0)

Pentium II bir bilgisayar için bu döngü 3.35 saniye içerisinde gerçekleşmektedir. Bilgisayarınız için bu programı deneyip ne sürede işlemin sonlandırıldığını kontrol edebilirsiniz. Burada verilenden 50 kat daha hızlı bir bilgisayar için bu sure 0.06 saniye sürecektir. Benzer şekilde bu süreyi hesaplamanın bir diğer yolu ise tic ve toc fonksiyonlarını kullanmaktır. Bu fonksiyonun kullanılması için aşağıdaki toplam fonksyionuna ait kodu hazırlayacak olursak.

tic s = 0;

for n = 1:100000 s = s + 1/nˆ2;

end toc

Yine bir Pentium II bilgisayar için bu işlemin alacağı sure 6 saniye civarındadır. Tekrar söylemek gerekir ki yeni bir bilgisayarda bu sure çok daha küçük değerler alacaktır. Ancak buradaki maksat döngünün ne denli uzun süreler aldığını göstermektir.

Yukarıdaki toplama işlemi aşağıdaki formda da yapılabilir. Bu sayede işlem tanımlanan n vektörü ve sum fonksyionu yardımıyla gerçekleştirilmektedir.

tic n = 1:100000;

s = sum( 1./n.ˆ2 );

toc

Bu halde program kodu çalıştırılacak olursa, aynı PC için hesaplanan zaman 0.05 saniye değerini almaktadır. Buda aynı işlemin 100 kat daha hızlı yapılması anlamına gelmektedir. Diğer bir ifadeyle uzun zaman alan kodların hazırlanması yerine, en etkili kod hazırlamaya yöntemi olan en çabuk şekilde sonuca ulaşmak hedeflenmelidir. Bu nedenlede for yerine bazen mevcut oluşturulmuş döngüler yardımıyla göngüye benzer işlemler gerçekleştirilebilir.

Örnek:

Burada 9999 terimi olan bir serinin elemanları toplamları verilmektedir. serinin genel terimini bularak program kodu hazırlanacak olursa aşağıdaki kod yardımıyla problem çözülebilir.

(33)

sign = -1;

s = 0;

for n = 1:9999 sign = -sign;

s = s + sign / n;

end

vektörleştirilmiş versiyonu n = 1:2:9999;

s = sum( 1./n - 1./(n+1) )

Diğer örneklerde olduğu gibi bu örnektede for döngü tanımlaması yerine vektörleştirme işşlemi gerçekleştirildiğinde işlem süresi oldukça azalacaktır. Bu nedenle kullanılabildiği ölçüde döngü yerine vektörleştirilmenin tercih edilmesi hazırlanan kodun çok daha kısa sürede sonuca ulaşması anlamına gelecektir. Örneğin, prod(1:n) fonksiyonu yardımıyla n! yazılan programdan çok daha kısa sürede sonuca ulaşacaktır.

for döngü tanımlamalarında yapılan en sık hata döngü tanımlamalarında for yada end in yazılımın unutulmasıdır, bu durumlardan ilkinde MATLAB işlemler esnasında hata mesajı vermeyecektir. end’in yazılmadığı durum daha once de ifade edildiği gibi programın duraksamasına neden olacaktır. Bu nedenle en riskli olanı for ifadesinin unutulmasıdır. Bunu aşağdaki örneği deneyerek görebiliriz.

a = 2;

x = a/2;

i = 1:6 % Burada for yazılmadığından index olarak tasarlanan i artık vektör x = (x + a / x) / 2;

disp( x ) end

(34)

13.8. Mantıksal ifadeler ve Karar verme

C++ olduğu gibi MATLAB’da da mantıksal ifadeler veyahut karar vermeye yönelik olarak birçok yapı mevcuttur. Bunlardan en yaygın olarak kullanılan genel manada if ve switch yapısı burada ifade edilmektedir.

rand fonksiyonu 0–1 arasında değerler üreteceğinden aşağıdaki örnek if yapısını anlamak için iyi bir örnektir.

r = rand

if r > 0.5 disp( ’üretilen sayı büyüktür’ ), end veya daha doğru bir mantıkla aynı problem için

r = rand

if r > 0.5 disp( ’üretilen sayı 0.5’den büyüktür’ ) else disp( ’üretilen sayı 0.5’den küçüktür’ ), end

Burada hatırlamak gerekir ki, C++’da ve bütün programlama dillerinde olduğu gibi mantıksal tanımlamalarda (r<0.5 gibi) program 1 yada 0 sonucu üretir ve koşul (if) yapısı buna gore islem görür yada işlem görmeksizin devam eder. Yazılan koddan da anlaşılacağı üzere mantıksal ifadenin 1 üretmesi diğer bir ifadeyle doğru olması durumunda koşul gerçekleşmiş ve if yapısını takip eden ifadeler işlem görmüş olacaktır.

Bunu daha iyi anlamak için aşağıdaki örnekleri command window’da yazınız ve ürettikleri sonuçları görünüz.

2 > 0 -1 > 0

Bunlardan ilkinde sonuç olarak 1 ikincisinde ise sonuç olarak 0 üretilecektir. Diğer bir ifadeyle birinci mantıksal tanımlama doğru ikincisi ise yanlıştır.

Yukarıdaki örnekte de görüldüğü üzere MATLAB bir karar vermek zorundadır, r nin 0.5 den büyük olup olmadığı kontrol edilmekte ve buna göre ifadeler işlem görmektedir. Burada kullanılan if yapısı, hemen hemen bütün dillerde olduğu gibi MATLAB’da da standart olarak kullanılmaktadır. MATLAB’da bu işlemi tek satırda yapmak mümkün olduğundan genel yapısı aşağıdaki şekilde ifade edilebilir.

if şart ifade, end Not:

1. şartın her durumda mantıksal bir tanımlama ile üretilmesi dolayısıyla da sonuç olarak doğru (1) veya yanlış (0) üretmesi gerekmektedir. Mantıksal ifadelerde kullanılan operatörler aşağıdaki tablıda verilmektedir.

(35)

2. burada verilen yapıda eğer şart doğru sonuç üretirse, ifade işlem görür aksi taktirde işlem gerçeklemez..

3. gerek şart gerekse ifade parantez içerisinde ifade edilebileceği gibi örneklerde görüldüğü üzere parantezsiz de yazılabili.

Aşağıda bazı mantıksal tanımlamaların örnek yazım şekilleri verilmektedir.

bˆ2 < 4*a*c (b2<4ac) x >= 0 (x ≥0)

a ˜= 0 (a ≠0)

bˆ2 == 4*a*c (b2 = 4ac)

Hatırlamak gerekir ki atama operatörü (=) ile denklik kontrol eden (==) operatörü karıştırılmamalıdır.

Bunun için aşağıdaki örnekler yapılabilir;

if x == 0 disp( ’x equals zero’ ), end % DOĞRU if x = 0 disp( ’x equals zero’ ), end % YANLIŞ

13.8.1. if-else Yapısı

İf yapısının bir diğer ve daha yaygın kullanım şekli de if-else yapısıdır. İf yapısından en önemli farkı if içerisinde ifade edilen şartın dışında kalan bütün durumları içine alan şart else yapısı ile temsil edilmektedir. Yapının kullanımı için aşağıdaki örnekleri yapınız.

x = 2;

if x < 0 disp( ’negatif’ ), else disp( ’negatif değil’ ), end

bu işlem if-else yapısının bir satırda kullanıldığı bir örnektir ve if yapısından farklı olarak şartın dışında kalan mantıksal alanı (x>=0) tanımlamaya gerek kalmaksızın else ile bunun gerçekleştirilmesi sağlanmaktadır. Bu halde örnek için sonuç else yapısı işlem görecek ve ekrana ’negatif değil’

basılacaktır.

Referanslar

Benzer Belgeler

Nokta işareti aynı zamanda eleman elemana çarpma ve bölme işleminde de kullanılır.. Bir tek satıra sığmayan ifadelerin bir alttaki satırda devam

Başlangıçta MATLAB özellikle mühendislik alanında, iyi grafik özelliklere sahip daha çok sayısal hesaplamalarda kullanılmak amacı ile geliştirilmiş bir paket programlama

– int(S,a,b),S’in varsayılan sembolik değişkene göre a’dan b’ye kadar belirli integralini alır. – int(S,a,b,v),S’in v’ye göre a’dan b’ye kadar belirli

File &gt; Set Path altında MATLAB fonksiyon yolu değiştirebilirsiniz Farklı bir yolda bulunan klasördeki foksiyon yada program.. çalıştırdığınızda MATLAB yolu

Hücre ve yapı dizileri, mat uzantılı dosyalar olarak, daha önce açıklanan save komutuyla kaydedilip, load komutuyla geri çağrılabilir.. MATLAB/Diziler

Başında POT olan elemanların sağ yani sayı kısmı potD dizinine, Başında LDR olan elemanların sağ yani sayı kısmı ldrD dizinine, Başında LM35 olan elemanların sağ yani

A) Parametrik merkezî eğilim ölçüsüdür. B) Dokuzuncu pörsentilden birinci pörsentilin çıkarılmasıyla elde edilir. C) En büyük %1 ve en küçük %1’e tekabül eden

Şekil 1-3’deki durum için kesit alanına etki eden bileşke kuvvet bu kesit düzlemine dik olduğundan burada oluşan gerilmeye normal veya eksenel gerilme