给定矩阵的LDLT分解,我想修改对角线 - 例如对所有值进行修改。有没有办法用eigen做到这一点?
要明确,我可以这样做:
auto ldlt_ = matrix.ldlt();
我想跟进:
ldlt_.vectorD()。cwiseMax(向量::常数(N,ε))
在解决问题之前:
ldlt_.solve(a)中
我没有看到vectorD成员的任何非const访问者 - 我缺少什么?
答案 0 :(得分:0)
不,你不能这样做,我不认为以这种方式增加小(或负)对角线条是一个好主意。如果条目太小,通常的方法是忽略它们(LDLT :: solve的默认行为),或者用matrix+eps*I
重做分解。无论如何,如果你真的想自己调整D
,那么你必须实现自己的求解函数。