Main Content

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

检查为何该行列式不是精确的奇异性测度。

通过将单位矩阵 eye(10) 乘以一个小数字来创建一个 10×10 的矩阵。

A = eye(10)*0.0001;

矩阵 A 沿主对角线上的元素数非常少。但是,A 不是奇异的,因为它是单位矩阵的倍数。

计算 A 的行列式。

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

该行列式非常小。abs(det(A)) < tol 形式的容差检验可能将此矩阵标记为奇异矩阵。虽然矩阵的行列式接近于零,但 A 实际并不是病态的。因此,A 不接近奇异矩阵。矩阵的行列式可以任意接近于零,而不传达有关奇异性的信息。

要研究 A 是否为奇异矩阵,请使用 condrcond 函数。

计算 A 的条件数。

c = cond(A)
c = 1

结果确认 A 不是病态的。

检查一个具有较大非零行列式的精确奇异矩阵。从理论上讲,任何奇异矩阵的行列式都为零,但由于浮点计算的性质,这个目标并非总能实现。

创建一个 17×17 的对角占优奇异矩阵 A,并查看非零元素的模式。

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

A 是奇异矩阵,因为各行线性相关。例如,sum(A) 生成一个由零值组成的向量。

计算 A 的行列式。

d = det(A)
d = 2.6698e+10

A 的行列式相当大,尽管 A 是奇异的。实际上,A 的行列式应正好为零!由于 MATLAB® 实现的 LU 分解(det 用它来计算行列式)中汇总了舍入误差,因此 d 不精确。此结果演示计算数值行列式的一些重要方面。有关详细信息,请参阅局限性部分。

输入参数

全部折叠

输入矩阵,指定为数值方阵。

数据类型: single | double
复数支持:

局限性

由于以下限制,请勿使用 det 检查某矩阵是否为奇异矩阵。请改用 condrcond

局限性结果

行列式的幅值通常与矩阵的条件数不相关。

矩阵的行列式可以任意大或任意小,而不更改条件数。

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 之前推出

另请参阅

| | | | | |