【发布时间】:2020-04-20 00:10:50
【问题描述】:
我正在尝试将线性二次模型曲线拟合到实验数据。 Y 轴值从 1 减少到 10^-5。当我使用以下代码时,生成的曲线通常似乎不适合较高 X 值的数据。我怀疑由于高 X 值处的 Y 值非常小,因此实验值和模型值之间的差异很小。但我希望模型曲线尽可能接近较高的 X 值点(即使这意味着低值没有很好地拟合)。除了使用标准偏差(我没有)之外,我还没有发现任何关于 scipy.optimize.curve_fit 加权的信息。如何提高模型在高 X 值下的拟合度?
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
def lq(x, a, b):
#y(x) = exp[-(ax+bx²)]
y = []
for i in x:
x2=i**2
ax = a*i
bx2 = b*x2
y.append(np.exp(-(ax+bx2)))
return y
#x and y are from experiment
x=[0,1.778,2.921,3.302,6.317,9.524,10.54]
y=[1,0.831763771,0.598411595,0.656145266,0.207014135,0.016218101,0.004102041]
(a,b), pcov = curve_fit(lq, x, y, p0=[0.05,0.05])
#make the model curve using a and b
xmodel = list(range(0,20))
ymodel = lq(xmodel, a, b)
fig, ax1 = plt.subplots()
ax1.set_yscale('log')
ax1.plot(x,y, "ro", label="Experiment")
ax1.plot(xmodel,ymodel, "r--", label="Model")
plt.show()
【问题讨论】:
标签: python-3.x scipy curve-fitting