0
我试图做一个分段拟合,如图1所示:分段指数拟合在Python
下面是代码:
import numpy as np
from matplotlib import pyplot as plt
from scipy import optimize
def piecewise_linear(x, x0, y0, k1, k2):
return np.piecewise(x, [x < x0], [lambda x: k1*np.power(x,k2), lambda x: y0])
x=np.arange(0.0,100.0,1.0)
y=piecewise_linear(x, 45.0, 2025.0, 1.0, 2.0)
popt , pcov = optimize.curve_fit(piecewise_linear, x, y)
tau = np.linspace(x[0], x[-1], 200)
perr = np.sqrt(np.diag(pcov))
print popt
print perr
print pcov
plt.plot(x, y, 'b+')
plt.plot(tau, piecewise_linear(tau, *popt),'r')
plt.loglog()
plt.show()
plt.close()
无论我如何更改数据集,参数x0固定为1。
我不知道我的代码有什么问题,我该如何解决这个问题?
感谢您的建议!但是,如果将初始猜测定义为与实际值45相同,那么拟合没有问题,而对于参数“x0”也存在问题,而如果对于“x0”的初始猜测不是实际值,例如44或44.5,配件将失败。无论我输入“x0”的初始猜测,它都不会改变。 'x0'的拟合结果是我输入的初始猜测。 –