Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2023.1.0 - Русский


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

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

  • detr — determinant of a matrix of rationals
  • determ — determinant of a matrix of polynomials
  • simp_mode — toggle rational simplification

История

ВерсияОписание
6.1.1 Синтаксис [e,m]=det(X) расширен до разрежённых матриц.
Report an issue
<< cond matrix orth >>

Copyright (c) 2022-2023 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon May 22 12:41:12 CEST 2023