Python Scipy优化曲线拟合工作不正常
我试图将我的数据拟合到4参数物流,我得到了如下图表: 我认为第4~10个数据点的曲线看起来不错,但我不了解第1~3个数据点的情况。我还收到了错误信息 “运行时警告:在电源返回((A-D)/(1.0+((x/C)**B))+D中遇到无效值” 用于绘制图形的代码如下所示:Python Scipy优化曲线拟合工作不正常,python,optimization,scipy,curve-fitting,Python,Optimization,Scipy,Curve Fitting,我试图将我的数据拟合到4参数物流,我得到了如下图表: 我认为第4~10个数据点的曲线看起来不错,但我不了解第1~3个数据点的情况。我还收到了错误信息 “运行时警告:在电源返回((A-D)/(1.0+((x/C)**B))+D中遇到无效值” 用于绘制图形的代码如下所示: import numpy as np import matplotlib.pyplot as plt from scipy import stats import scipy.optimize as optimization
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
import scipy.optimize as optimization
xdata = np.array([0.00001, 0.000033, 0.0001, 0.00033,
0.001, 0.0033, 0.01, 0.033, 0.1, 0.33])
ydata = np.array([591, 648.5, 714.75, 941, 1226, 1768.25,
2232.25, 2716.25, 3056.25, 3034.5])
ydata2 = np.array([595.5, 711, 898.25, 2215.5,
2791.25, 3115.5, 3351, 3301, 3456.25, 3171.5])
ydata3 = np.array([617, 597.5, 599.25, 680, 683.5, 1152.75, 1554.25,
2221.5, 2821.5, 2719.25])
def fourPL(x, A, B, C, D):
return ((A-D)/(1.0+((x/C)**B))) + D
params, params_covariance = optimization.curve_fit(fourPL, xdata,
ydata)
x_min, x_max = np.amin(xdata), np.amax(xdata)
xs = np.linspace(x_min, x_max, 1000)
plt.scatter(xdata, ydata)
plt.plot(xs, fourPL(xs, *params))
plt.semilogx()
plt.show()
供您参考
- 当我只使用7个数据点时,曲线拟合得很好李>
- 当我从第一个开始以日志形式使用扩展数据时,加上6使数字为正数(扩展数据=np.log10(扩展数据)+6),它在10个数据点上工作得非常好李>
如有任何建议或意见,将不胜感激。
提前谢谢 如果我们绘制曲线及其数据点,就会清楚发生了什么:
plt.plot(xs, fourPL(xs, *params), '.-')
左侧部分中只有两个点是线性插值的。这是在对数轴上绘制线性间隔数据的问题
对于对数轴上的规则间距,使用而不是np.linspace
:
x_min, x_max = np.amin(xdata), np.amax(xdata)
xs = np.logspace(np.log10(x_min), np.log10(x_max), 1000)
plt.scatter(xdata, ydata)
plt.plot(xs, fourPL(xs, *params))
plt.semilogx()
plt.show()
哇,我可没这么想。非常感谢您的帮助。@MrT我不完全了解系统。谢谢你让我知道。