Объектно-ориентированное программирование на С#. Андрианова А.А - 92 стр.

UptoLike

92
det += temp.Determinant() * a[0,j];
else
det -= temp.Determinant() * a[0,j];
}
return det;
}
// метод получения обратной матрицы
public static QMatrix operator ~(QMatrix m)
{
int rows = m.Rows;
QMatrix res= new QMatrix(rows);
// вычисление определителя матрицы
double det = m.Determinant();
// если матрица вырожденная,
// обратной матрицы не существует
if(det == 0)
throw new Exception("Матрица вырожденная");
// вычисление транспонированной матрицы
// алгебраических дополнений
QMatrix temp = new QMatrix(rows - 1);
int z;
for(int i = 0; i < rows; i++)
{
z = i%2==0 ? 1 : -1;
for(int j = 0; j < rows; j++)
{
temp = m.SubMatrix(i, j);
res[j,i] = z * temp.Determinant() / det;
z = -z;
}
}
return res;
}
}
В новых методах используются элементы базового класса сама
матрица (поле a), свойство Rows и индексатор доступа к элементам
матрицы.
Продемонстрируем использование новых методов класса:
static void Main(string[] args)
{
try
{
QMatrix x, y, z;
x = new QMatrix(2);
x.InputMatrix();
x.OutputMatrix();
// вычисление определителя квадратной матрицы
Console.WriteLine("Определитель: " +
                  det += temp.Determinant() * a[0,j];
                else
                   det -= temp.Determinant() * a[0,j];
              }
              return det;
          }

          // метод получения обратной матрицы
          public static QMatrix operator ~(QMatrix m)
          {
             int rows = m.Rows;
             QMatrix res= new QMatrix(rows);
             // вычисление определителя матрицы
             double det = m.Determinant();
             // если матрица вырожденная,
             // обратной матрицы не существует
             if(det == 0)
                throw new Exception("Матрица вырожденная");
             // вычисление транспонированной матрицы
             // алгебраических дополнений
             QMatrix temp = new QMatrix(rows - 1);
             int z;
             for(int i = 0; i < rows; i++)
             {
                z = i%2==0 ? 1 : -1;
                for(int j = 0; j < rows; j++)
                {
                   temp = m.SubMatrix(i, j);
                   res[j,i] = z * temp.Determinant() / det;
                   z = -z;
                }
             }
             return res;
          }
      }

     В новых методах используются элементы базового класса – сама
матрица (поле a), свойство Rows и индексатор доступа к элементам
матрицы.
     Продемонстрируем использование новых методов класса:

     static void Main(string[] args)
     {
        try
        {
           QMatrix x, y, z;
           x = new QMatrix(2);
           x.InputMatrix();
           x.OutputMatrix();
           // вычисление определителя квадратной матрицы
           Console.WriteLine("Определитель: " +

92