det

Определитель матрицы

Синтаксис

Описание

пример

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).

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

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