Юля: Как получить локальные переменные в функциях для nlsolve или минимизировать

Мне было интересно, как лучше всего экспортировать локальные переменные в целевую функцию для оптимизации или линейных решателей. Например, у меня есть такая функция, как:

function example(x) b = sum(x) return b * x’ * x

затем я отправляю эту функцию в минимизатор. Предположим, он сходится. Я хочу получить значение b на последней итерации. Как я могу этого добиться?

У меня есть несколько пробных решений:

globalize b с помощью аффикса const (оберните его контейнером массива). Добавьте аргумент флага, чтобы указать, следует ли выводить b, затем снова запустите функцию с индикатором. Возьмите изменяемый контейнер b в качестве аргумента и измените его как побочный эффект функции. Насколько я понимаю, глобальные переменные имеют проблемы с производительностью, поэтому я должен стараться избегать; второй подход надежен, но он требует дополнительной итерации, что не кажется очень эффективным (хотя в большинстве моих приложений стоимость достаточно низка). Сейчас я использую третий метод, и пока он работает хорошо. Однако, поскольку я новичок в Джулии, я не уверен, есть ли у нее какие-то скрытые проблемы (например, совместимость с другими пакетами, такими как ForwardDiff?).

Спасибо за любой комментарий!

Источник: ledsshop.ru

Стиль жизни - Здоровье!