C# İle İki Matrisin Çarpımı

Bugün bizim okulda matematik sınavında gözetmendim. Sorulardan biri iki matrisin çarpımı ile ilgili olunca, ben de bu yazıyı yazayım dedim :)

Matris ve matris işlemleri ile ilgili bilgi için buraya göz atabilirsiniz.

Bu yazının konusu iki matrisin çarpımı olduğu için, sadece bu işlemi C# nasıl yapabileceğimizi göstermek istedim.

Matematikteki matrisin C# taki karşılığı DİZİ (Arrays) lerdir.

2x2 lik A matrisinin C# taki karşılığı şöyledir:

int[,] A = { {2, -1}, {0, 5} };

veya

var A = new int[,] { {2, -1}, {0, 5} };

 

Çarpım işlemi şu şekilde tanımlanmaktadır:

Örnek:

Bilmeyenler için bir bilgi daha: İki matrisi çarpabilmek için; 1. matrisin sütun sayısı ile ikinci satırın satır sayısı eşit olmalıdır.

 

Artık C# kodumuza geçebiliriz:

int[,] A = { { 1, 0, 2 }, { -1, 3, 1 } };
int[,] B = { { 3, 1 }, { 2, 1 }, { 1, 0 } };
int[,] C = new int[A.GetUpperBound(0) + 1, B.GetUpperBound(1) + 1];

// A nın satır sayısı kadar
for (int i = 0; i <= A.GetUpperBound(0); i++)
{
    // B nin sütun sayısı kadar
    for (int j = 0; j <= B.GetUpperBound(1); j++)
    {
        int toplam = 0;
        // A nın sütun sayısı kadar
        // (ya da B nin satır sayısı)
        for (int k = 0; k <= A.GetUpperBound(1); k++)
        {
            toplam += A[i, k] * B[k, j];
        }
        C[i, j] = toplam;
    }
}

Bu kadar. 

Sonuç:

A (2x3)
  0 1 2
0 1 0 2
1 -1 3 1
B (3x2)
  0 1
0 3 1
1 2 1
2 1 0
C (2x2)
  0 1
0 5 1
1 4 2

 

Herkese kolay gelsin.


Dipnot:

GetUpperBound(x) metodu, ilgili dizinin x. boyutundaki son elemanın indis sayısını verir. 

Örnek:

A dizisi için;

A.GetUpperBound(0) = 1
A.GetUpperBound(1) = 2 

olur.