我想要解最小二乘,像系统A^t * A * x = -A^t * x。(我正在为特殊问题实现高斯-牛顿方法)。
我编写了一些特殊的例程,允许我计算A * x和A^t * y产品。有了这样的例程,就很容易使用无矩阵的求解器,这要归功于本征。
但是我的方法并不像Eigen::LeastSquaresConjugateGradient那样收敛。我做了一个小测试,它看起来像LeastSquareDiagonalPreconditioner速度收敛很多。
我的问题是-如果我只能计算矩阵乘积,我如何使用LeastSquareDiagonalPreconditioner或实现自己的预调理器?我对预处理/共轭梯度的理解不是很好。
编辑
为了清晰起见,我想在我的产品例程中使用不含矩阵的特征求解器。
编辑2
利用对某些目标函数的正、反模自差得到矩阵向量积.
发布于 2018-11-08 14:51:19
最简单的方法可能是实现您自己的预处理器类,继承DiagonalPreconditioner,实现类似于LeastSquareDiagonalPreconditioner ::factorize()的东西,但适应您的类型。基本上,您需要计算:
m_invdiag(j) = 1./mat.col(j).squaredNorm();对于所有使用策略的列j,您已经为产品操作符实现了该策略。
https://stackoverflow.com/questions/53203840
复制相似问题