特征:如果我只能计算Aty和Ax,那么有可能创建类似LeastSquareDiagonalPreconditioner的



我想求解类似系统A^t * A * x = -A^t * x的最小二乘。(我正在为特殊问题执行高斯-牛顿方法(。

我编写了一些特殊的例程,允许我计算A * xA^t * y的乘积。有了这样的例程,由于Eigen,可以很容易地使用无矩阵求解器。

但我的方法收敛性不如Eigen::LeastSquaresConjugateGradient。我做了一个小测试,看起来LeastSquareDiagonalPreconditioner大大加快了收敛速度。

我的问题是——如果我只能计算矩阵乘积,我如何使用LeastSquareDiagonalPreconditioner或实现自己的预处理器?顺便说一句,我不太了解预处理/共轭梯度的东西。

编辑

为了清晰起见,我想在我的产品例程中使用Eigen的无矩阵解算器。

编辑2

利用正向和反向模autodiff对一些目标函数求出矩阵向量积。

最简单的方法可能是实现您自己的预处理程序类,继承DiagonalPreconditioner并实现类似LeastSquareDiagonalPreconditioner ::factorize()但适合您的类型。基本上你需要计算:

m_invdiag(j) = 1./mat.col(j).squaredNorm();

对于所有列j,使用您已经为产品运营商实现的策略。

相关内容

  • 没有找到相关文章

最新更新