【问题标题】:How do i get a smooth fit for my data points, using "scipy.optimize.curve_fit"?如何使用“scipy.optimize.curve_fit”平滑拟合我的数据点?
【发布时间】:2019-03-25 20:38:33
【问题描述】:

我想使用scipy.optimize.curve_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()

我很期待某种平滑的曲线。有人可以解释我在这里做错了什么吗?

【问题讨论】:

    标签: python scipy curve-fitting


    【解决方案1】:

    您只是在调用中绘制与原始数据相同的 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')
    

    【讨论】:

    • 感谢您的回答。我已经为此困惑了很长时间。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2017-01-02
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多