ВУЗ:
Составители:
Рубрика:
Объектно-ориентированное программирование на С++
// метод вычисления определителя
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
Страницы
- « первая
- ‹ предыдущая
- …
- 147
- 148
- 149
- 150
- 151
- …
- следующая ›
- последняя »
