首页 文章

指数曲线拟合数据集

提问于
浏览
0
import numpy as np
import matplotlib.pyplot as plt

points = np.array([
 (333, 195.3267),
 (500, 223.0235),
 (1000, 264.5914),
 (2000, 294.8728),
 (5000, 328.3523),
 (10000, 345.4688)
])

# get x and y vectors
x = points[:,0]
y = points[:,1]

为了创建指数曲线,我接下来的步骤是什么?

1 回答

  • 1

    下面是一个将数据拟合到对数二次方程的示例,该对数二次方程比指数更好地拟合数据,并将拟合曲线与原始数据的散点图进行对比 . 代码不是最优的,例如它反复获取X的日志而不是仅仅执行一次 . 通过直接使用线性拟合方法可以更有效地拟合log(x)数据,但是在这里,您可以用更少的代码变化更容易地用指数替换拟合的方程 .

    import numpy
    import matplotlib
    import matplotlib.pyplot as plt
    from scipy.optimize import curve_fit
    
    points = numpy.array([(333, 195.3267), (500, 223.0235), (1000, 264.5914), (2000, 294.8728
    ), (5000, 328.3523), (10000, 345.4688)])
    # get x and y vectors
    xData = points[:,0]
    yData = points[:,1]
    
    # function to be fitted
    def LogQuadratic(x, a, b, c):
        return a + b*numpy.log(x) + c*numpy.power(numpy.log(x), 2.0)
    
    
    # some initial parameter values
    initialParameters = numpy.array([1.0, 1.0, 1.0])
    
    fittedParameters, pcov = curve_fit(LogQuadratic, xData, yData, initialParameters)
    
    # values for display of fitted function
    a, b, c = fittedParameters
    
    # for plotting the fitting results
    xPlotData = numpy.linspace(min(xData), max(xData), 50)
    y_plot = LogQuadratic(xPlotData, a, b, c)
    
    plt.plot(xData, yData, 'D') # plot the raw data as a scatterplot
    plt.plot(xPlotData, y_plot) # plot the equation using the fitted parameters
    plt.show()
    
    print('fitted parameters:', fittedParameters)
    

相关问题