首页/文章/ 详情

使用Python进行曲线拟合

1年前浏览767

在处理数据时经常需要进行曲线拟合,在拟合过程中我们采用了插值的思想。

对于给定的数据x=[...]和y=[...],插值的目的是找到参数β的最优集 合,使函数

能够与原数据最为相似。

  • 其中一种方法是通过调整β使:

                                       

    能够最小化,这种方法称之为最小二乘法。

  • 如果yi的值有相应的误差,那么使下式最小化


    称之为β的最大似然估计。在给定xi与yi的情况下,这样得到的β值最为准确。


我们给定以下随机数据点并绘制散点图:
















import numpy as npimport matplotlib.pyplot as pltimport pandas as pdfrom scipy.optimize import curve_fitx_data = np.array([0.        , 0.15789474, 0.31578947, 0.47368421, 0.63157895,       0.78947368, 0.94736842, 1.10526316, 1.26315789, 1.42105263,       1.57894737, 1.73684211, 1.89473684, 2.05263158, 2.21052632,       2.36842105, 2.52631579, 2.68421053, 2.84210526, 3.        ])y_data = np.array([  2.95258285,   3.49719803,  -2.1984975 ,  -4.88744346,        -7.41326345,  -8.44574157, -10.01878504, -13.83743553,       -12.91548145, -16.41149046, -14.93516299, -13.42514157,       -14.12110495, -17.6412464 , -16.1275509 , -17.11533771,       -15.66076021, -12.48938865, -11.33918701, -11.70467566])plt.scatter(x_data,y_data)plt.show()

我们使用下式的模型进行拟合:

我们需要求解出符合上述数据点的最优的a、b、c的值,需要在python中:

(1)需要定义模型方程;

(2)使用scipy库中的curve_fit函数,使用该函数时需要定义一个β的初始值,对于一些复杂的模型,初始值决定了函数能否顺利运算。

下面定义函数并进行拟合




def fitfun(x, a, b, c):    return a*(x-b)**2 + cpopt, pcov = curve_fit(fitfun, x_data, y_data, p0=[3,2,-16])

其中:

popt为我们定义的函数fitfun的最佳参数。

pcov为协方差矩阵,用于给定误差。

接下来我们就可以绘制出拟合好的曲线







a, b, c = poptx_model = np.linspace(min(x_data), max(x_data), 100)y_model = fitfun(x_model, a, b, c)plt.scatter(x_data,y_data)plt.plot(x_model,y_model, color='r')plt.show()

来源:易木木响叮当
python
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-02
最近编辑:1年前
易木木响叮当
硕士 有限元爱好者
获赞 224粉丝 283文章 355课程 2
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈