Dr.phil.nat. Fuat Altunsu
mpci
Secme YazilarMatlab IIMatlab IMatlabTeknik Mekanik ProblemleriFiziksel ModellemeElektromanyetik Dalgalarin Madde ile Etkilesmesi ve LaserNonlineer Optige GirisSpektroskopiye Girisyari ilektkenler ve Fotovoltaik
Matlab I

 

Hesap Makinasi: Matlab

    Bu bölümde Diferansiyel denklem cözüm tekniklerine ve program yazma konularina girmeden Matlab'in (Matrix Laboratory) geliskin bir hesap makinasi gibi kullanilmasina örnekler vererek, Matlab ana yüzeyini taniyacagiz. Matlab bilimsel-teknik problemlerin agirlikli olarak nümmerik cözmülerinin grafiksel görsellestirmelerine dayali interaktif bir paket programdir. Bu paket program, bünyesinde barindirdigi bir editör araciligiyla programlamayida elverisili kilar. Klavyeden dogrudan verilen komutlar Matlab ana yüzeyi olan Command Window'da görüntülenerekten komutlar yerine getirilir. Kütüphanesinde sayisiz hazir fonksiyon ve bu fonksiyonlarla yapilacak islemleri barindirmasi nedeni ile cok pratik bir program sinifina dahildir. Figür 1 de standart Matlab üst yüzeyi gösterilmistir.

Figür1: Matlab ana penceresi genelde üc bölümden olusur; 1. Command Window 2. Current Directory/ Workspace 3.Command History

 Command Window(1) dogrudan verilerin girlidigi bir pencere olup, ayni zamanda ciktilarinda görüntülendigi yerdir. Burasi ayrica yazilmis degiskenlerin ve programlarin kaydedilmeleri, kaydedilen degiskenlerin ve programlarin geri cagirilmalari icin komutlarin yazildigi yüzeydirde.  Bu pencerde dogrudan basit matematiksel islemler yapilabilir. Grafik cizimleri icin komutlar bu pencereye yazilsa bile, cizilen grafikler özel bir 'plot' pencersinde acilir. Dosya denetlenmesi islemleri yani, yeni dosya acma, dosya degistirme Current Directory (2) penceresinde yapilir. Buradaki ikinci sekmedeki Workspace'de Command Window'a yazilan degiskenler kaydedilir. Command History(3) penceresinde ise komutlarin gecmisleri depolanir. Command Window silindigide ve eski komutlara ulasmak istenilirse, Command History'de istenilen veri tiklanarak Command Window'a geri cagrilir. Konu icinde bu pencerelerin nasil kullanilacagi ayrintili anlatilacaktir. Simdi basit hesaplamalar yapalim.

Command Window'a verileri girelim:

>>A=5

A=

      5

 Commad Window (CW) de ilkin bir A tanimliyoruz ve bu degiskene 5 sayisini atiyoruz, enter tusu ile  A'ya atanan deger görüntülenir.

>>A=5;

>>

CW de yerden tassaruf icin genelde atamalar bir noktali virgülle kapatilir. Enter tusuna basildiginda karsimiza yeni komut satiri cikar. A'ya 5 degeri atanmistir ve baska islemler icin saklanmistir. Simdi bir baska degisken tanimlayalim ve 4 degerini atiyalim(not parantez icindeki e'ler enter tusuna basilacagini gösterir)

>>B=4 ;(e)

>> A+B (e)

ans=

       9

sonucu görüntülenir. Burada A+B ' her hangi bir degiskene atanmadigi icin sonuc ans=9 seklinde görüntülenir. Simdi bu toplami C gibi bir degiskene atiyalim:

>> C=A+B (e)

C=

     9

Simdi D'nin karekökünü alalim ve bunu E gibi bir degiskene atayalim:

>>D=sqrt(C)  (e)

D=

     3

Burada 'sqrt' karekök alma oparöteridir. Karekökü alinacak degerin parantez icinde olmasi unutulmamalidir. D'nin C üsünü alcagiz ve sonucu E'ye atiyacagiz.

>>E=D^C (e)

E=

    19683

Burada görüldügü gibi cati (^) üs alma operatörüdür. Carpma ve bölme islemleri icin yeni  bir degisken atiyalim:

>>F= A*B+A/5

F=

     21

Görüldügü gibi  yildiz operatörü carpmayi, saga yatik kesir opartörü de bölmeyi tanimlar. Sola yatik kesir oparatör ( \ ),  saga yatik oparatörün tersine esdeger oldugu gözden kacmamalidir (sola yatik kesir operatörü ile normal bölmenin -1'nci kuvveti alinir). Matematikdeki öncelik kurallari Matlab'ta aynen gecerlidir. (parantez ici ilk önce, carpma -bölme sonra, toplama cikarma daha sonra vs). Bir örnek, H ' yi yeni bir degisken olarak tanimliyoruz

>>G = F^2+(F-A)*4/5-B

G=

     449.8000

seklinde öncelikler göz önünde bulundurlur. Buraya kadar kisaca aritmetik islemleri görmüs olduk, simdi degiskenlerin nasil kaydedilip ve CW de tekrar görüntülecegine bakalim. Buraya kadar kullandigimiz degiskenlerin ne olduklarini ve degerlerinin ne oldugunu topluca görebilmek icin CW'de Who komutu verilir:

>>who (e)

 Your variables are:

 A  B  C  D  E  F  G

 ve pencerede kullanilan degiskenler özetlenir, ayrica figür 1'de Workspace penceresi tiklanirsa, burada simdiye kadar kullanilan degiskenler ve onlarin degerleri görüntülenir. Workspace'de bir degisken üzerine cift tiklandiginda, CW penceresinin üstünde, her bir degisken icin ek bir 'Array editör' acilir. Bu editör bir cok tabella hesabi yapan programla (Excel, Origin vs) uyumludur ve buradaki veriler bu programlara aktarilabilir. >> ile baslayan bir komut satirina, veriler ve komutlar girildiktan sonra enter tuslanirsa komutlar yerine getirilecektir. Bu yüzden bundan sonra komut sonlarinda (e) kullanilmayacaktir.

 Figür 2:  Yeni bir dosya olusturma. Olusturacagimiz dosyayi hangi ana dosya icine atacagimizi ücüncü ok ile gösterilen sekme belirle. Sekilde C- ana dosyasi secilmistir(1). Ikinci ok ile gösterilen dosyaya bir kere tiklanirsa Current Directory Penceresinde New Folder1 dosyasi olusur, bu dosyanin adi degistirilir. 4'ncü ok da bu dosyanin adi MatlabaGiris1 olarak degistirilmistir. Arti simdiye kadar yaptigimiz islemleri bu dosyaya yükleyebiliriz.

 

CW'da yazdigimiz degiskenleri ve onlarin degerlerini bir 'mat'-dosyasina kaydetmek icin:

save C:\MatlabaGiris1\Alistirmalar

komutu yine CW'a yazilir. Burada save ile C arsinda bir bosluk, diger karakterler arasinda bosluk yoktur. Böylece bu komutla C dosyasina MatlabaGiris1 isimli bir dosya koymus ve bu dosyanin icinede simdiye kadar kullandigimiz A-F'ye kadar degiskenleri ve onlarin degerlerini kaydetmis olduk. Kaydetme islemiden sonra dosya  otomatik olarak Alistirmalar.mat seklini alacaktir (mat-takisini aldi). Simdi her üc pencerdeki tüm verileri silecegiz. Bunu icin Matlab ana Task'ta (arac cubugunda) Edit tiklanir. Burada acilan pencernin en altinda bulunan

Clear Command Window, Clear Command History

Clear Workspace

tiklanarak üc pencerde silinir. Ancak kullandigimiz degiskenler Alistirmalar dosyasinda saklidir. Bunlara ulasabilmek icin:

                                               load Alistirmalar

 yani Alistirmalar dosyasini yükle komutu verilir. Bu durumda Workspace sekmesine gelinirse bütün degiskenlerin Workspace'e yüklendigi görülür. Degisekenler artik baska islemler icin CW ye cagrilabilir, bunu icin hangi degiskeni cagirmak istiyorsak CW ye o degisken yazilir.

>>G

G=

      449.8000

seklinde degiskenler geri cagrilabilir ve yeni islemler tanimlandiktan sonra kisa yol menüsü secilerkten, yani

 File  

      Save Workspace as

sekmeleri secilerek yeni bir dosyaya veriler yüklenebilir. Workspace'deki degiskenleri silmek icin alternatif olarak CW'de

 >> clear

komutu yazilmasi yeterlidir. Örnegin yalniz A degiskenini silmek istiyorsak clear A komutu yazilir.

>>clc 

komutu ile CW'de ki verilerde silinir, bu silme degiskenlerin degerlerini ortadan kaldirmaz sadece ekrandaki görüntülerini siler. Bir degiskenin degerinin silinebilmesi icin Workspace'de degerinin ortadan kaldirilmasi gerekir bunu icinde yukarda belirttigimiz  ' clear ' komutu yeterlidir. Her zaman CW deki bütün degiskenlerin kaydedilmesi gerekmeye bilir, bu durumda sadece istenilen degiskenin kaydedilmesi icin su yöntem uygulanir:

 To get started, select MATLAB Help or Demos from the Help menu.

>> F=3788

F =

        3788

>> U=467

U =

   467

>> Fuat_Altunsu=500

Fuat_Altunsu =

   500

>> T=1000

T =

        1000

>> save C:\MatlabaGiris1\Fuat_Altunsu

Burada görüldügü gibi F,U,Fuat_Altunsu,T gibi degiskenler yaratilmistir ve bu degiskenlerden yalniz Fuat_Altunsu adindaki degisken yine MatlabaGiris1 dosyasina kaydedilmistir.

>> clear
>> load Fuat_Altunsu
>> Fuat_Altunsu

Fuat_Altunsu =

   500

Burada dikkat edilmesi gereken konu hem alt dosyanin adinin Fuat_Altunsu.mat olmasi hemde bir degiskenin adinin Fuat_Altunsu olmasidir. Buraya kadar Current Directory'de elemanlarini CW'a cagirdigimiz dosyalar her zaman üst yüzeyde idi ve Matlab degiskenleri tanimada bir zorluk cekmedi. Simdi degiskenini cagiracagimiz dosya tamamen kapali olsun. Bu durumda Matlaba calisacagimiz dosyanin yolu tanitilmasi gerekecektir.

>> addpath C:\MatlabaGiris1
>> load Fuat_Altunsu
>> Fuat_Altunsu

Fuat_Altunsu =

   500

CW'a  "addpath C:\MatlabaGiris1" yazmakla Matlaba ulasmak istedigimiz dosyanin yolunu göstermis oluyoruz. C anadosyasinda, MatlabaGiris1 adindaki bir  dosyanin degiskenleri ile calisacagimizi böylece programa tanitmis oluyoruz. Bundan sonra CW'a istenilen degiskenin cagrilamsi yine load -degisken adi- ile saglaniyor. CW' de aktüel olarak nerde bulundugumuzu pwd komutu ile belirleriz:

>> pwd

ans =

C:\MatlabaGiris1

böylece pwd komutu ile C ana dosyasinin MatlabaGiris1 alt dosyasi icinde calistigimiz belirlenir. Bir baska komut dir komutudur, bu komutla pwd ile belirledigimiz aktüel dosyanin icinde hangi dosyalarin bulundugu görüntülenir.

>> dir

.                 ..                Alistirmalar.mat     Fuat_Altunsu.mat 

Böylece C'deki MatlabaGiris1 dosyasi icinde iki tane .mat uzantili dosyanin oldugu bilinir. Matlab'ta da DOS'ta oldgu gibi bir üst dosyaya gecmek icin cd ( change directory) komutu kulanilir:

C:\MatlabaGiris1

>> cd ..;pwd

ans =

C:\

Görüldügü gibi cd ..;pwd komutu ile bir alt dosyadan üst dosyaya gecis yapilmistir. Programlada önemli konulardan birisde yazilan programdaki degiskenlerin neler karsilik geldiginin baskalari tarafindan okundugunda da anlasilir olmasidir. Programlar uzadikca degiskenlerin ne anlama geldigi belirsizlesir,karmasiklasir.  Bu yüzden program icinde her degisken yorumlanmalidir. Yorum satirlari bir % isarti ile baslarlar ve progaramin yapisini bozmazlar. Ciktida da görüntülenmeyen yorumlar, Workspaceye atanirlar ve böylece her hangi bir programi acmadanda Workspaceye bakilarak program icindeki degiskenlrin ne anlama geldigini bilebiliriz. Örnek:

>> m=10;                             % m burada kütleyi kg cinsinden verir!(e)
>> v=5;                                % v burada m/s cinsinden hizi verir! (e)
>> EK=1/2*m*v^2                % EK Joule cinsinden sistemin kinetik enerjisidir...(e)

EK =

   125

 Matlab oturumunu bitirmek icin CW'a

>> quit

 ya da arac cubugundaki sekmelerden

File

..

..

Exit MATLAB

sekmesi secilir.

 

Ia)  Karmasik Sayilar

Reel sayilarda oldugu gibi karmsik sayilarda CW'a dogrudan girilerek islemler yapilir, asagida iki karmasik sayi yazilmisitir:

>> Z1=3+2*i             % Karmasik sayilarin genel gösterimi

Z1 =

   3.0000 + 2.0000i

>> Z2=6-6*j               % Bir baska karmasik sayi

Z2 =

   6.0000 - 6.0000i

 Görüldügü gibi i ve j  Matlab'ta karekök -1 sayisi icin reserve edilmistir. Simdi karamsik sayilarla hesap yapalim:

iki karamsik sayinin carpimi

>> Z1*Z2

ans =

  30.0000 - 6.0000i

Bir karmasik sayinin karekökü yine karmasik sayi parantez icine alinarak sqrt komutuyla elde edilir:

>> A= sqrt(Z1)

A =

   1.8174 + 0.5503i

Burada (=) atama operatörü ile Z1 karmasik sayisinin karekökü A degiskenine atanmistir. Bir karmasik sayinin kopleks eslenigi conj( ) komutu ile hesaplanir:

>> B=conj(A)

B =

   1.8174 - 0.5503i

Bir karmasik sayinin boyu ya da mutlak degeri abs( ) komutu ile hesaplanir:

>> C=abs(B)

C =

    1.8988

Matlab'ta bir karmasik sayinin faz acisi radyan cinsinden angle( ) komutu ile hesaplanir:

>> D=angle(B)

D =

   -0.2940

Buraya kadar CW'de yaptigimiz hesaplamalar yine giris bölümünde yaptigimiz gibi kayde edilir sonra geri cagrilabilir.

Ib) Vektörler

Matlab programina genis anlam yükleyen konularin basinda vektör ve matris hesabi gelmektedir. Öyleki herhangi bir sayi Matlab dilinde 1X1 büyüklügünde bir matris olarak isleme katilir. Simdi vektörler yazalim ve vektörler üzerinde temel islemlerin nasil yapildigina bakalim:

>> X1=[1 2 6 7 -2 6]

X1 =

     1     2     6     7    -2     6

>> X2=[4 8 0 1 5 1]

X2 =

     4     8     0     1     5     1

CW'da köseli parantezler icin aralarina bir bosluk konularak vektörlerin bilesenlerinin degeri yazilir. Yukarda X1 ve X2 ile iki vektör olusurulmustur. Bir ücüncü vektörü x3 ile gösterlim;

>> x3=sqrt(x2)

x3 =

    2.0000    2.8284         0    1.0000    2.2361    1.0000

görüldügü gibi sqrt komutu ile vektörün eleman elemana karekökü alinmaktadir. x bir vektör ve A da bir skaler olmak üzere bir vektörün bir skalerle carpimi asagidaki gibidir:

>> x=[3 6 9 1 0 5]

x =

     3     6     9     1     0     5

>> A=7

A =

     7

>> y=x*A

y =

    21    42    63     7     0    35

Burada x vektörünün her elemani 7 ile carpilarak, sonuc y adinda bir vektöre atanmistir. Yine ayni sekilde iki yada ikiden fazla vektörün toplami eleman elemana toplamdan gecer. Burada bilinmesi gereken konu iki vektörün boyunu ayni olmasidir:

>> k1=[1 4 7]

k1 =

     1     4     7

>> k2=[1 6 8 9 4]

k2 =

     1     6     8     9     4

>> k=k1+k2
??? Error using ==> plus
Matrix dimensions must agree.

Görüldügü gibi iki vektörün boyunun ayni olmamasi durumunda hata raporu verilmektedir. Ayni boydaki iki vektör A ve B asagidaki gibi toplanir.

>> A=[1 4 8 40]

A =

     1     4     8    40

>> B=[5 2 8 9]

B =

     5     2     8     9

>> C=A+B

C =

     6     6    16    49

Boylarinin ayni olmasi durumda iki vektör farki yine eleman elemandan cikarilarak bulunur. Yukarda tanimlanan A ve B vektörlerinin eleman elemana carpimlari asagidaki gibidir.

>> D=A.*B

D =

     5     8    64   360

A ile B vektörü arasina koyulan nokta ve carpma operatörleri (.*) ile bu  iki vektör eleman elemana carpilmisitir. Burada yine iki vektörün boylarinin esit olmasi bir zorunluluktur. Ayni  sekilde eleman elemana bölme (./) asagidaki gibidir :


>> E=A./B

E =

    0.2000    2.0000    1.0000    4.4444

Bir A vektörünün her elemanin karesinin alinmasi yine A.^2 seklinde olusturulur:

>> E.^2

ans =

    0.0400    4.0000    1.0000   19.7531

 Bir vektörün herhangi bir elemaninin secilmesi o elemanin sütün sayisinin verilmesi ile olur, örnek olarak E vektörünün 3. elemanini secelim:

>> E(3)

ans =

     1

Iki vektörün skaler carpimi (ic carpim)  asagidaki yöntemlerle  verilir:

>> y= dot(A,B)

y =

   437

ya da

>> y=sum(A.*B)

y =

   437

ya da

>> y=A*B'

y =

   437

Burada B' notasyonu ile B vektörünü sütun vektörüne cevirmis bulunuyoruz ( vektörün transpozu). Bir vektörün boyu norm komutu ile elde edilir bu ayni zamanda sqrt(sum(a*a')) dir, simdi buna örnek verelim:

>> Boy=sqrt(sum(A*A'))

Boy =

    41

ya da

>> A=[1 4 8 40]

A =

     1     4     8    40

>> Boy=norm(A)

Boy =

    41

Iki vektörün vektörel( dis carpimlari) su sekildedir:

>> A=[1; 2; 3]     % A herhangi bir sütun matrisidir

A =

     1
     2
     3

>> B= [2; 4; 7]     % B bir baska sütün matrisi olmak üzere

B =

     2
     4
     7

>> C=cross(A,B)     % ikisinin vektörel carpimi bu sekildedir

C =

     2
    -1
     0

 Burada görüldügü gibi Matlab'ta satiri sütuna, sütunu satira cevirmenin bir den fazla yolu vardir, simdi buna örnekler verelim:

>> A=[2; 5; 9; 5]

A =

     2
     5
     9
     5

>> B=[ 1 3 5 6]'

B =

     1
     3
     5
     6

Esit aralikla artan ya da azalan diziler olusturmak icin Ailk:ΔA:Ason komutunu yazmak yeterlidir, örnek:

>> A=1:5:26

A =

     1     6    11    16    21    26

>> B=50:-5:10

B =

    50    45    40    35    30    25    20    15    10

birinci örnekte 1'den baslayarak 5 artirimla 26'ya kadar olan sayilarin dizisi, ikinci örnekte 50'den baslayarak 5' azaltilarak 10'a kadar sayilar dizisi olusturulmustur. Istatistiksel hesplamalarda eleman sayisin bilinmesi önemli yer tutar, bir vektörün kac elmanli olgunu length komutu ile bulabiliriz, örnek:

>> A=[7 2 6 90 5 -1 3 6 8 2 1 ]

A =

     7     2     6    90     5    -1     3     6     8     2     1

>> length(A)

ans =

    11

Böylece A vektörü 11 bilesenden olustugu görülür. Bir ortalama alalim;

>> A=[7 2 6 90 5 -1 3 6 8 2 1 ]

A =

     7     2     6    90     5    -1     3     6     8     2     1

>> ortalama=sum(A)/length(A)       % A vektörünün elemanlari toplanarak eleman sayisina bölünüyor

ortalama =

   11.7273

 Vektörler icin bu kisa girisi yaptiktan sonra her hangi bir koordinat sistemindeki  bir  vektörün bir baska koordinat sistemine nasil dönüstürülecegine bakalim.

[THETA,RHO,Z]=cart2pol(X,Y,Z)   Kartezyen koordinatlarin kutupsal koordinatlara dönüsümü

[THETA,PHI,R]=cart2sph(X,Y,Z)   Kartezyen koordinatlarin küresel koordinatlara dönüsümü

[X,Y,Z]=pol2cart(THETA,RHO,Z)   Kutupsal koordinatlarin kartezyen koordinatlara dönüsümü

[x,y,z]=sph2cart(THETA,PHI,R)    Küresel koordinatlarin kartezyen koordinatlara dönüsümü

Bir örnek:

>> x=2,y=1,z=3      % bir satira birden fazla veri girme, her verinin arasina virgül koyularak yapilir

x =

     2


y =

     1


z =

     3

>> [THETA,PHI,R] = cart2sph(x,y,z)

THETA =

    0.4636


PHI =

    0.9303


R =

    3.7417

Kartezyen koordinat sisteminde x,y,z bilesenleri olan bir vektörün küresel koordinatlardaki karsiligi olan Theta,Phi ve R degerleri hesaplanmis olundu.

Harf Zincirlerini (Strings), yani sayisal olmayan karakterleri Matlab'ta bir vektörmüs gibi kullanmanin olanaklari vardir. CW'a karakterler tirnak arasinda yazilirsa, hata raporu alinmadan sayisal olmayan karakterlerin görüntüsü elde edilir. Örnekler;

>> A='bu sarki ';, B='toprak canaklarda ';, C='günesi icenlerin sarkisi';
>> D=[A B C]

D =

bu sarki toprak canaklarda günesi icenlerin sarkisi

Birden fazla veriyi yine ayni satirda yazmak icin A, B,C aralarinda virgül ve her bir degiskenin ayri ayri görüntülenmemesi icin birde aralarina noktali virgül koyduk. Matlaba girilen verilerin sayisal bir veri olmadigini anlatmak icin verileri tirnak icinde yazdik. A,B ve C girdilerini ayni satirda bir birine eklemek icin D degiskenindeni notasyonu kullaniyoruz. Matlata her karakterin ASCII- formatinda karsi geldig bir sayi vardir. Asagida A'nin bu formattaki karsiligi verilmistir, buna göre b harfi 98, u harfi 117 vs. gibi sayilara karsi gelmektedir.

>> double(A)

ans =

    98   117    32   115    97   114   107   105    32

Bir baska örnek:

A='Fuat'       % A bir string

A =

Fuat

>> B=double(A)                % A degiskeninin ASCII formatinda sayisal karsiligi

B =

    70   117    97   116

>> Cascii=char(B)               % B degiskeninin  ASCII formatinda karakter karsiligi..

Cascii =

Fuat

Klavyedeki bazi karakterlerin ASCII kodlarina bakalim:

>> Klavye=char(reshape(32:127,48,2)')

 Klavye =

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO
 PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Ic) Polinomlar

Polinomlar Matlab'ta genelde satir vektörleri seklinde verilir. Vektör notasyonunda kullandigimiz köseli parantezlerin icine bir polinomun katsayilari (en yüksek üssün katsayisindan baslayarak) yazilarak polinomlar olusturulur.

Örnek olarak p(x)=2x5+5x3+2x2+1 polinomunun Matlab notasyonu yazalim:

>> p=[2 0 5 2 0 1]

p =

     2     0     5     2     0     1

 Yukardaki besinci dereceden p polinomunu köklerini bulalim. Bunun icin roots(p) komutu yeterli olacaktir:

>> p=[2 0 5 2 0 1]

p =

     2     0     5     2     0     1

>> Koekler=roots(p)

Koekler =

   0.1579 + 1.5972i
   0.1579 - 1.5972i
  -0.6895         
   0.1869 + 0.4966i
   0.1869 - 0.4966i

Böylece biri reel, dördü imajiner olmak üzer toplam 5 kök kolayca bulunur. Tersini yapmakta, yani kökleri bilinen bir polinomun kendisini bulmakta yine su basit komutla p=poly(koekler) hesaplanir:

Koekler =

   0.1579 + 1.5972i
   0.1579 - 1.5972i
  -0.6895         
   0.1869 + 0.4966i
   0.1869 - 0.4966i

>> p=poly(Koekler)

p =

    1.0000   -0.0000    2.5000    1.0000    0.0000    0.5000

Bir polinomun her hangi bir x degerindeki degeri p(x) ile bulunur. Yukardaki p polinomunun x=2 deki degerini bulalim:

>> P=[2 0 5 2 0 1]

P =

     2     0     5     2     0     1

>> A=polyval(P,2)                  % P polinomunun x=2'deki degerinin hesaplanmasi

A =

   113

 Böylece polyval(P,2) komutuyla, P polinomunu x=2 deki hesaplanmis oldu. En son olarak iki polinomun carpimi ve bölümü islemlerine bakalim:

>> p1=[1 4 2 5]

p1 =

     1     4     2     5

>> p2=[3 6 1]                                      % p1 ve p2 iki polinom olmak üzer carpimlari ve bölümleri söyledir:

p2 =

     3     6     1

>> Carpma=conv(p1,p2)                         % p1 ve p2'nin carpimlari

Carpma =

     3    18    31    31    32     5

>> [boeluem artan]=deconv(p1,p2)          % p1'in p2'ye bölünmesinden kala artan ve bölüm

boeluem =

    0.3333    0.6667


artan =

         0         0   -2.3333    4.3333

Burada görüldügü gibi iki polinom conv(a,b) ile carpiliyor ve deconv(a,b) ile bölümleri olusturuluyor.

Id) Matrisler

Baslangicta bellirtigimiz gibi Matlab'in kütüphanesinde her konu icin yardim ve örnekler bölümü vardir.  Örnek olarak help det komutu ile bir matrisin deterimantinin nasil hesaplanacagi hakkinda Matlab  kütüphanesindeki bilgilere ulasbiliriz. Burada konunun grameri (syntax) aciklandigi gibi örneklerde vardir.

>> help det
 DET    Determinant.
    DET(X) is the determinant of the square matrix X.
 
    Use COND instead of DET to test for matrix singularity.
 
    See also cond.

    Overloaded functions or methods (ones with the same name in other directories)
       help gf/det.m
       help sym/det.m
       help laurmat/det.m

    Reference page in Help browser
       doc det

 Simdi matrisler olusturalim ve üzerlerinde temel islemler yapalim.

>> A=[1 2 3; 4 5 6;8 9 4]

A =

     1     2     3
     4     5     6
     8     9     4

>> B=[ 1 2 1; 3 4 3; 6 5 4]

B =

     1     2     1
     3     4     3
     6     5     4

Matlab'ta bir matris oluturma yazilan her satir vektörünün noktali virgülle ayrilmasi ile olusur. Bu iki matrisi kayde edelim bunu icin kisa yol menüsünde Save Workspace as sekmesinde istedigimiz bir dosyaya yükleyelim. Biz yine C dosyasindaki MatlabaGiris1 dosyasina yükleyecegiz ve kaydedecegimiz sayfanin adinida IkiMatrisAB koyacagiz:

>> clear
>> load IkiMatrisAB
>> A

A =

     1     2     3
     4     5     6
     8     9     4

>> B

B =

     1     2     1
     3     4     3
     6     5     4

Böylece load komutu ile kaydettigimiz veriyi CW'a geri yüklüyoruz. Önce bir matrisin bir  ya da birden fazla elemanina nasil ulasacagimiz ve matrisler üzerinde yapilabilecek manipulasyonlara bakalim:

>> A(1,2)                       % parantez icindeki birinci indeks satir ikinci indeks sütundur.

ans =

     2

>> A(1,2)                        % A matrisinin birinci satir ikinci sütundaki elemanini verir

ans =

     2

>> A(3,:)                         % ücüncü satirin tüm elemanlarini verir

ans =

     8     9     4

>> A(:,2)                         %  ikinci sütunun tüm elemanlarini verir

ans =

     2
     5
     9

 >> A(2:3,1:2)       

ans =

     4     5
     8     9

 Son örnekte A matrisin bir bölümünü cikarip aliyoruz. A(2:3,1:2) notasyonuda virgülün sol tarafi hangi satirlarin, sag tarafida hangi  sütunlar kesilip alinacagini gösterir. 2:3 - ikiden baslayarak ücüncü satira, 1:2- birden baslayarak ikinci  sütuna kadar olan elemanlari A matrisinden alinacagini tarif eder. Ayni sekilde yine A(:,:) yine tüm A matrisini tarif eder:

>> A(:,:)

ans =

     1     2     3
     4     5     6
     8     9     4

A matrisinin a13 elemaninin yerine 10 sayisini girelim;

>> A(1,3)=10

A =

     1     2    10
     4     5     6
     8     9     4

Ayni sekilde:

>> A(2:3,1:2)=[2 4;5 10]

A =

     1     2    10
     2     4     6
     5    10     4

alt matrislerde degistirilebilir. Baska bir örnekte matrisin büyklügünü degistirelim:

>> A(:,1)=[ ]  % A'nin 3. satiri ve birinci satirini bos bir matrise estlemekle, bu satir ve sütunlar silinir

A =

     2     3
     5     6
     3     5

Böylece birinci sütunun tüm satirlari atilmis oldu. Herhangi bir matrisin büyüklügü size( ) komutu ile bulunur.

A =

     2     3
     5     6
     3     5

>> size(A)

ans =

     3     2

Sonucta A'ni 2X3 matris oldugu göseterilir. Tüm sütunlarin toplami sum(A) ve bir satiri diger satira ekleyerek toplama islemi cumsum(A) komutlari ile saglanir.

>> sum(A)

ans =

    10    14

>> cumsum(A)

ans =

     2     3
     7     9
    10    14

 Satir ve sütunlar üzerinde yaptigimiz degistirme operasyonlardan sonra simdide matrislerle nasil hesap edilecegine bakalim:

>> A=[1 2 3; 4 5 6;8 9 4]

A =

     1     2     3
     4     5     6
     8     9     4

>> d=det(A)

d =

    18

>> I=inv(A)

I =

   -1.8889    1.0556   -0.1667
    1.7778   -1.1111    0.3333
   -0.2222    0.3889   -0.1667

>> T=A'

T =

     1     4     8
     2     5     9
     3     6     4

Yukarda görüldügü gibi sirasiyla  bir matrisin determinanti detA, tersi inv(A), transpozu A' tek bir komut satiri ile alinabilmektedir. A ve B gibi iki kare matrisin carpimi:

   >> D=A*B

D =

    25    25    19
    55    58    43
    59    72    51

Asagidaki örnekte carpma isaretinin arasina bir nokta konmakla eleman elemana carpim yapilacagi komutu verilmistir.

>> C=A.*B

C =

     1     4      3
    12    20    18
    48    45    16

Denklem sistemleri yine ayni koylalikla yapilabilmektedir, buna bir örnek verelim.

x+2y+3z=1

4x+5y+6z=2

7x+8y+9z=3

seklindeki sistemi cözelim. Cözümün genel yapisi x=A\B seklindedir. Burada A katsayilar matrisi, B de estligin sol tarfini olusturan sütun matrisidir.

>> A

A =

    3.0000    2.0000   -1.0000
    2.0000   -2.0000    4.0000
    1.0000   -0.5000    1.0000

>> B=[1 -2 0]

B =

     1    -2     0

>> X=A\B'

X =

    1.0000
   -2.0000
   -2.0000

seklinde olur, burada dikkat edilmesi gereken konu B matrisinin transpozunun alinmis olmasi ve bölmeninde sol bölme olmasidir. Matlab bünyesinde islem sayaci flops ve zaman sayaci tic ile baslayan ve toc ile biten sayaclarda vardir.  Bu sayaclarla bir komutun yerine getirilmesi kac islemden olustugu ve bu islemler icin ne kadar süre harcandigi hesaplanir. Burada bilinmesi gereken sey, islem hizinin elbette hesap yaptigimiz bilgisayarin islemci hizina ve o islemcinin o anki baska pencerelerde bir islem yapip yapmadigina bagli olmasidir. Simdi bir 5X5 matrisin tersinin determinantini bir 1.66GHz islemci ile ne kadar sürede hesaplanacagina bakalim;

>> clear
>> A=[1 2 3 4 5; 2 3 5 6 7; 6 7 8 9 3; 4 1 6 7 4; 6 8 2 1 7];
>> tic;det(inv(A));toc
Elapsed time is 0.020351 seconds.

Görüldügü gibi bu uzun islem yüzde ikilik bir saniye diliminde yerine getirilmektedir. Ilerde nümmerik islemlerde sayaclar kuracagiz ve diferansiyel denklem takimlarinin ne kadar sürede hesaplandigina bakacagiz. Matris hesaplamalarind önemli konulardan biriside özdegerleri ve özfonksiyonlarin bulunmasidir. Matalb'ta öz degerler eig(A) komutu ile bulunur:

>> A=[1 2 3; 4 5 6; 7 8 9]

A =

     1     2     3
     4     5     6
     7     8     9

>> Ozdegerler= eig(A)        % A matrisinin özdegerlernini hesaplanmasi

Ozdegerler =

   16.1168
   -1.1168
   -0.0000

 Özdegerleri ve özfonksiyonlari birlikte hesaplamak asagidaki gibidir:

>> [ozfonksiyonlar ozdegerler]=eig(A)

ozfonksiyonlar =

   -0.2320   -0.7858    0.4082
   -0.5253   -0.0868   -0.8165
   -0.8187    0.6123    0.4082


ozdegerler =

   16.1168         0         0
         0   -1.1168         0
         0         0   -0.0000

Buraya kadar temel islemleri verdik, okuyucular matris hesabi ile ilgili konulari asagida verilen yardim kütüphanesinden ögrenebilirler. Bu komutlar CW'a yazilirsa yardim pencereleri ve cesitli örneklerin bulundugu sayfalara ulasilabilir.

 help elmat, help matfun, help colon, help paren

Ie) Grafik Cizimleri

 Iki boyutlu (2D, R2) grafiklerin cizimleri plot komutu ile saglanir. Burada iki boyutla grafiklerden anlasilmasi gereken, bagimli bir degiskenin bagimsiz bir degiskene karsi degisiminin cizilmesidir.

                                    

figür 3:  A ve B gibi iki vektörün  grafiginin cizilmesi gösterilmistir. Burada plot komutunu argumanin ilk bileseni x-eksenine, ikinci bileseni y-eksenine atanir. Sekilde görüldügü gibi grafikler ek bir pencerde acilmaktadir.

Figür 3'ün CW'da görüldügü gibi istenilen büyüklükte veri ciftleri ( ya da tripel degerler) tek bir komutla kolaylikla  grafiksel ifade edilebiliyor. Bu kolayliktan dolayi uzun ölcüm sonuclari, kalabalik veriler kolayca analiz edilebilir. Figür 4'de üst grafikte sinx, cosx ve sinx+cosx fonsiyonlarinin cizimleri gösterilmistir. Simdi hem üst grafigin hemde alt grafigin nasil cizildigine bakalim.      

                                 

 figür 4: sinx, cosx ve toplamlarindan olusan üc foksiyonunu ayni grafikte görüntülenmesi. Asagidaki grafikte yalniz sinx ve sinx+cosx fonksiyonlari cizilmistir, bu grafik üsttki grafige göre daha ayrintilidir.

 Üstteki(figür 4) grafigin cizimi icin yazilmasi gereken komutlar su sekildedir:

>> % birinci adimda grafiklerin cizilecekleri aralik verilir, bu;
>>x=[-2*pi:pi*0.01:2*pi];  % burada hesaplama adimi 0.01*pi verilmistir .
>>%Sonraki adimda fonksiyonlar yazilir
>>y1=sin(x);
>>y2=cos(x);
>>y3=sin(x)+cos(x);
>>% son adimda plot komutu ile cizim yapilir.
>>plot(x,y1,'r+',x,y2,'b+',x,y3,'g-')

Plot komutunu öztlersek su sekildedir: plot(bagimsiz degisken, bagimli degisken,' grafigin rengi ve yerlestirilecek sembol') seklindedir. Cizilmis bir grafige ek grafik eklemek hold on komutlariyla yapilir. Örnek olarak yukardaki grafigi hold on komutlariyla asagidaki gibi yazabiliriz.

>> %Grafik üzerine grafik eklemek
>> % ilk önce yine grafiklerin cizilmesi gereken aralik tanimlanir
>> x=[-2*pi:pi*0.01:2*pi];
>> %ikinci adimda cizlmesi istenilen fonksiyon yazilir;
>> y1=sin(x);
>> %sonra plot komutu ile bu fonksiyon cizilir
>> plot(x,y1,'r+')
>> % bu komuttan sonra yukardaki sinüs grafigi cizilmistir
>> % simdi bu grafigin üzerine diger grafikleri ekleyecegiz
>> %bunun icin hold on komutu verilir
>> hold on
>> % simdi birinci grafigin üzerine eklemek istedigimiz
>> % grafigin verileri girilir
>> y2=cos(x);
>> %yine plot komutuyla cizim yapilir
>> plot(x,y2,'b+')
>> %grafigi acik tutuyoruz
>> hold on
>> % son grafigin verilerini giriyoruz
>> y3=sin(x)+cos(x);
>> %ve son plot komutuyla da son grafigi digerlerinin üzerine yerlestiriyoruz
>> plot(x,y3,'g-')

Okuyucular kirmiz renkten olusan komutlari satir satir  burada kopyalayarak ve CW'a  yapistirarak cizim asamasini görerbilir,üzerine baska grafikler ekleyerek ögrenmeyi pekistirebilirler.  Cok daha ayrintili olan altdaki yalniz sinüs ve sinx+cosx den olusan grafiktir. Bu grafikte eksenlerin yazilmasi, baslik atilmasi, grafik üzerine herhangi bir koordinata yazi yazilmasi, iki grafigi birbirinden ayird edebilmek icin 'legend' yazma gibi bir cok opsiyonlar kullanilmisitir. Okuyucular adim adim komutlari girip grafik üzerindeki degisiklikleri gözlemlerlerse, komutlari ögrenmeleri kolaylasir. Bunun icin simdiye kadar yazilan komutlari ve verileri buradan kopyalayarak ve Matalab CW'a yapistirarak hizli calisabilirler.

>> % TRIGONOMETRIK FONKSIYON GRAFIKLERI
>> % birinci adimda hangi aralikta fonksiyonlar cizilecekse, o araliklar belirlenir
>> x=[-2*pi:0.001*pi:2*pi];
>> % Fonksiyonlar -2pi ile +2pi arasina cizilecektir. Sinir degerler arasindaki 0.001pi
>> % degeri hesaplamin hangi adim büyüklügnde yapilacagini gösterir, yani iki hesap arasindaki adim
>> % bu 0.001pi büyklügündedir. Toplam aralik uzunlugu 4pi oldugu icin 4000 kere trigonomtrik hesap yapilacaktir!
>> % Ikinci adimda fonksiyon degerleri hesaplanir
>> y1=sin(x);
>> y2=sin(x)+cos(x);
>> % Ücüncü adimda nasil cizilecegi belirlenir
>> plot(x,y1,'r+',x,y2,'b--')
>> % Dördüncü adimda eksenlerin uzunluklari belirlenir
>> axis([-2*pi 2*pi -1.8 1.8])
>> % Besinci hangi eksenin neye karsilik geldigi belirlenir
>> xlabel('x')
>> ylabel('sinx')
>> % Altinci adimda grafige baslik konur
>> title('Trigonometrik Fonksiyonlar')
>> % Yedinci adimda grafiklerin ayird edilmesi icin indekslenir
>> legend('sinx','sinx+cosx');
>> % Son olarakta istenilirse grafik kareli bir zemin üzerine cizdirtilir
>> grid on
>> text(0,0,'Burasi sifir noktasidir')
>> gtext('y2 nin maksimum noktasi')

 Grafikler konusunda bir baska konu ise farkli grafikleri ayri ayri grafik pencerelerine ama ayn ana pencereye cizmedir. Bunun icin ana pencer alt pencerelere subplot (satir,sütün, grafigin yerlesecegi satir ve sütun sayisi)  komutu ile ayrilir, örnek olarak subplot(2,2,1) komutu ana pencereyi 2X2 alt grafik pencerelerine ayirir ve cizilmesini istedigimiz grafigi 1'nci pencereye yerlestirir. Buna bir örnek verelim:

>> % Ilk önce cizilmesini istedigimiz aralik verilir
>> x=[-2*pi:pi*0.01:2*pi];
>> % ikinci adimda ana pencer subplot komutu ile alt pencerler bölünür
>> subplot(1,3,1);% burada bir satirli üc sütunlu pencer olusur
>> % daha sonra ilk pencereye cizmek istedigimiz fonksiyon girilir
>> plot(x,sin(x),'r',x,2*sin(x)+cos(x),'g',x,cos(x),'b')
>> % grafige bir baslik verilir
>> title('Trigo. Fonksiyonlar')
>> % eksenlere belirlenir
>> xlabel('x-ekseni')
>> ylabel('y-ekseni')
>> % simdi ikinci alt pencereyi acalim
>> subplot(1,3,2);
>> % bu alt pencereye cizecegimiz fonksiyonu girelim
>> fplot('sin(x)/x', [-50 50],'r-')
>> % bu grafige de baslik verelim
>> title('sinx/x')
>> % eksenleri belirleyelim
>> xlabel('x-ekseni')
>> ylabel('y-ekseni')
>> % simdi son penceremize üstel bir fonksiyon cizdirelim
>> % cizilecek alt pencereyi acalim
>> subplot(1,3,3);
>> % fonksiyonu yazalim
>> fplot('exp(-x)', [-6 0 ], 'b-')
>> % baslik verelim
>> title('Üstel azalan fonksiyon')
>> %eksenleri belirleyelim
>> xlabel('x-ekseni')
>> ylabel('y-ekseni')

 

 figür 5: Ana pencernin subplot(n,m,k) komutu ile alt pencerlere ayrilmasi: Burada subplot(1,3,1) Trig. fonksiyonlarinin, subplot(1,3,2) sinx/x fonksiyonunun ve subplot(1,3,3) komut da exp(-x) fonksiyonunun cizilidigi pencereleri acar.

Buraya kadar iki boyutlu cizimlerle ugrastik. Bagimli degisken iki bagimsiz degiskenin fonksiyonu oldugu durmlarda üc boyutlu(3D,R3) cizimler, bagimli degiskenin R3-uzayindaki davranisini gözler önüne serer. Matlab't üc boyutlu grafikler plot3 komutu ile ciziler ve grafiklere baslik atma, eksenlere yazi yazma gibi islemler 2D'de oldugu gibidir. Örnek olarak bir helisin grafigine bakalim. Bu elektromanyetik bir alanda hareket eden bir elektronun yörüngesidir.

>> % Simdi bir helisin cizimini yapalim
>> % bir helis bir dairenin z-ekseni boyunca degisiminden olusur
>> % ilk önce yine cizilecek araliklari yazalim
>> t=[0:pi/100:10*pi];
>> %sonra helisin fonksiyonunu yazalim
>> y1=sin(t);
>> y2=cos(t);
>> %plot3 komutu ile cizmi yapalim
>> plot3(y1,y2,t)
>> %eksenlerin yazilarini yazalim ve baslik atalim
>> title('Bir elektronun manyetik alandaki yörüngesi')
>> xlabel('sin(t)')
>> ylabel('cos(t)')
>> zlabel('t')

figür 6: Üc boyutlu grafikler örnekler

                                                 

 devami sonra!

  If) Istatistiksel Hesaplamalar

sonra!

Ig) Sembolik

 sonra!

 

sonra!

 

Matlab I