Я пытался перенести код с MATLAB на C ++ и наткнулся на очень неожиданную трудность. Кажется, я не могу найти эквивалент C ++ для fminunc MATLAB.
Проще говоря, определение проблемы сводит к минимуму f (x) для вектора x, скалярной функции f (x) и первоначального предположения x_0.
Мои поиски до сих пор только обнажили библиотеку под названием MinPack, которая не в состоянии рассмотреть случай, когда f (x) — скаляр, а x — вектор.
Конечно, язык программирования, который столь же стар, как время, имеет какую-то свободно доступную реализацию классических числовых рецептов для нелинейной оптимизации? Или я слишком оптимистичен здесь? Даже базовые подходы, такие как градиентный спуск, были бы огромным улучшением за ничто …
Проверьте NLopt из. Это то, что я использую в первую очередь при переносе файлов с MATLAB на C / C ++, и это работает очень хорошо.
Мой личный выбор будет IPOPT, нелинейный решатель общего назначения. Он знает гораздо больше, чем вы просили.
Другие варианты будут включать:
Последний, к сожалению, будет включать взаимодействие с Фортраном; это больно и скучно, но на самом деле не ракетостроение.
Вот еще один хороший: GSL, в частности, http://www.gnu.org/software/gsl/manual/gsl-ref_36.html#SEC498