- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想求解像系统 A^t * A * x = -A^t * x
这样的最小二乘法。 (我正在为特殊问题实现高斯-牛顿法)。
我编写了特殊的例程,允许我计算 A * x
和 A^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/
我想求解像系统 A^t * A * x = -A^t * x 这样的最小二乘法。 (我正在为特殊问题实现高斯-牛顿法)。 我编写了特殊的例程,允许我计算 A * x 和 A^t * y 产品。有了这样
我是一名优秀的程序员,十分优秀!