Python 如何使用“平滑拟合”来平滑拟合数据点;scipy.optimize.curve“U拟合”;?

Python 如何使用“平滑拟合”来平滑拟合数据点;scipy.optimize.curve“U拟合”;?,python,scipy,curve-fitting,Python,Scipy,Curve Fitting,我想使用scipy.optimize.curve\u fit拟合一些数据点。不幸的是,我的身体不稳定,我不知道为什么 import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit M = np.array([730,910,1066,1088,1150], dtype=float) V = np.array([95.71581923, 146.18564513, 164.46723

我想使用
scipy.optimize.curve\u fit
拟合一些数据点。不幸的是,我的身体不稳定,我不知道为什么

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

M = np.array([730,910,1066,1088,1150], dtype=float)
V = np.array([95.71581923, 146.18564513, 164.46723727, 288.49796413, 370.98703941], dtype=float)

def func(x, a, b, c):
    return a * np.exp(b * x) + c

popt, pcov = curve_fit(func, M, V, [0,0,1], maxfev=100000000)
print(*popt)

fig, ax = plt.subplots()
fig.dpi = 80

ax.plot(M, V, 'go', label='data')
ax.plot(M, func(M, *popt), '-', label='fit')

plt.xlabel("M")
plt.ylabel("V")
plt.grid()
plt.legend()
plt.show()


我真的希望有一条平滑的曲线。有人能解释一下我做错了什么吗?

您只绘制了与通话中原始数据相同的x点:

ax.plot(M, V, 'go', label='data')
ax.plot(M, func(M, *popt), '-', label='fit')
要解决此问题,您可以使用更大的范围-这里我们使用700到1200之间的所有值:

toplot = np.arange(700,1200)
ax.plot(toplot, func(toplot, *popt), '-', label='fit')

谢谢你的回答。我对此困惑了这么长时间。非常感谢!