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