Вычисление определителя матрицы методом Гаусса
Будем выполнять те же самые действия, что и при решении системы линейных уравнений методом Гаусса, исключив только деление текущей строки на a[i][i] (точнее, само деление можно выполнять, но подразумевая, что число выносится за знак определителя). Тогда все операции, которые мы будем производить с матрицей, не будут изменять величину определителя матрицы, за исключением, быть может, знака (мы только обмениваем местами две строки, что меняет знак на противоположный, или прибавляем одну строку к другой, что не меняет величину определителя).
Но матрица, к которой мы приходим после выполнения алгоритма Гаусса, является диагональной, и определитель её равен произведению элементов, стоящих на диагонали. Знак, как уже говорилось, будет определяться количеством обменов строк (если их нечётное, то знак определителя следует изменить на противоположный). Таким образом, мы можем с помощью алгоритма Гаусса вычислять определитель матрицы за O (N3).
Осталось только заметить, что если в какой-то момент мы не найдём в текущем столбце ненулевого элемента, то алгоритм следует остановить и вернуть 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | const double EPS = 1E-9; int n; vector < vector<double> > a (n, vector<double> (n)); ... чтение n и a ... double det = 1; for (int i=0; i<n ; ++i) { int k = i; for (int j=i+1; j<n; ++j) if (abs (a[j][i]) > abs (a[k][i])) k = j; if (abs (a[k][i]) < EPS) { det = 0; break; } swap (a[i], a[k]); if (i != k) det = -det; det *= a[i][i]; for (int j=i+1; j<=n; ++j) a[i][j] /= a[i][i]; for (int j=0; j<n; ++j) if (j != i && abs (a[j][i]) > EPS) for (int k=i+1; k< =n; ++k) a[j][k] -= a[i][k] * a[j][i]; } cout << det; |
- Очень многих интересует вопрос как заработать на своем сайте. Читайте и зарабатывайте! Тут нет ничего сложного.
- Вы видели когда-нибудь дома с кровлей, в основе которой лежат полимерные кровельные мембраны? Лично я даже не представлял, что это такое, пока не наткнулся на сайт s-i-v.ru
Прокомментировать
Рубрики
- javascript
- SEO
- Smarty
- UIPI
- Боремся со СПАМом
- Верстка
- Движки форумов
- Железо
- Забавно
- Интернет в лицах
- Интернет-магазины
- Новости
- Обзоры сайтов
- Обо всем
- Полезные скрипты
- Работа с CMS
- Создание сайтов
- Уроки рекламы
- Шаблоны
