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

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
=
j
j
x
,
,..1 nj
=
где
определитель матрицы А, а
j
- определитель матрицы, в которой
j столбец исходной матрицы заменен на вектор свободных членов.
Если определитель матрицы равен нулю, то будет сгенерировано еще
одно исключение ZeroDevideException.
// Функция решения СЛАУ методом Крамера
void Slau::Kramer()
{
// проверка, не является ли матрица прямоугольной
if(m != n)
throw NonSquareMatrixException();
// вычисление определителя
double det = a.Determinant();
// матрицы коэффициентов
// проверка определенности системы
if(det == 0)
throw ZeroDevideException();
rang = m;
// вычисление корней по формулам Крамера
Matrix temp = a;
for(int j = 0; j < n; j++)
{
for(int i = 0; i < n; i++)
temp[i][j] = b[0][i];
x[0][j] = temp.Determinant() / det;
for(int i = 0; i < n; i++)
temp[i][j] = a[i][j];
}
isSolved = true;
}
В случае, если СЛАУ с квадратной матрицей
A
имеет единственное
решение, его можно получить по формуле:
BAX
1
=
, где
1
A
– обратная матрица к
A
.
Данная формула применима только в случаях, когда обратную
матрицу можно вычислить (матрица
A
квадратная, ее определитель не
равен 0). Нарушение этих условий приводит к генерации исключений
204
                                            Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.

             ∆
      xj =
                 j
                     , j = 1..n,
             ∆

где ∆ – определитель матрицы А, а ∆ j - определитель матрицы, в которой
j-й столбец исходной матрицы заменен на вектор свободных членов.
Если определитель матрицы равен нулю, то будет сгенерировано еще
одно исключение ZeroDevideException.

      // Функция решения СЛАУ методом Крамера
      void Slau::Kramer()
      {
           // проверка, не является ли матрица прямоугольной
           if(m != n)
                throw NonSquareMatrixException();
           // вычисление определителя
           double det = a.Determinant();
           // матрицы коэффициентов
           // проверка определенности системы
           if(det == 0)
                throw ZeroDevideException();
           rang = m;
           // вычисление корней по формулам Крамера
           Matrix temp = a;
           for(int j = 0; j < n; j++)
           {
                for(int i = 0; i < n; i++)
                     temp[i][j] = b[0][i];
                x[0][j] = temp.Determinant() / det;
                for(int i = 0; i < n; i++)
                     temp[i][j] = a[i][j];
           }
           isSolved = true;
      }

    В случае, если СЛАУ с квадратной матрицей A имеет единственное
решение, его можно получить по формуле:

                         X = A − 1 B , где A − 1 – обратная матрица к A .

    Данная формула применима только в случаях, когда обратную
матрицу можно вычислить (матрица A – квадратная, ее определитель не
равен 0). Нарушение этих условий приводит к генерации исключений


204