Я хочу решить метод наименьших квадратов, как система A^t * A * x = -A^t * x
. (Я применяю метод Гаусса-Ньютона для специальной задачи).
Я написал специальные процедуры, которые позволяют мне вычислять произведения A * x
и A^t * y
. С такими подпрограммами легко использовать безматричные решатели благодаря Eigen.
Но мой подход сходится не так хорошо, как Eigen::LeastSquaresConjugateGradient
. Я сделал небольшой тест, и похоже, что LeastSquareDiagonalPreconditioner
значительно ускоряет сходимость.
Мой вопрос: как я могу использовать LeastSquareDiagonalPreconditioner
или реализовать собственный предварительный кондиционер, если я могу вычислять только матричные произведения? Кстати, я не очень хорошо разбираюсь в материалах предварительного кондиционирования/сопряженного градиента.
ИЗМЕНИТЬ
Для ясности: я хочу использовать безматричные решатели от Eigen со своими подпрограммами продукта.
ИЗМЕНИТЬ 2
Матрично-векторные произведения были получены с использованием прямого и обратного автодиффа для некоторых целевых функций.