Я ищу пакет программ для решения очень большой, разреженная нелинейная задача наименьших квадратов в C ++. Я сталкивался с большим количеством современных библиотек linalg в C ++ (eigen, armadillo, boost и т. Д.), Но ни в одной из них, похоже, нет такого решателя (или даже обычного решателя наименьших квадратов). нравится избегать беспорядочных обращений к старому интерфейсу C / Fortran, если это возможно. Спасибо!
Я бы просто использовал решатель НЛП общего назначения IPOPT написанный на C ++. Это самый надежный решатель среди тех, что я пробовал, и он предназначен и успешно используется на очень большой проблемы.
Изменение требований (например, добавление ограничений) не будет проблемой, если вы используете универсальный IPOPT.
Часть процедуры решения, отнимающая много времени, состоит в том, чтобы решать линейные системы на каждом шаге итерации, поэтому стоит приобрести лучший пакет линейного решателя + LinAlg для вашей платформы.
К сожалению, IPOPT вызывает фортрановые подпрограммы внутренне, поэтому вам понадобится компилятор Фортрана, который является своего рода болью.
Если IPOPT недостаточно, вам придется искать конкретный решатель проблем.
Если вам не нужны ограничения, попробуйте Церера или же g2o. Оба строятся поверх Eigen и могут использовать разреженные матричные решатели, т.е. SuiteSparse и друзья.