gpt4 book ai didi

c++ - Eigen :如果我只能计算 Aty 和 Ax,是否有可能创建类似 LeastSquareDiagonalPreconditioner 的调节器?

转载 作者:行者123 更新时间:2023-11-30 03:19:59 25 4
gpt4 key购买 nike

我想求解像系统 A^t * A * x = -A^t * x 这样的最小二乘法。 (我正在为特殊问题实现高斯-牛顿法)。

我编写了特殊的例程,允许我计算 A * xA^t * y 产品。有了这样的例程,就可以很容易地使用无矩阵求解器,这要归功于 Eigen。

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

我的问题是 - 如果我只能计算矩阵乘积,我如何使用 LeastSquareDiagonalPreconditioner 或实现自己的预条件器?顺便说一下,我对预处理/共轭梯度的理解不是很好。

编辑

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

编辑 2

矩阵 vector 乘积是通过对一些目标函数使用正向和反向模式自动微分得到的。

最佳答案

最简单的方法可能是实现您自己的预条件器类,继承 DiagonalPreconditioner 并实现类似于 LeastSquareDiagonalPreconditioner::factorize() 但适应您的类型。基本上你需要计算:

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

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

关于c++ - Eigen :如果我只能计算 Aty 和 Ax,是否有可能创建类似 LeastSquareDiagonalPreconditioner 的调节器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53203840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com