lsqnonlin matlab vsimum_squares python - параметр параметров различного поведения - PullRequest
1 голос
/ 08 марта 2020

Я пытаюсь преобразовать некоторый код из matlab в python. Код Matlab включает в себя функцию lsqnonlin, которая решает нелинейную задачу наименьших квадратов. Я искал похожую функцию в python и нашел least_squares из scipy.optimize. В документации это правильная функция.

Я пробовал эту функцию с несколькими различными входами и был доволен результатом - так же, как и Matlab. Затем я нашел вход, который дает другой вывод из Matlab против python. После изучения случая я понял проблему.

Поведение параметра Bounds различается между python least_squares и matlab lsqnonlin. В python параметр Bounds предназначен для значения x0 (вход функции) в matlab, а параметр bounds (lb и ub) предназначен для вывода функции.

Поэтому моя проблема заключается в том, что точка от x0 не в границах.

Я уточню проблему с параметрами:

  • x0 - [1,2,16]
  • lb - [0,1,50]
  • ub - [2,3,65]

Третий пункт не в границах. Python не будет запускать функцию, пока Matlab запустит функцию и выдаст вывод.

Дополнительная информация:

  • Цитата из matlab do c, когда x0 выходит за пределы:

Компоненты x0, нарушающие границы lb ≤ x ≤ ub, сбрасываются во внутреннюю часть поля, определяемого границами .

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

  • Запуск без границ (значение по умолчанию для bound (-inf, inf)) - те же результаты Matlab и python.
  • При запуске x0 в границах - те же результаты Matlab и python.
  • Я пробовал другие методы из разных библиотек, но безуспешно.

ссылки для документации:

  1. matlab - https://www.mathworks.com/help/optim/ug/lsqnonlin.html
  2. python - https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html

Буду рад некоторым советы, некоторые идеи или решение.

...