Makale Özeti

Bu makalemin ilk kısmında bir veri tipi olarak Matris(Matrix)'i nasıl kullanabileceğimizi açıklamaya çalışmıştık. Bu kısımda ise ilk kısımda görüp geliştirdiğimiz bilgilerimizi ve metodlarımızı daha geliştirip biraz daha derinlemesine özellikleri inceleyeceğiz.

Makale

         Merhabalar,

         Bu makalemin ilk kısmında bir veri tipi olarak Matris(Matrix)'i nasıl kullanabileceğimizi açıklamaya çalışmıştık. Bu kısımda ise ilk kısımda görüp geliştirdiğimiz bilgilerimizi ve metodlarımızı daha geliştirip biraz daha derinlemesine özellikleri inceleyeceğiz.

          Bir azaltım metodunda ise bir arttırım metodunda yaptığımız işin tam tersini yaparak elemanların değerlerini birer azaltıyoruz.

            public static Matrix operator *(Matrix pMatrix1, Matrix pMatrix2)
            {
                  if (pMatrix1.ColumnCount != pMatrix2.RowCount)
                  {
                        throw new Exception("Boyut Uyusmazligi");
                  }
                  Matrix returnMatrix = new Matrix(pMatrix1.RowCount, pMatrix2.ColumnCount);
                  for (int i = 0; i<pMatrix1.RowCount; i++)
                  {
                        decimal[] rowValues = pMatrix1.GetRow(i);
                        for (int j = 0; j<pMatrix2.ColumnCount; j++)
                        {
                             decimal[] columnValues = pMatrix2.GetColumn(j);
                             decimal value=0;
                             for (int a = 0; a < rowValues.Length; a++)
                             {
                                   value+=rowValues[a] * columnValues[a];
                             }
                             returnMatrix[i, j] = value;
                        }
                  }
                  return returnMatrix;
            }

          Matrislerde en karışık işlemlerden biri olarak tanımlanan iki matrisin çarpımı işlemi ise ilk matristeki satır elemanlarının sırayla ikinci matriste bulunan sütun elemanları ile çarpılması ve daha sonra tek tek toplanmasıdır. Sonuç matrisinde bulunan değer hangi satır ile hangi sütun çarpılmış ise buna denk gelen elemana yazılmasıdır. İlk matrisin satır sayısının ikinci matrisin sütun sayısına eşitliğinin gerekliliği çarpma işlemi için değişmez bir kuraldır. Ve çarpma işlemi sonucunda ortaya çıkan matris ilk matrisin satır ikinci matrisin sütun sayısının boyutlarında olacaktır.

            public Matrix Transpose()
            {
                  Matrix mReturnMartix = new Matrix(ColumnCount, RowCount);
                  for (int i = 0; i < mRowCount; i++)
                  {
                        for (int j = 0; j < mColumnCount; j++)
                        {
                             mReturnMartix[j, i] = mInnerMatrix[i, j];
                        }
                  }
                  return mReturnMartix;
            }

          Bir matrisin transpoze sini almak demek tüm satırları sütun olarak vede tüm sütunları satır olarak yazmak demektir. Yenı bır matris oluşturup ikitane for döngüsünü iç içe kullanarak bu özelliği nasıl geliştirebileceğimizi görüyoruz.

            public override bool Equals(object obj)
            {
                  return base.Equals(obj);
            }
            public override int GetHashCode()
            {
                  return base.GetHashCode();
            }

          Operator overloading yapıp = metodunu tanımladığımız zaman tanımlamamız gereken bu metodlarıda tanımlıyoruz.

            public bool IsZeroMatrix()
            {
                  for (int i = 0; i < this.RowCount; i++)
                  {
                        for (int j = 0; j < this.ColumnCount; j++)
                        {
                             if (mInnerMatrix[i, j] != 0)
                             {
                                   return false;
                              }
                        }
                  }
                  return true;
            }

          Bu metodda matrisimizin sıfır matris olup olmadığını kontrol ediyoruz. Bir matrisin sıfır matris olabilmesi için gerekli koşul ise tüm elemanlarının sıfır olmasıdır.

            public bool IsSquareMatrix()
            {
                  return (this.RowCount == this.ColumnCount);
            }

          Bu metodda ise bir matrisin kare matris olup olmadığını kontrol ediyoruz. Bir matrisin kare matris olması demek ise satır sayısının sütun sayısına eşit olması demektir.

            public bool IsLowerTriangle()
            {
                  if (!this.IsSquareMatrix())
                  {
                        return false;
                  }
                  for (int i = 0; i < this.RowCount; i++)
                  {
                        for (int j = i+1; j<this.ColumnCount; j++)
                        {
                             if (mInnerMatrix[i, j] != 0)
                             {
                                   return false;
                             }
                        }
                  }
                  return true;
            }

          Bir matrisin alt üçgen matris olabilmesi için üst sol elemandan başlayan ve alt sağ elemana kadar inen köşegenin (bu köşegenden kare matrislerde bahsedebiliriz.) üst kısmında bulunan tüm elemanların sıfır olması gerekmektedir.

            public bool IsUperTriangle()
            {
                  if (!this.IsSquareMatrix())
                  {
                        return false;
                  }
                  for (int i = 0; i < this.RowCount; i++)
                  {
                        for (int j = 0; j < i; j++)
                        {
                             if (mInnerMatrix[i, j] != 0)
                             {
                                   return false;
                             }
                        }
                  }
                  return true;
            }

          Bir matrisin üst üçgen matris olabilmesi için üst sol elemandan başlayan ve alt sağ elemana kadar inen köşegenin (bu köşegenden kare matrislerde bahsedebiliriz.) alt kısmında bulunan tüm elemanların sıfır olması gerekmektedir.

            public bool IsDiagonalMatrix()
            {
                  if (!this.IsSquareMatrix())
                  {
                        return false;
                  }
                  for (int i = 0; i < this.RowCount; i++)
                  {
                        for (int j = 0; j < this.ColumnCount; j++)
                        {
                             if (i!=j && mInnerMatrix[i, j] != 0)
                             {
                                   return false;
                             }
                        }
                  }
                  return true;
            }

          Bir matrisin alt üçgen matris olabilmesi için üst sol elemandan başlayan ve alt sağ elemana kadar inen köşegenin (bu köşegenden kare matrislerde bahsedebiliriz.) dışında bulunan tüm elemanların sıfır olması gerekmektedir.

            public bool IsIdentityMatrix()
            {
                  if (!this.IsSquareMatrix())
                  {
                        return false;
                  }
                  for (int i = 0; i < this.RowCount; i++)
                  {
                        for (int j = 0; j < this.ColumnCount; j++)
                        {
                             decimal checkValue=0;
                             if (i == j)
                             {
                                   checkValue=1;
                             }
                             if (mInnerMatrix[i, j] != checkValue)
                             {
                                   return false;
                             }
                        }
                  }
                  return true;
            }

          Identity matris ise köşegenindeki tüm elemanlar 1 olan ancak köşegen dışındaki tüm elemanları 0 olan matristir.

            public bool IsSymetricMatrix()
            {
                  if (!this.IsSquareMatrix())
                  {
                        return false;
                  }
                  Matrix transposeMatrix = this.Transpose();
                  if (this == transposeMatrix)
                  {
                        return true;
                  }
                  else
                  {
                        return false;
                  }
            }

          Simetrik matris ise transpoze si alındığı zaman kendisine eşit olan matristir.

Bu makalede bir değişkenin yeni baştan nasıl yazılabileceğini inceledik ve bir değişken yazmak için o değişkenin matematiksel özelliklerinin çok iyi irdelenmiş olması gerektiğini gördük. Sizlerde istediğiniz bir matematiksel ifadeyi değişken haline getirerek kullanabilirsiniz. Örnek olarak vektörler veya 3 boyutlu matrisleri incelemenizi tavsiye ederim.

oztamer@hotmail.com
tamer.oz@yazgelistir.com
oztamer@hotmail.com
Ornek uygulama