本征稀疏矩阵行列式为零
Eigen sparse matrix determinant is zero
我正在尝试计算我正在操作的稀疏矩阵是否为正定矩阵。为此,我正在尝试使用西尔维斯特标准,这意味着领先的未成年人是积极的。
为了计算矩阵的行列式,我正在为矩阵的每个块构造一个 sparseLU 求解器,然后它可以给出矩阵的行列式。但是从某个维度(大约 130*130)开始,我得到的结果是所有行列式都是 0。这不是我问题中的一些特殊维度(矩阵有 32*32 块)所以我相信这个问题是相关的到 Eigen 应用的某些截断算法,其行列式简单地低于某些阈值。
我对这种机制的搜索没有得到像样的结果。
我的矩阵的尺寸约为 16k*16k,所有非零元素都在对角线附近的 96 个元素上。
是否在 Eigen 中实现了任何截断机制,我可以通过某种方式控制它的阈值吗?
这很可能是由于下溢,即行列式计算为许多小于 1.0
的数字的乘积。如果您计算 0.5
附近 130 个值的乘积,您就接近可以用单精度浮点数表示的边界。
您可以使用方法 logAbsDeterminant
and signDeterminant
获得有意义的结果。
我正在尝试计算我正在操作的稀疏矩阵是否为正定矩阵。为此,我正在尝试使用西尔维斯特标准,这意味着领先的未成年人是积极的。
为了计算矩阵的行列式,我正在为矩阵的每个块构造一个 sparseLU 求解器,然后它可以给出矩阵的行列式。但是从某个维度(大约 130*130)开始,我得到的结果是所有行列式都是 0。这不是我问题中的一些特殊维度(矩阵有 32*32 块)所以我相信这个问题是相关的到 Eigen 应用的某些截断算法,其行列式简单地低于某些阈值。
我对这种机制的搜索没有得到像样的结果。 我的矩阵的尺寸约为 16k*16k,所有非零元素都在对角线附近的 96 个元素上。
是否在 Eigen 中实现了任何截断机制,我可以通过某种方式控制它的阈值吗?
这很可能是由于下溢,即行列式计算为许多小于 1.0
的数字的乘积。如果您计算 0.5
附近 130 个值的乘积,您就接近可以用单精度浮点数表示的边界。
您可以使用方法 logAbsDeterminant
and signDeterminant
获得有意义的结果。