Python中scipy.curve_fit拟合参数异常:曲线正常但参数无意义
曲线拟合参数异常:(ax)^b + cx拟合得到恒零解但视觉拟合效果良好
使用Python的scipy.curve_fit工具拟合实验数据时,出现了矛盾情况:拟合生成的曲线视觉上与实验数据贴合良好,但输出的拟合参数完全不符合预期。
拟合方程为(ax)^b + cx,得到的参数结果为[1.44930871e+03, 1.00000000e+00, -1.44930871e+03],满足a=-c且b=1,代入方程后结果恒为0,这和实际显示的拟合曲线明显不符。
实验数据为CFU与OD的对应数据集,拟合图像显示曲线与实验点匹配度较高。
相关代码如下:
import numpy as np from scipy.optimize import curve_fit import matplotlib.pyplot as plt # cfu_u和OD_u为加载后的实验数据数组 xdata = cfu_u ydata = OD_u min_cfu = 0.1 max_cfu = 9.1 x_vec = pow(10, np.arange(min_cfu, max_cfu, 0.1)) def func(x, a, b, c): return (a * x)**b + c * x popt, pcov = curve_fit(func, xdata, ydata) plt.plot(x_vec, func(x_vec, *popt), label='curve fit', color='slateblue', linewidth=2.2) plt.plot(cfu_u, OD_u, '-', label='experimental data', marker='.', markersize=8, color='deepskyblue', linewidth=1.4) plt.legend(loc='upper left', fontsize=12) plt.ylabel("Y", fontsize=12) plt.xlabel("X", fontsize=12) plt.xscale("log") plt.gcf().set_size_inches(7, 5) plt.show() print(popt) # 输出:[ 1.44930871e+03 1.00000000e+00 -1.44930871e+03]
内容的提问来源于stack exchange,提问作者casella
相关产品推荐
相关产品推荐

