Matris Tersyüz (Matrix Transpose)

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:

Bu yazıyı beğendiyseniz, başkalarının da ilgisini çekebilirsiniz:


2,795 views

7 responses to “Matris Tersyüz (Matrix Transpose)”
  1. Fatih Kabakci says:

    for(int j=0;j<i;j++) Hocam matris transpose u yerdegistirme yontemiyle(temporary) hesaplarken,dongudeki j yi i ye kadar yazdırmamızın sebebi nedir? akabinde aynı koddaki = for(int j=0;j<3;j++){
    printf("%d ",matrix[i][j]);
    bolumdeki j yi i ye kadar degilde(ornegin bulundugu indise yani 3 e kadar yazdirmisiz).Bu iki nuans farkı nedir?

  2. Fatih Kabakci says:

    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?

  3. Fatih Kabakci says:

    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?

  4. Şadi Evren ŞEKER says:

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

    başarılar

  5. aae,sdü,bilgmühöğrnc. says:

    buyrun arkadaşlar az önce yazdım bunu

    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();
    			}
    
    }
    
  6. amaann says:

    3*4 bi matrisin transpozesini nasl alıcaz :)

  7. 3×4 bir matrisin transpozesi 4×3 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

Leave a Reply


dört + = 8

Benzer Yazılar:

Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Matris Tersyüz (Matrix Transpose)' isimli yazı 29 Dec 2008 tarihinde, saat: 06:02 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam2,795 defa okunmuştur.

Benzer yazıları Bilgisayar Matematiği kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.


Category: Bilgisayar Matematiği