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

UptoLike

Объектно-ориентированное программирование на С++
// метод вычисления определителя
double QMatrix::Determinant()
{
double det = 0;
// определитель 1-ого порядка совпадает
// с единственным элементом матрицы
if(n == 1)
return a[0][0];
QMatrix temp(n - 1);
// раскладываем определитель по 0-ой строке
for(int j = 0; j < n; j++)
{
// получаем матрицу для вычисления
// минора элемента a
0j
temp = SubMatrix(0, j);
// добавляем очередное произведение элемента
// на его алгебраическое дополнение
if(j % 2 == 0)
det += temp.Determinant() * a[0][j];
else
det -= temp.Determinant() * a[0][j];
}
return det;
}
Для вычисления обратной матрицы для матрицы Q требуется найти
матрицу алгебраических дополнений (
ij
A
) элементов, транспонировать ее
и разделить на значение det(Q). Если матрица является вырожденной
(ее определитель равен нулю), обратной матрицы не существует. В этом
случае генерируется исключение ZeroDevideException.
// оператор получения обратной матрицы
QMatrix QMatrix::operator~()
{
QMatrix res(n);
// вычисление определителя матрицы
double det = Determinant();
// если матрица вырожденная,
// обратной матрицы не существует
if(det == 0)
throw ZeroDevideException();
// вычисление транспонированной матрицы
// алгебраических дополнений
QMatrix temp(n - 1);
int z;
for(int i = 0; i < n; i++)
{
149
                           Объектно-ориентированное программирование на С++
     // метод вычисления определителя
     double QMatrix::Determinant()
     {
          double det = 0;
          // определитель 1-ого порядка совпадает
          // с единственным элементом матрицы
          if(n == 1)
               return a[0][0];
          QMatrix temp(n - 1);
          // раскладываем определитель по 0-ой строке
          for(int j = 0; j < n; j++)
          {
               // получаем матрицу для вычисления
               // минора элемента a0j
               temp = SubMatrix(0, j);
               // добавляем очередное произведение элемента
               // на его алгебраическое дополнение
               if(j % 2 == 0)
                    det += temp.Determinant() * a[0][j];
               else
                    det -= temp.Determinant() * a[0][j];
          }
          return det;
     }

     Для вычисления обратной матрицы для матрицы Q требуется найти
матрицу алгебраических дополнений ( Aij ) элементов, транспонировать ее
и разделить на значение det(Q). Если матрица является вырожденной
(ее определитель равен нулю), обратной матрицы не существует. В этом
случае генерируется исключение ZeroDevideException.

     // оператор получения обратной матрицы
     QMatrix QMatrix::operator~()
     {
          QMatrix res(n);
          // вычисление определителя матрицы
          double det = Determinant();
          // если матрица вырожденная,
          // обратной матрицы не существует
          if(det == 0)
               throw ZeroDevideException();
          // вычисление транспонированной матрицы
          // алгебраических дополнений
          QMatrix temp(n - 1);
          int z;
          for(int i = 0; i < n; i++)
          {
                                                                        149