Eigen稀疏矩阵行列式为零。

4

我正在尝试计算一个稀疏矩阵是否是正定的。为此,我尝试使用席尔维斯特准则,这意味着前导子式是正的。

为了计算矩阵的行列式,我正在构建矩阵每个块的sparseLU求解器,它可以给我矩阵的行列式。但从某个维度开始(大约130*130),我得到的结果是所有行列式都为0。这不是我的问题中的某个特殊维度(该矩阵的块大小为32*32),因此我认为这个问题与Eigen应用的某些截断算法有关,行列式简单地低于某些阈值。

我搜索了这样一个机制,但没有得到令人满意的结果。 我的矩阵的尺寸约为16k×16k,所有非零元素都在靠近对角线的96个元素上。

Eigen中是否实现了任何截断机制,我能否以某种方式控制其阈值?


1
它可能有点粗心,但你不能只是等待需要正定矩阵的算法失败吗? - Bathsheba
所有在Eigen中可用的稀疏矩阵求解器都要求矩阵是正定的,同时也要求矩阵是对称的,而我的矩阵不是对称的。 - lazyguy
1
对于如此大的矩阵,即使是稀疏的,舍入误差的累积也可能非常严重。你尝试过使用更长的类型吗? - Damien
我已经在使用双精度浮点数,而我的编译器不支持更大的类型,但是@chtz给了我需要的答案。 - lazyguy
1个回答

3
这很可能是由于下溢导致的,即行列式被计算为许多小于1.0的数字的乘积。如果您计算大约0.5附近的130个值的乘积,则接近可以用单精度浮点数表示的边界。
您可以使用方法logAbsDeterminantsignDeterminant来获得有意义的结果。

我已经找到了logAbsDeterminant,但不知何故忽略了signDeterminant。这正是我所需要的,谢谢。 - lazyguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接