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:

2,795 views

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?
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?
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?
Sorularınıza binaen yukarıdaki yazıya kodlama ile ilgili bir bölüm ekledim. Umarım yardımcı olur
başarılar
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(); } }3*4 bi matrisin transpozesini nasl alıcaz
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