Yazan : Şadi Evren ŞEKER

Matematikte özellikle de doğrusal cebirde (linear algebra) bir matrisin satır ve sütünlarının yer değiştirmesi anlamını taşır. Örneğin aşağıdaki matrisi (masfufe’yi) ele alalım:

1 2 3

4 5 6

7 8 9

Yukarıdaki bu matrisin tersyüzü (transpoze)

1 4 7

2 5 8

3 6 9

olarak bulunur.  Görüldüğü üzere satır ve sütünlar yer değiştirmiştir. Ayrıaca aşağıdaki kurallar tanımlanabilir:

Bir matrisin tersyüzünün tekrar tersyüz edilmiş hali kendisidir. (A T) T = A

Bir matrisin bir sabitle (scalar) çarpımının tersyüzü, tersyüzünün çarpımına eşittir: s AT = (sA)T

İki matrisin toplamlarının tersyüzü, tersyüzlerinin toplamına eşittir : ( A + B) T= AT + BT

Bir matrisin tersinin tersyüzü, tersyüzünün tersine (Inverse) eşittir: (A-1)T = (AT)-1

Matris tersyüz işleminin kodlanmsı

Yukarıda izah edilen ve bir masfufun (matrix) tersyüzünü alan (Transpose) işlemin, C dilinde kodlanması aşağıda gösterilmiştir.

Yukarıdaki kodun, 5. satırında, a isminde iki boyutlu (3×3 boyutlarında) bir dizi tanımlanmış ve içerisine aşağıdaki matris yerleştirilmiştir:

123

456

789

Bu matrisin ters yüz edilmesi aslında köşegenin (diagon), üst ve altındaki değerlerin simetrik olarak yer değiştirmesi ile mümkündür. Bu durumu anlamak için aşağıdaki şekilde matrisin iki boyutlu indislerini inceleyelim:

a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
a[2][0] a[2][1] a[2][2]

Yukarıdaki matrisin tersyüzü aşağıdaki şekilde yazılabilir:

a[0][0] a[1][0] a[2][0]
a[0][1] a[1][1] a[2][1]
a[0][2] a[1][2] a[2][2]

Görüldüğü üzere, tabloda, köşegen değerleri yani a[i][j] olarak kodlanan bir matris için, i=j durumundaki değerler sabit kalmış bunun dışındaki değerler için

a[i][j] = a[j][i]

olarak değişmiştir. Yani matristeki satır değerleri sütun ve sütun değerleri satır ile değiştirilmiştir.

Yukarıda verilen kodun 8-10 satırları arasında da bu yer değiştirme işlemi yapılmaktadır (Swap)

Kodda dikkat edilecek bir diğer husus ise 7 satırda bulunan döngünün j<i kadar dönmesidir. Bunun sebebi a[i][j] değerini a[j][i] ile yer değiştirdikten sonra değişen i ve j değerleri ile işlemin geri alınmasını engellemektir.

Diğer bir deyişle i değeri 0-3 ve j değeri 0-3 aralığında değişiyor olsaydı örneğin a[1][2] değeri öncei a[2][1] ile yer değiştirecek sonra da i ve j değerleri ilerleyip a[2][1] değerini geri a[1][2] ile değiştirecekti. Sonuçta matris hiç değişmeden çıkmış olacaktı. Okuyucu, dilerse yukarıdaki kodun 7. satırını j<3 olarak değiştirerek bu durumu deneyebilir.

Son olarak kodumuzun 13-18 satırları arasında dizinin içeriği ekrana bastırılmaktadır. Kodun ekran çıktısı aşağıda verilmiştir:

Yorumlar

  1. Fatih Kabakci

    int main(){
    int matrix[4][2]={{1,2},{3,4},{5,6},{7,8}};
    for(int i=0;ii;j--){
    int temporary=matrix[i][j];
    matrix[i][j]=matrix[j][i];
    matrix[j][i]=temporary;
    }
    }
    for(int i=0;i<2;i++){
    for(int j=0;ji;j--){ su kısmı birturlu cıkartamadım.nasıl duzeltebilirim kodun doru çıktı vermesi icin?

  2. Fatih Kabakci

    Hocam bi onceki yorumumun hepsi cıkmamıs soru kısmını bidaha yazıyorum bu yorumda=..
    Hocam bu kodda tranzpozu alırken,dongude for(int j=4;j>i;j--){ su kısmı birturlu cıkartamadım.nasıl duzeltebilirim kodun doru çıktı vermesi icin?

  3. Şadi Evren ŞEKER Article Author

    Sorularınıza binaen yukarıdaki yazıya kodlama ile ilgili bir bölüm ekledim. Umarım yardımcı olur

    başarılar

  4. aae,sdü,bilgmühöğrnc.

    buyrun arkadaşlar az önce yazdım bunu

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    public static void main (String [] args)
    		{
     
     
    			int [][] dizi = {{2,4},{7,2},{8,2}};
     
     
     
     
    				for (int i=0;i<3;i++)
    				{
    					for(int k=0;k<2;k++)
    					{
     
    						System.out.print("["+dizi[i][k]+"]");
     
    					}
    					System.out.println();
    				}
    			System.out.println("********************");
    			for (int i=0;i<2;i++)
    			{
    				for(int k=0;k<3;k++)
    				{
     
    					System.out.print("["+dizi[k][i]+"]");
     
    				}
    				System.out.println();
    			}
     
    }
  5. Şadi Evren ŞEKER Article Author

    3x4 bir matrisin transpozesi 4x3 boyutlarında bir matristir. Sorunuz kodlama ile nasıl yapılacağı ise bunun en kolay yolu dinamik hafıza kullanmak ve matris boyutlarını öğrendikten sonra, bu boyutlara uygun bir matris oluşturmaktır. Aşağıda gösterici (pointer) kullanarak bir dizinin nasıl işlendiğini anlatan bir yazı bulunuyor:

    http://www.bilgisayarkavramlari.com/2007/10/16/pointer-gosterici-2/

    Yine de problem yaşarsanız, daha detaylı olarak konuyu anlatabilirim.

    Başarılar

  6. merve

    hocam benim acilen cevaplanması gereken bir sorum var...

    Şimdi 10 10 satır ve sütunlu matrisi içeren (bu sayılar sadece 0 ve 1 içerir ve her sayı arasında sayı vardır) bir input.txt dosyamız var.Bu dosyadan okuma yaparak içinde aynen tetris oyunundaki gibi düz L ya da ters L vardır(bunlar 1'ler gruplandırılarak belirtiliyor)

    Bu 10 10 matrisinin herhangi bir yerinde bulunan (ki bunun koordinatını biz belirlememiz gerekiyor) düz ya da ters L harfini bulan ve bu L harfini saat yönünde 90 derece döndürüp tekrar output.txt dosyasına yazdırmam gerekiyor.Kullanıcı ile hiç bir etkileşimi olmayacak programın.Ve 10 10 köşegenlerine gelen L harfi döndürülünce taşma olduğunda sığmayacağından köşeler ihmal edilebilir.

    Örnek:

    input.txt
    0 0 0 0 0 0 0 0 0 0
    0 0 0 1 0 0 0 0 0 0
    0 0 0 1 0 0 0 0 0 0
    0 0 0 1 1 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0

    output.txt
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 1 1 1 0 0 0 0
    0 0 0 1 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0

    input2.txt
    0 0 0 0 0 0 0 0 0 0
    0 0 0 1 0 0 0 0 0 0
    0 0 0 1 0 0 0 0 0 0
    0 0 1 1 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0

    output2.txt
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 1 0 0 0 0 0 0
    0 0 0 1 1 1 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0

  7. naciye

    hocam elimde 8x80 boyutlu bir X matrisi var ben buX matrisinin sütunlarını 1x8 şeklinde matrisler olarak tanımladım yani x(i) =[1,8]. şimdi ben iççrpımını yani xi nin transpozu ile xj matrislerinin çarpımını bulmak istiyorum kodu nasıl olmalı.
    yardım ederseniz çok sevinirim

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


8 + bir =