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

UptoLike

Объектно-ориентированное программирование на С++
(генерация исключения равенства нулю определителя предусмотрена в
методе вычисления обратной матрицы класса Matrix) .
// Функция решения СЛАУ с помощью обратной матрицы
void Slau::InverseMatrix()
{
// проверка, является ли матрица прямоугольной
if(m != n)
throw NonSquareMatrixException();
// вычисление обратной матрицы
Matrix obr = ~ a;
// поскольку для эффективного использования памяти
// вектор хранится как строка, требуется получить
// соответствующий вектор-столбец посредством
// транспонирования
Matrix b = !(this->b);
// получение решения СЛАУ
x = obr * b;
x = ! x;
rang = m;
isSolved = true;
}
Метод исключения Жордана-Гаусса может быть применен, как в
ситуации, когда СЛАУ имеет единственное решение, так и когда этих
решений бесконечно много. Проведение исключений всех строк по i-ой
строке осуществляется по формулам Жордана-Гаусса:
nj
a
a
a
ii
ij
ij
..1,
==
ikmknj
a
a
aaa
ii
ij
kikjkj
===
,..1,..1,
ii
i
i
a
b
b
=
ikmk
a
b
abb
ii
i
kikk
==
,..1,
Эти формулы определяют эквивалентное преобразование СЛАУ, которое
не меняет ее решение и позволяет определить ранг матрицы
коэффициентов. Напомним, что ранг это максимальный порядок
минора матрицы, отличный от нуля. Посредством исключения нужно
205
                                           Объектно-ориентированное программирование на С++
(генерация исключения равенства нулю определителя предусмотрена в
методе вычисления обратной матрицы класса Matrix) .
    // Функция решения СЛАУ с помощью обратной матрицы
    void Slau::InverseMatrix()
    {
         // проверка, является ли матрица прямоугольной
         if(m != n)
              throw NonSquareMatrixException();
         // вычисление обратной матрицы
         Matrix obr = ~ a;
         // поскольку для эффективного использования памяти
         // вектор хранится как строка, требуется получить
         // соответствующий вектор-столбец посредством
         // транспонирования
         Matrix b = !(this->b);
         // получение решения СЛАУ
         x = obr * b;
         x = ! x;
         rang = m;
         isSolved = true;
    }

    Метод исключения Жордана-Гаусса может быть применен, как в
ситуации, когда СЛАУ имеет единственное решение, так и когда этих
решений бесконечно много. Проведение исключений всех строк по i-ой
строке осуществляется по формулам Жордана-Гаусса:

             aij
     aij =         ,   j = 1..n
             aii
                         aij
     akj = akj − aki            ,    j = 1..n, k = 1..m, k ≠ i
                         aii

             bi
     bi =
             aii
                        bi
     bk = bk − aki          ,       k = 1..m, k ≠ i
                        aii

Эти формулы определяют эквивалентное преобразование СЛАУ, которое
не меняет ее решение и позволяет определить ранг матрицы
коэффициентов. Напомним, что ранг – это максимальный порядок
минора матрицы, отличный от нуля. Посредством исключения нужно

                                                                                       205