gpt4 book ai didi

python - 平滑拟合函数

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:30 25 4
gpt4 key购买 nike

大家下午好

我一直在尝试平滑作为指数拟合过程输出的拟合函数。我使用的代码行如下所示:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

x = (0.005, 0.025, 0.05, 0.075, 0.1)
y = (1.0, 0.7261356155365372, 0.5170068027210885, 0.3651525126179504, 0.26135615536537193)
plt.plot(x, y, "r")
x = np.array(x, dtype=float)
y = np.array(y, dtype=float)
def func(x, a, b):
return a * np.exp(-b * x)
popt, pcov = curve_fit(func, x, y)
print(popt[0], popt[1])

plt.plot(x, func(x, *popt), "b")
plt.legend(loc='best')
plt.show()

My graphical output

输出在数学上是令人满意的,我的拟合值 print(popt[0], popt[1]) 是完全合理的。主要问题是蓝线(拟合函数)不平滑。我一直在谷歌搜索函数平滑,但我没有发现任何适用于拟合函数的东西,而那些作用于我的原始数据集的函数,例如 numpy 的 np.linspace(),也没有帮助。

非常感谢任何可以帮助我完成这项任务的人!

最佳答案

因此,该函数绝对是平滑的,因为它是一个很好的指数函数。问题是您将其绘制在非常粗糙的网格 x 上。当然,您希望在拟合曲线时保持 x 固定,因为 x 的这些值对应于您已知的观察值 y。但是我们可以在绘图时使用不同的域,如下所示。

将以 plt.plot 开头的行替换为:

new_x = np.linspace(0, 0.1) # or whatever domain you like
plt.plot(new_x, func(new_x, *popt), "b")
plt.legend(loc='best')
plt.show()

你应该很好。

关于python - 平滑拟合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55165373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com