【问题标题】:scipy curve_fit not producing smooth graph when fitting fourier functionscipy curve_fit 在拟合傅立叶函数时不产生平滑图
【发布时间】:2018-01-03 12:58:53
【问题描述】:

当我使用 scipy curve_fit 将我的数据拟合到这个函数时,我得到了一个奇怪的结果。

def func(t, freq, offset, a0, b0, a1, b1, a2, b2, a3, b3):
    return (
        + a0*np.sin(2.*0*np.pi*freq*t)
        + b0*np.cos(2.*0*np.pi*freq*t)    
        + a1*np.sin(2.*1*np.pi*freq*t)
        + b1*np.cos(2.*1*np.pi*freq*t)    
        + a2*np.sin(2.*2*np.pi*freq*t)
        + b2*np.cos(2.*2*np.pi*freq*t)    
        + a3*np.sin(2.*3*np.pi*freq*t)
        + b3*np.cos(2.*3*np.pi*freq*t)
        + offset)

这是绘制的拟合结果

合身本身还可以,唯一的问题是线条凹凸不平。由于我只用常数拟合正弦和余弦,这怎么可能发生?这是在 matplotlib 还是在 curve_fitting 函数中发生的?另一件事是,取决于我是否在函数中添加了更多或更少的项,该函数要么自己平滑,要么再次变得颠簸。

【问题讨论】:

    标签: python matplotlib scipy curve-fitting


    【解决方案1】:

    您可以留下a0 termut,因为这是恒定的。您也可能离开b0,因为这与偏移相同。这不是颠簸的原因,但消除了两个冗余拟合参数。

    def func(t, freq, offset, a1, b1, a2, b2, a3, b3):
        return (   
            + a1*np.sin(2.*1*np.pi*freq*t)
            + b1*np.cos(2.*1*np.pi*freq*t)    
            + a2*np.sin(2.*2*np.pi*freq*t)
            + b2*np.cos(2.*2*np.pi*freq*t)    
            + a3*np.sin(2.*3*np.pi*freq*t)
            + b3*np.cos(2.*3*np.pi*freq*t)
            + offset)
    

    除了结果预期。您允许的频率越多,您在绘图中的频率就越多。凸起是具有低幅度和高频的SIN或COS功能。在绘制X轴上使用更多DataPoints绘制时,拟合曲线将允许您观察到颠簸是平滑的,如SIN功能。

    【讨论】:

    • 非常感谢!实际上删除冗余术语似乎已经平滑了图表。 span>
    猜你喜欢
    • 2016-03-25
    • 2016-09-16
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2012-11-02
    • 2022-01-07
    相关资源
    最近更新 更多