Метод leastsq в scipy lib соответствует кривой для некоторых данных. И этот метод подразумевает, что в этих данных значения Y зависят от некоторого аргумента X. И вычисляет минимальное расстояние между кривой и точкой данных по оси Y (dy)
Но что, если мне нужно рассчитать минимальное расстояние по обеим осям (dy и dx)
Есть ли способы реализовать этот расчет?
Вот пример кода при использовании вычисления по одной оси:
import numpy as np
from scipy.optimize import leastsq
xData = [some data...]
yData = [some data...]
def mFunc(p, x, y):
return y - (p[0]*x**p[1]) # is takes into account only y axis
plsq, pcov = leastsq(mFunc, [1,1], args=(xData,yData))
print plsq
Я недавно попробовал библиотеку scipy.odr, и она возвращает правильные результаты только для линейной функции. Для других функций, таких как y = a * x ^ b, он возвращает неверные результаты. Вот как я это использую:
def f(p, x):
return p[0]*x**p[1]
myModel = Model(f)
myData = Data(xData, yData)
myOdr = ODR(myData, myModel , beta0=[1,1])
myOdr.set_job(fit_type=0) #if set fit_type=2, returns the same as leastsq
out = myOdr.run()
out.pprint()
Возвращает неверные результаты, которые не нужны, а в некоторых входных данных даже близко к реальным.
Может быть, есть какие-то особые способы его использования, что я делаю не так?