scipy libのleastsqメソッドは、いくつかのデータに曲線を適合させます。そして、この方法は、このデータではY値がX引数に依存することを意味します。そして、Y軸の曲線とデータポイント間の最小距離を計算します(dy)
しかし、両方の軸(dyとdx)で最小距離を計算する必要がある場合はどうなりますか?
この計算を実装する方法はありますか?
1軸計算を使用する場合のコードのサンプルを次に示します。
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()
これは、望ましくない誤った結果を返し、一部の入力データでは実際に近くさえありません。たぶん、それを使用するいくつかの特別な方法があります、私は何を間違えますか?