Объектно-ориентированное программирование на C++. Андрианова А.А - 148 стр.

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
миноры. Поэтому в класс QMatrix добавим метод формирования
подматрицы, полученной из исходной вычеркиванием заданной строки и
заданного столбца. Как известно, определитель такой подматрицы
является одним из миноров исходной матрицы.
// метод получения подматрицы
QMatrix QMatrix::SubMatrix(int i1, int j1)
{
// матрица-результат имеет
// порядок на 1 меньше исходной
QMatrix temp(n - 1);
// формируем новую матрицу, игнорируя
// строку с номером i1 и столбец с номером j1
for(int i = 0; i < i1; i++)
{
for(int j = 0;j < j1; j++)
temp.a[i][j] = a[i][j];
for(int j = j1 + 1; j < n; j++)
temp.a[i][j - 1] = a[i][j];
}
for(int i = i1 + 1; i < n; i++)
{
for(int j = 0; j < j1; j++)
temp.a[i - 1][j] = a[i][j];
for(int j = j1 + 1; j < n; j++)
temp.a[i - 1][j - 1] = a[i][j];
}
return temp;
}
Согласно теореме Лапласа определитель матрицы Q (det(Q))
равен сумме произведений элементов строки (столбца) на их
алгебраические дополнения:
ininiiii
AqAqAqQ
+++=
...)det(
2211
,
где
ij
ji
ij
MA
+
=
)1(
,
ij
M
дополнительный минор элемента
ij
q
(определитель матрицы, полученной вычеркиванием из исходной строки
с номером i и столбца с номером j).
Согласно этой формуле для вычисления определителя n-ого порядка
требуется вычислить n определителей (n-1)-ого порядка. Поэтому
метод вычисления определителя матрицы будет рекурсивным.
148
                                               Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
миноры. Поэтому в класс QMatrix добавим метод формирования
подматрицы, полученной из исходной вычеркиванием заданной строки и
заданного столбца. Как известно, определитель такой подматрицы
является одним из миноров исходной матрицы.

      // метод получения подматрицы
      QMatrix QMatrix::SubMatrix(int i1, int j1)
      {
           // матрица-результат имеет
           // порядок на 1 меньше исходной
           QMatrix temp(n - 1);
           // формируем новую матрицу, игнорируя
           // строку с номером i1 и столбец с номером j1
           for(int i = 0; i < i1; i++)
           {
                for(int j = 0;j < j1; j++)
                     temp.a[i][j] = a[i][j];
                for(int j = j1 + 1; j < n; j++)
                     temp.a[i][j - 1] = a[i][j];
           }
           for(int i = i1 + 1; i < n; i++)
           {
                for(int j = 0; j < j1; j++)
                     temp.a[i - 1][j] = a[i][j];
                for(int j = j1 + 1; j < n; j++)
                     temp.a[i - 1][j - 1] = a[i][j];
           }
           return temp;
      }

    Согласно теореме Лапласа определитель матрицы Q (det(Q))
равен сумме произведений элементов строки (столбца) на их
алгебраические дополнения:

      det(Q) = qi1 Ai1 + qi 2 Ai 2 + ... + qin Ain ,

                  i+ j
где Aij = (− 1) M ij , M ij – дополнительный минор элемента qij
(определитель матрицы, полученной вычеркиванием из исходной строки
с номером i и столбца с номером j).
    Согласно этой формуле для вычисления определителя n-ого порядка
требуется вычислить n определителей (n-1)-ого порядка. Поэтому
метод вычисления определителя матрицы будет рекурсивным.



148