det
определитель квадратной матрицы
Синтаксис
d = det(X) [e,m] = det(X)
Аргументы
- X
- квадратная матрица вещественных или комплексных чисел, полиномов или дробно-рациональных выражений. Принимаются разрежённо-кодированные матрицы.
- d
- Скаляр типа
X
: определительX
. ЕслиX
является разрежённо-кодированной, тоd
является плотной. - m
- вещественное или комплексное число: определитель мантиссы по основанию 10
abs(m) ∈ [1,10)
. Не поддерживается для полиномиального или дробно-рациональногоX
. - e
- целое: определитель экспоненты по основанию 10, такой, что
d = m * 10e
. Не поддерживается для полиномиального или дробно-рациональногоX
.
Описание
d = det(X) выдаёт определитель матрицы
X
.
Для полиномиальной или дробно-рациональной матрицы d=det(X)
использует determ(..)
, чей алгоритм основан на БПФ.
Альтернативно может использоваться d=detr(X)
, основанный
на алгоритме Леверье. Оба метода выдают одинаковые результаты. Для
дробно-рациональных матриц может потребоваться отключение simp_mode(%f)
для получения идентичных результатов.
[e, m] = det(X) может использоваться только
для матрицы чисел. Этот синтаксис позволяет преодолеть переполнение снизу
или сверху, когда abs(d)
меньше, чем
number_properties("tiny")
≈ 2,23 10-308
либо больше, чем
number_properties("huge")
≈ 1,80 10308.
Для плотных матриц det(..)
основан на процедуре из Lapack
DGETRF для вещественных матриц и ZGETRF для комплексных.
Для разрежённых матриц определитель получается из LU-разложения, благодаря библиотеке umfpack.
Примеры
A = rand(3,3)*5; det(A) [e, m] = det(A) // Матрица комплексных чисел: // A = grand(3,3,"uin",0,10) + grand(3,3,"uin",0,10)*%i A = [3+%i, 9+%i*3, 9+%i ; 8+%i*8, 4+%i*3, 7+%i*7 ; 4, 6+%i*2, 6+%i*9] det(A) [e, m] = det(A) abs(m) // in [1, 10)
--> A = rand(3,3)*5; --> det(A) ans = -10.805163 --> [e, m] = det(A) e = 1. m = -1.0805163 --> // Matrix of complex numbers: --> A = [3+%i, 9+%i*3, 9+%i ; 8+%i*8, 4+%i*3, 7+%i*7 ; 4, 6+%i*2, 6+%i*9] A = 3. + i 9. + 3.i 9. + i 8. + 8.i 4. + 3.i 7. + 7.i 4. + 0.i 6. + 2.i 6. + 9.i --> det(A) ans = 745. - 225.i --> [e, m] = det(A) e = 2. m = 7.45 - 2.25i --> abs(m) // in [1, 10) ans = 7.7823518
Очень большой или маленький определители: обработка переполнения снизу и сверху:
// Очень большой определитель: n = 1000; A = rand(n, n); det(A) [e, m] = det(A) // Очень маленький определитель (разрежённой кодированной матрицы): A = (triu(sprand(n,n,1)) + diag(rand(1,n)))/1.5; det(A) prod(diag(A)) [e, m] = det(A) A = A/2; det(A) [e, m] = det(A)
--> // Very big determinant: --> A = rand(n, n); --> det(A) ans = -Inf --> [e, m] = det(A) // -3.1199e743 e = 743. m = -3.1198687 --> // Very small determinant (of a sparse-encoded matrix): --> n = 1000; --> A = (triu(sprand(n,n,1)) + diag(rand(1,n)))/1.5; --> det(A) ans = 5.21D-236 --> prod(diag(A)) ans = 5.21D-236 --> [e, m] = det(A) e = -236. m = 5.2119757 --> A = A/2; --> det(A) ans = 0. --> [e, m] = det(A) e = -537. m = 4.8641473
Определитель полиномиальной матрицы:
s = %s; det([s, 1+s ; 2-s, s^2]) w = ssrand(2,2,4); roots(det(systmat(w))),trzeros(w) //нули линейной системы
--> det([s, 1+s ; 2-s, s^2]) ans = -2 -s +s² +s³ --> w = ssrand(2,2,4); --> roots(det(systmat(w))),trzeros(w) ans = -3.1907522 + 0.i 2.3596502 + 0.i ans = 2.3596502 + 0.i -3.1907522 + 0.i
Смотрите также
История
Версия | Описание |
6.1.1 | Синтаксис [e,m]=det(X) расширен до разрежённых матриц. |
Report an issue | ||
<< cond | matrix | orth >> |