C# 2x2 Matrisin Tersi ve Çarpımı Matrix Inverse

İkiye ikilik bir matrissin tersini alırken iki yöntem bulunmaktadır. Birinci yöntem determinant ile yapımı, ikinci yöntemimiz birim matris ile yapımı. 2x2 lik Matrislerin Çarpımıda bulunmaktadır.

Determinant ile Tersini Alma İlk matematiksel förmülümüzü bilmemiz lazım :

Formülümüzü öğrenmiş olduğumuza göre koda dökelim.

Kullanıcı textbox aracılığıyla 2x2 olan matrisimizin verilerini istiyoruz ve bir buton yardımıyla işlemimizi yapıyoruz.

//btn_detTersi_click ' in içine
  int[,] matrixA = new int[2, 2]; //çok boyutlu matrisimizi oluşturduk
  matrixA[0, 0] = int.Parse(txt_0x0.Text);
  matrixA[0, 1] = int.Parse(txt_0x1.Text);
  matrixA[1, 0] = int.Parse(txt_1x0.Text);
  matrixA[1, 1] = int.Parse(txt_1x1.Text);

 //Detarminant Hesaplama için kullanılan değişkenlerimiz
  float sonucDetarminant=0;
  float tut = 1;
  float tut2 = 1;

 //Tersi için çok boyutlu bir dizi tanımlıyoruz
 double[,] tersi = new double[matrixA.GetUpperBound(0) + 1, matrixA.GetUpperBound(1) + 1];
 //Formülden gittiğimiz için determinantımızı hesaplama işlemi yapıyoruz
 for (int i = 0; i <= matrixA.GetUpperBound(0); i++)
   {
    for (int j = 0; j <= matrixA.GetUpperBound(1); j++)
    {
    if (i == j) //  0x0 ve 1x1 ise girsin
      {
          tut *= matrixA[i, j]; // 
      }
    else if (i != j)//  0x1 ve 1x0 ise girsin
      {
         tut2 *= matrixA[i, j];
      }
    }
  }
  //Detarminant Hesaplama Sonuc Ve Sonucu Ekrana Yazma
  lbl_det.Text =  (tut-tut2).ToString();
  sonucDetarminant = tut - tut2;
  //Şöyle bir koşul da yazabiliriz
  //Determinant sıfır ise tersini bulunmaz
  if(sonucDetarminant ==0)
      MessageBox.Show("Bu Matrisin Detarminantı 0 Olduğundan Tersi Yoktur!", 
     "Matris Tersini Alma", MessageBoxButtons.OK, 
      MessageBoxIcon.Information);
 else{
  //Tersini alma işlememi
 for (int i = 0; i <= tersi.GetUpperBound(0); i++) {
 for (int j = 0; j <= tersi.GetUpperBound(1); j++) {
 if (i == j)
 {
 //burada yaptıgım işlem 0x0 geliyor ben tersine  1x1 atıyorum 
 //eğer 1x1 gelirse 0x0 atamıs yanı yer değiştirmis oldum
 tersi[tersi.GetUpperBound(0) - i, tersi.GetUpperBound(1) - i] = matrixA[i, j]; 
 tersi[tersi.GetUpperBound(0) - i, tersi.GetUpperBound(1) - i] = tersi[tersi.GetUpperBound(0) - i,tersi.GetUpperBound(1) - i] /   sonucDetarminant;
}
else if (i != j)
 {
     tersi[i, j] = (-matrixA[i, j]);//- işareti formülden geliyor
     tersi[i, j] = tersi[i, j] / sonucDetarminant;
  }
 }
}
 //En son olarak da yazdırma işlemi
 foreach (var item in tersi)
  {
  listBox_tersi.Items.Add(item);
  }
 }

İkinci yöntemimiz Birim Matris ile Tersini alma

//BirimMatriksini tanımlıyoruz
   float[,] birimMatrix = new float[2, 2];
   birimMatrix[0, 0] = 1;
   birimMatrix[0, 1] = 0;
   birimMatrix[1, 0] = 0;
   birimMatrix[1, 1] = 1;

   //Kullanıcağımız değişkenler
   float tut = 0;
   float carp =0;
   //MatrixA yı yukarıda tanımlamıştık 
   for (int i = 0; i < 2; i++)
   {
   for (int j = 0; j < 1; j++)
   {
   if (i == j)
   {// 0x0 ise buraya girsin ve birim matris tersi formulumuzu uygulayalım
   // Yani 0 satırımızın bırım matrix dahil
   // tut değerine böl
   tut = matrixA[i, j];

   matrixA[i, j] = (matrixA[i, j] / tut);
   matrixA[i, j + 1] = matrixA[i, j + 1] / tut;

   birimMatrix[i, j] = (birimMatrix[i, j]) / tut;
   birimMatrix[i, j + 1] = (birimMatrix[i, j + 1]) / tut;
   }
   else
   {//1x0 ise else gir
   // 0. satırlar ile carp değişkeni ile çarp ve
   // Kendinden çıkar ve kendi yerine yaz
   //Örnek 1x0 değeri =1  ,  yukarıdaki karsılıgı 0x0 onun değeride =2
   // 1x0 = 1 - (1 * 2) 'dir. 1x0 ' ın yeni değerini atamış olduk.
   carp = matrixA[i, j];//1,0

   matrixA[i, j] = matrixA[i, j] - (matrixA[i - 1, j] * carp);
   matrixA[i, j + 1] = matrixA[i, j + 1] - (matrixA[i - 1, j + 1] * carp);

   birimMatrix[i, j] = birimMatrix[i, j] - (birimMatrix[i - 1, j] * carp);
   birimMatrix[i, j + 1] = birimMatrix[i, j + 1] - (birimMatrix[i - 1, j + 1] * carp);
   }
  }
 }
  for (int i = 1; i >= 0; i--)
  {
  for (int j = 1; j > 0; j--)
  {
  if (i == j)
  {
  tut = matrixA[i, j];//1 1

  matrixA[i, j] = (matrixA[i, j] / tut);
  matrixA[i, j - 1] = matrixA[i, j - 1] / tut;

  birimMatrix[i, j] = (birimMatrix[i, j]) / tut;
  birimMatrix[i, j - 1] = (birimMatrix[i, j - 1]) / tut;
  }
  else
  {
  carp = matrixA[i, j];//0,1 yukarıyı yazma 

  matrixA[i, j - 1] = matrixA[i, j - 1] - (matrixA[i + 1, j] * carp);
  matrixA[i, j] = matrixA[i, j] - (matrixA[i + 1, j] * carp); 

  birimMatrix[i, j - 1] = birimMatrix[i, j - 1] - (birimMatrix[i + 1, j - 1] * carp);
  birimMatrix[i, j] = birimMatrix[i, j] - (birimMatrix[i + 1, j] * carp);
   }
  }
 }
 //VE son olarak da ekrana yazıyoruz
 for (int i = 0; i < 2; i++)
  {
   for (int j = 0; j < 2; j++)
     {
      listBox_tersi2.Items.Add(birimMatrix[i, j]);
     }
  }

Projemizin son hali. Aynı zamanda Matris Çarpımı da içinde bulunuyor.