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.