matlab — нелинейная функция минимизации переполнения стека

Я пытался перенести код с MATLAB на C ++ и наткнулся на очень неожиданную трудность. Кажется, я не могу найти эквивалент C ++ для fminunc MATLAB.

Проще говоря, определение проблемы сводит к минимуму f (x) для вектора x, скалярной функции f (x) и первоначального предположения x_0.

Мои поиски до сих пор только обнажили библиотеку под названием MinPack, которая не в состоянии рассмотреть случай, когда f (x) — скаляр, а x — вектор.

Конечно, язык программирования, который столь же стар, как время, имеет какую-то свободно доступную реализацию классических числовых рецептов для нелинейной оптимизации? Или я слишком оптимистичен здесь? Даже базовые подходы, такие как градиентный спуск, были бы огромным улучшением за ничто …

0

Решение

Проверьте NLopt из. Это то, что я использую в первую очередь при переносе файлов с MATLAB на C / C ++, и это работает очень хорошо.

1

Другие решения

Мой личный выбор будет IPOPT, нелинейный решатель общего назначения. Он знает гораздо больше, чем вы просили.

Другие варианты будут включать:

Последний, к сожалению, будет включать взаимодействие с Фортраном; это больно и скучно, но на самом деле не ракетостроение.

1

Вот еще один хороший: GSL, в частности, http://www.gnu.org/software/gsl/manual/gsl-ref_36.html#SEC498

1
По вопросам рекламы [email protected]