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