Я пытаюсь преобразовать некоторый код из 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.
- Я пробовал другие методы из разных библиотек, но безуспешно.
ссылки для документации:
- matlab - https://www.mathworks.com/help/optim/ug/lsqnonlin.html
- python - https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html
Буду рад некоторым советы, некоторые идеи или решение.