Matlabda Matrisler

Arkadaşlar sizlere bu yazımda matrisi detaylı bir şekilde açıklayacağım. Öncelikle şunu belirtmeliyim ki matrisleri  anlamanın ve bunu programlamaya dökmenin ilk şartı FOR DÖNGÜLERİNİ anlamaktan geçiyor.
Öncelikle iç içe for döngülerini açıklayıp , bu döngülerin mantığını  kavrarsanız matrisler sizin için çocuk oyuncağı olacaktır. Arkadaşlar for döngüsü sizlerin de bildiği üzere sizin verdiğiniz değerler  kadar içinde ki programı tekrarlar .

for i=1:15
   kod bloğu
 end

 Arkadaşlar burada for içinde yazan kod blokunu 15 kere tekrar eder. Bu kodun içinde ister i değişkeni olsun ister ise olmasın . Şunu demek istiyorum

for i=1:15
 fprintf('Yunus Savaş\n');
end                                      Burada gördüğünüz gibi i ye bağlı bir değişken kullanmadım.

İç içi for da ise  ilk olarak içteki for tamamen çalışır , sonra dışa döner değişkenin değerini 1 artırır sonra tekrar içteki for u çalıştırır.
toplam=0;
for i=1:5
X--->  kod bloku olarak düşünün burayı
   for j=1:3
      toplam=i+j;
   end
end
Bu programın çalışma mantığı şu şekildedir.
  program gelir i yi 1 alır  (Eğer X varsa X i çalıştırır)  sonra j yi 1 alır  ve toplam değerine 1+1 i atar,

sonra hemen bir yukarı çıkarak j yi 2 alır,(i değişmedi hala 1 )  ve toplam değişkenine 1+2 yi  ekler, toplam değişkeni 5 olur. tekrar çıkar j yi 3 alır (i değişmedi)  ve 5 olan toplam değişkenine 1+3 ü ekler.  Sonra içteki for biter ve baştaki for döngüsüne gelerek i yi 2 alır sonra tekrar içteki for döngüsüne gelir ve j yi 1 2 3 olarak alır ve işlemleri yapar.  bu işlem dıştaki for döngüsü bitene kadar gerçekleşir.

.  Aslında işin kopma noktası bu  for lardaki  değişkenlerin  kullanım mantığını anlamak.
Şimdi  bir diziden yola çıkarak matrise geçmeye çalışacağım ve bir dizinin elemanlarının toplamını bulan programı yazarak for döngülerinin değişkenlerinin bizi matrise nasıl götürdüğünü anlatmaya çalışacağım.

A=[3 2 5 4 1];

toplam=0;
for i=1:length(A)
   toplam=toplam+A(i);
end
   Arkadaşlar burada dizinin elemanlarına ulaşmak için teker teker  A(1)+A(2)+...   A(5)   yazmadıkta
döngü oluşturup o döngünün değişkenini  A dizisininz  i' inci elamanı olarak yazdık ve bu döngü bizim teker teker el ile yazmamıza gerek bırakmadı. İçindeki kod blokunu bizim istediğimiz sayıda çalıştırarak kendisi yazdı.

Şimdi gel gelelim matrislere .  Matrisler iki boyutlu olduğu için  sadece bir for döngüsü yetmiyor bizlere. satır ve sütunlar devreye giriyor artık.  Yukarıda açıkladığım gibi iç içe  2 for döngüsü gerekiyor bizlere matris için.

A =     2     3     5
           4     2     1     bir matris olsun.  A(1,3) elamanı 1. satırın 3. elemanı olan 5 tir.
benzer şekilde A(2,1)    2. satır ve 1. sütundaki elemandır.

Biz bunları programlama ortamında kullanmak için  for döngülerinden yararlanırız  ve genelde 1. for döngüsünü satır için , 2. for döngüsünü sütun için kullanırız. mesela boş bir  A matrisine elemanları 1 ile 10 arasında rastgele değerler olan  2 satır ve 3 sütundan oluşan bir matris atayalım.

A=[];
for i=1:2  ----> Satırları atamak için kullandığım  döngü değişkeni  yani i
 
   for j=1:3 ---> Sütunları atamak için kullandığım döngü değişleni yani j

    A(i,j)=round(1+9*rand(1));
   end
end

Arkadaşlar burada ki program da yukarıda  for döngülerinde açıkladığım gibi  i yi bir alıp aşağı inecek ve j yi de 1 alacak, A nın i. satır ve j. sütununa  değer atanacak. i nin ilk değeri 1 ve j ninde ilk değeri 1 , A(1,1) elemanına ilk değer atanacak , sonra i değişmeden j 2 alınıp A(1,2) . elemanına değer atanacak , sonra A(1,3) elemanına değer atanacak. Burada dikkat ettiyseniz içteki for bittiğinde  satır 1 deki elemanlar yazdırıldı. Yani 1. satırın 1. , 2.  ve 3. sütununu yazıp sonra i  yi 2 alarak aynı şekilde 2. satırın 1. , 2. ve 3. sütununu yazdırıyor ve bu işlem böyle devam ediyor.
Artık sizlerde bu döngüleri iyi bir şekilde analiz ederek  gerek matrislerin içindeki  karşılaştırmaları  koşullarla (if elseif end) yapısıyla farklı soru modelleri kodlayabilirsiniz.
Yazımı da bir örnekle sonlandırmak istiyorum.

Soru:  Parametre olarak aldığı bir matrisin, satırlarının  en büyük elemanlarını bulup bir vektöre depolayan matlab fonksiyonunu yazınız.


function depoVektor=SatirlarinMaksimumunuBul(M)
depoVektor=[];
[satir sutun]=size(M);
for i=1:satir
    enBuyuk=M(i,1);
    for j=2:sutun
        if M(i,j)>enBuyuk
            enBuyuk=M(i,j);
        end
    end
    depoVektor=[depoVektor enBuyuk];
end

Daha fazlası için BURAYA tıklayarak bana ulaşabilirsiniz               Yunus SAVAŞ

 


Yorumlar