plot 命令绘制 x 与 y 值,因此您必须根据定义的函数 ff 计算相应的 y 值。由于pfit 以数组形式返回,因此在调用拟合函数ff 时必须解压缩这些值。如果你知道你有两个系数,你当然可以像v, k = pfit 那样简单地提取它们,然后用ff(x, v, k) 计算y 值。但是,如果您稍后将 fit 函数更改为 L**(-1/v) * k + a 怎么办?然后你将不得不重写你的代码。一种更简单的方法是让 Python 使用 *pfit 解压缩系数:
from scipy.optimize import curve_fit
from matplotlib import pyplot as plt
import numpy as np
#define some sample data
x = np.arange(1, 6)
y = np.asarray([100, 37, 18, 3, 1])
#fitting function with more than one parameter to fit
def ff(L, v, k):
return L**(-1/v) * k
pfit, perr = curve_fit(ff,x,y)
print(pfit)
#plot original data
plt.plot(x, y, "ro", label = "data")
#calculate y-values
y_fit = ff(x, *pfit)
#plot fitted curve
plt.plot(x, y_fit, "b", label = "fit")
plt.legend()
plt.show()
这当然不够令人印象深刻,拟合曲线看起来一点也不平滑:
为了克服这个问题,我们可能希望创建一个分辨率更高的 x 值范围并绘制这个范围,而不是原始 x 值数据:
x_fit = np.linspace(np.min(x), np.max(x), 1000)
plt.plot(x_fit, ff(x_fit, *pfit), "b", label = "fit")
现在好多了: