【问题标题】:Fit in python with curve_fit用curve_fit拟合python
【发布时间】:2019-02-12 04:18:48
【问题描述】:

我必须使用curve_fit 进行拟合。我的问题是,我得到的不是连续曲线,而是一条折线,如图所示。这是我的代码:

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

N=np.array([66851,200522,401272,801832,1200951])
e=np.array([2.88,1.75,1.17,0.80,0.71])

def er_func(x,A,c):
   return A/np.sqrt(x)+c
from scipy.optimize import curve_fit
popt, pcov=curve_fit(er_func,N,e,p0=[10,1000])
plt.plot(N,er_func(N,*popt),"b")
plt.plot(N,e,"xr")
plt.xlabel("Number of events")
plt.ylabel("Error [Chn]")

[https://i.stack.imgur.com/BZtnN.png][1]

我认为发生这种情况是因为我正在绘制在我的点对应关系中评估的拟合函数,然后它将五个点与一条直线连接起来。我怎样才能获得正确的配合? 感谢您提供的任何帮助。

【问题讨论】:

    标签: python numpy matplotlib scipy


    【解决方案1】:

    我只显示代码的相关部分。您需要定义一个精细的网格(下面的N_mesh)来绘制您的连续拟合曲线。我正在突出显示注释添加/修改的行

    N=np.array([66851,200522,401272,801832,1200951])
    N_mesh = np.linspace(N[0], N[-1], 100)  # Added (A mesh of 100 x-points)
    e=np.array([2.88,1.75,1.17,0.80,0.71])
    
    def er_func(x,A,c):
        return A/np.sqrt(x)+c
    from scipy.optimize import curve_fit
    popt, pcov=curve_fit(er_func,N,e,p0=[10,1000])
    plt.plot(N_mesh,er_func(N_mesh,*popt),"b", label='Fit') # Modified
    plt.plot(N,e,"xr", label='Actual data') # Modified
    plt.legend(fontsize=14) # Added
    

    输出

    【讨论】:

    • 非常感谢您的帮助。 N[-1] 是否标记了 N 的最后一个条目?
    猜你喜欢
    • 2014-01-13
    • 2020-05-05
    • 2018-10-21
    • 2012-06-07
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    相关资源
    最近更新 更多