Я использую scipy.optimize.least_squares для решения нелинейной задачи оптимизации наименьших квадратов с ограничением по интервалу.Форма моей конкретной проблемы заключается в том, чтобы найти a0, a1, b0 и b1 так, чтобы функция стоимости:
\ sum ^ N_ {n = 1} (g_n - (y_n - b0 e ^ - (tn / b1)) / a0 e ^ - (tn / a1)) ^ 2
сводится к минимуму, когда известны g_n, y_n и t_n и существуют интервальные ограничения для a0, a1, b0 и b1.
Четыре неизвестных параметра охватывают приблизительно четыре порядка (например, a0 = 2e-3, a1 = 30, аналогично для b0 и b1).Я слышал, что большой динамический диапазон неизвестных параметров может быть численно проблематичным для процедур оптимизации.
Мой первый вопрос заключается в том, будет ли проблемным для scipy.optimize.minimize диапазон в четыре порядка.Процедура, кажется, сходится на данных, которые я применял до сих пор.
Мой второй вопрос касается формы функции стоимости.Я могу эквивалентно написать это как:
\ sum ^ N_ {n = 1} (g_n - (1 / a0 e ^ (tn / a1) y_n - b0 / a0 e ^ - (tn / b1) +tn / a1) /) ^ 2
=
\ sum ^ N_ {n = 1} (g_n - (a0 'e ^ (tn / a1) y_n - b0' e ^ -(tn * b1 '))) ^ 2
, где новые параметры - это простые преобразования исходных параметров.Есть ли какое-то преимущество в этом с точки зрения численной устойчивости или избежания локальных минимумов?Я не доказал это, но мне интересно, будет ли эта новая функция стоимости выпуклой, в отличие от исходной функции стоимости.