det

Матричный детерминант

Синтаксис

d = det(A)

Описание

пример

d = det(A) возвращает детерминант квадратной матрицы A.

Примеры

свернуть все

Создайте 3х3 квадратную матрицу, A.

A = [1 -2 4; -5 2 0; 1 0 3]
A = 3×3

     1    -2     4
    -5     2     0
     1     0     3

Вычислите детерминант A.

d = det(A)
d = -32

Исследуйте, почему детерминант не является точной мерой особенности.

Создайте 10 10 матрица путем умножения единичной матрицы, eye(10), небольшим числом.

A = eye(10)*0.0001;

Матричный A имеет очень маленькие записи по основной диагонали. Однако A не сингулярен, потому что он является кратным единичной матрице.

Вычислите детерминант A.

d = det(A)
d = 1.0000e-40

Детерминант является чрезвычайно маленьким. Тест допуска формы abs(det(A)) < tol, вероятно, отметит эту матрицу как сингулярную. Несмотря на то, что детерминант матрицы близко к нулю, A на самом деле плохо не обусловливается. Поэтому A не близко к тому, чтобы быть сингулярным. Детерминант матрицы может быть произвольно близко к нулю, не передавая информацию об особенности.

Чтобы заняться расследованиями, если A сингулярен, используйте или cond или функции rcond.

Вычислите количество условия A.

c = cond(A)
c = 1

Результат подтверждает, что A плохо не обусловливается.

Исследуйте, как вычислить детерминант матричного обратного A^(-1), для плохо обусловленного матричного A, явным образом не вычисляя A^(-1).

Создайте 10 10 Гильбертову матрицу, A.

A = hilb(10);

Найдите количество условия A.

c = cond(A)
c = 1.6025e+13

Большой номер условия предполагает, что A близко к тому, чтобы быть сингулярным, настолько вычисляющий inv(A) может привести к неточным результатам. Поэтому обратное определяющее вычисление det(inv(A)) также неточно.

Вычислите детерминант инверсии A путем использования факта это

det(A-1)=1det(A)

d1 = 1/det(A)
d1 = 4.6202e+52

Этот метод старается не вычислять инверсию матрицы, A.

Вычислите детерминант точной инверсии Гильбертовой матрицы, A, с помощью invhilb. Сравните результат с d1, чтобы найти относительную погрешность в d1.

d = det(invhilb(10));
relError = abs(d1-d)/abs(d)
relError = 1.0443e-04

Относительная погрешность в d1 является довольно небольшой. Предотвращение явного вычисления инверсии A минимизирует его.

Для сравнения также вычислите детерминант инверсии A путем явного вычисления инверсии. Сравните результат с d, чтобы видеть относительную погрешность.

d2 = det(inv(A));
relError2 = abs(d2-d)/abs(d)
relError2 = 2.2039e-05

Относительная погрешность в вычислении d2 является многими порядками величины, больше, чем тот из d1.

Исследуйте матрицу, которая точно сингулярна, но которая имеет большой ненулевой детерминант. В теории детерминант любой сингулярной матрицы является нулем, но из-за природы вычисления с плавающей точкой, этот идеал не всегда достижим.

Создайте 13 13 по диагонали доминирующий сингулярный матричный A и просмотрите шаблон ненулевых элементов.

A = diag([24 46 64 78 88 94 96 94 88 78 64 46 24]);
S = diag([-13 -24 -33 -40 -45 -48 -49 -48 -45 -40 -33 -24],1);
A = A + S + rot90(S,2);
spy(A)

A сингулярен, потому что строки линейно зависят. Например, sum(A) производит вектор нулей.

Вычислите детерминант A.

d = det(A)
d = 1.0597e+05

Детерминант A является довольно большим несмотря на то, что A сингулярен. На самом деле детерминант A должен быть точно нулевым! Погрешность d происходит из-за агрегации ошибок округления в реализации MATLAB® разложения LU, который использование det вычислить детерминант. Этот результат демонстрирует несколько важных аспектов вычисления числовых детерминантов. Дополнительную информацию см. в разделе Limitations.

Входные параметры

свернуть все

Введите матрицу, заданную как квадратная числовая матрица.

Типы данных: single | double
Поддержка комплексного числа: Да

Ограничения

Избегайте использования det, чтобы исследовать, если матрица сингулярна из-за следующих ограничений. Используйте cond или rcond вместо этого.

ОграничениеРезультат

Значение детерминанта обычно не связано с количеством условия матрицы.

Детерминант матрицы может быть произвольно большим или маленьким, не изменяя номер условия.

det использует разложение LU, чтобы вычислить детерминант, который восприимчив к ошибкам округления с плавающей точкой.

Определяющее вычисление иногда численно нестабильно. Например, det может произвести детерминант большого значения для сингулярной матрицы, даже при том, что он должен иметь значение 0.

Алгоритмы

det вычисляет детерминант из треугольных факторов, полученных Исключением Гаусса с функцией lu.

[L,U] = lu(X)
s =  det(L)      % This is always +1 or -1 
det(X) = s*prod(diag(U))

Расширенные возможности

Смотрите также

| | | | | |

Представлено до R2006a