2016-03-03 135 views
0

给定一个矩阵的LDLT分解,我想修改对角线 - 例如所有的值。有没有办法用eigen做到这一点?原位修改特征的LDLT对象

为了清楚起见,我可以这样做:

自动ldlt_ = matrix.ldlt();

,我想与跟进。

ldlt_.vectorD()cwiseMax(矢量::常数(N,ε))解决问题之前

ldlt_.solve的(a)

我没有看到vectorD成员的任何非常量访问器 - 我错过了什么?

回答

0

不,你不能这样做,我不认为用这种方式增加小的(或负的)对角线条目是个好主意。如果条目太小,通常的做法是忽略它们(LDLT :: solve的默认行为),或者用matrix+eps*I重做因式分解。无论如何,如果你真的想自己调整D,那么你必须实现你自己的解决功能。