scipy库中的leastsq方法可以将曲线拟合到一些数据上。该方法意味着在这些数据中,Y值取决于某些X参数,并计算曲线与数据点在Y轴(dy)上的最小距离。
但是,如果我需要计算两个轴(dy和dx)上的最小距离怎么办?
是否有某种方法来实现这种计算?
以下是使用单个轴计算时的代码示例:
但是,如果我需要计算两个轴(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()
这返回错误的结果,不是想要的,有些输入数据甚至与真实情况差距很大。也许有一些特殊的使用方法,我做错了什么吗?