gpt4 book ai didi

python - Curve_fitting 数据(我接近参数值,但 curve_fit 表示未找到最佳参数)

转载 作者:行者123 更新时间:2023-11-28 22:33:55 26 4
gpt4 key购买 nike

我正在尝试将数据放入 this file 中使用 Python 中 scipy 的 curve_fit。该文件包含以摄氏度和毫秒为单位的温度与时间的数据点。我将它们转换为开尔文和秒:

thefile = open("aluminio_33920um_aire.txt", "r")
data = np.loadtxt(thefile, delimiter='\t', skiprows=1)
Temp = data[:, 0] + 273.15 #kelvin
Time = data[:, 1]*1e-3 #secs
thefile.close()

我定义了几个要安装的函数:

def newton(t, a, b, tau):
return a + b * np.exp(-t/tau)

def dulong(t, ta, dift, f, n):
return ta + (dift + (n-1)*t/f)**(1/(1-n))

牛顿的拟合效果很好。但是独龙族没有。我为 duolong 的参数绘制了几个值,以查看哪些值绘制了一条或多或少适合数据的线,我找到了此处给出的值:

poptd, pcovd = curve_fit(dulong, Time, Temp, p0=[295, 0.155, 6000, 1.38], sigma=[1]*len(Temp), absolute_sigma=True)

但是,将这些值 p0 传递给 curve_fit 并没有帮助,因为我得到了错误

RuntimeError: Optimal parameters not found: Number of calls to function has reached maxfev = 1000.

不知道如何改进,因为我的参数的初始猜测是一个非常好的猜测。感谢您的帮助。

最佳答案

你的 dulong 函数对 n 的变化高度敏感,因为它具有 n^n 依赖性。您可能希望为其设置界限,或者如果这对您来说足够好,甚至将其保持为常量。

此外,如果您处理的时间尺度足够小,您可以考虑使用近似函数。如果不是,请尝试取临时数据的对数并拟合 dulong 函数的对数。如果算法在改变 n 时采取的步骤太大,这会很有用。

出于调试目的,您可以在函数中添加一行来打印传递的参数,这样您就可以看到哪个参数变化了多少,然后您可以从那里开始工作。作为另一种措施,您可以查看 scipy.optimize 中的最小化函数,在那里您将能够指定更多选项,例如求解算法和要采用的步长,您还可以传递 jacobian 以进一步提高效率。

关于python - Curve_fitting 数据(我接近参数值,但 curve_fit 表示未找到最佳参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39437133/

26 4 0
文章推荐: python - 无法选择值 - 错误 "Select only works on