根据评论,这里是一个使用scipy的微分进化模块来确定有界参数估计的例子。这个模块在内部使用拉丁超立方体算法来确保对参数空间的彻底搜索,并且需要在其中进行搜索的边界,尽管这些边界可能很宽泛。默认情况下,differential_evolution模块将在内部使用边界调用curve_fit()结束-这可以被禁用-为了确保最终拟合的参数不受限制,本例在不传递边界的情况下调用curve_fit。从打印的结果中可以看到,对differential_evolution的调用显示第一个参数的边界为-0.185,而后面调用curve_fit()的结果则不是这样。在您的例子中,您可以将下限设为零,这样参数就不是负的,但是如果代码导致一个参数位于或非常接近该界限,那么这并不是本例所示的最佳值。在import numpy, scipy, matplotlib
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy.optimize import differential_evolution
import warnings
xData = numpy.array([19.1647, 18.0189, 16.9550, 15.7683, 14.7044, 13.6269, 12.6040, 11.4309, 10.2987, 9.23465, 8.18440, 7.89789, 7.62498, 7.36571, 7.01106, 6.71094, 6.46548, 6.27436, 6.16543, 6.05569, 5.91904, 5.78247, 5.53661, 4.85425, 4.29468, 3.74888, 3.16206, 2.58882, 1.93371, 1.52426, 1.14211, 0.719035, 0.377708, 0.0226971