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:
for(int j=0;j
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
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
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
hocam elimde 8×80 boyutlu bir X matrisi var ben buX matrisinin sütunlarını 1×8 ş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
girilen sayıları toplama ve çarpma olarak nasıl yapacağız satır sutun olarak