多元Bspline拟合--基础版本

                                                多元Bspline拟合-基础版本

目录

      一、曲线拟合

    二、曲面拟合


        Bspline拟合能借助局部函数实现复杂曲线、曲面等的拟合;对于复杂曲线、曲面,其拟合能力比我们常用的多项式拟合要强大一些。有关 Bspline 拟合的基本原理讲的比较多,其中一个版本觉得讲的比较详细。见以下地址,有兴趣的可以看看其原理。

      https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/INT-APP/CURVE-APP-global.html

      我们主要介绍一下在选定knots 的情况下进行曲线、曲面的拟合,当然也可以根据需求扩展到更高维度数据的拟合。Bspline拟合的knots选择很关键,也是许多研究重点讨论的问题,目前代码给出了一种基本选择方案,这块儿感兴趣的可以专门去调研一下,目前这方面的内容不在本篇基础内容中涉及。

      测试中所需的2D,3D代码可在https://download.csdn.net/download/u200812705/17895615处下载。

      一、曲线拟合

    首先看看曲线的拟合:

     数据点为

  x = [0.846, 0.898, 0.969, 1.037, 1.1  , 1.182, 1.239, 1.318, 1.393,1.469, 1.562, 1.642, 1.727, 1.796, 1.854, 1.91 , 1.961, 2.021,
       2.081, 2.157, 2.222, 2.287, 2.33 , 2.391, 2.462, 2.521, 2.579, 2.65 , 2.711, 2.77 , 2.82 , 2.888, 2.945, 2.999]

     y =  [-51.09557 , -58.15738 , -65.93887 , -67.29464 , -62.62422 , -55.87594 , -54.66174 , -60.42928 , -66.60885 , -65.48577333, -50.29976 , -34.23951 , -30.02204 , -35.13728 , -42.55164 , -46.37235 , -46.12104 , -40.8838 , -33.66896 , -29.73514 , -33.56055 , -40.1181 , -45.05103 , -44.581 , -40.32874 , -32.61178 , -28.15353 , -23.87415 , -31.50011 , -39.45675 , -44.58404 , -50.27785 , -47.55008 , -42.74608 ]

     这里对比了Bspline拟合和多项式拟合的结果。其中Bspline拟合的参数为 knots数量为16,degree = 3; 多项式拟合参数为degree = 7。

                                                   曲线拟合结果

曲线拟合结果对比

 

    二、曲面拟合

      进行了2组数据的拟合,2组数据均为高斯函数的组合,数据构造如下:

       数据1

      x1 = (np.random.rand(1000)-0.5)*4
      x2 = (np.random.rand(1000)-0.5)*4
      y = 2.0*np.exp(-(x1**2+x2**2))+np.random.rand(1000)*0.3

     拟合中knots数量为(5,5),degree =3, 选用更多的节点数量可能会使的spline矩阵为奇异矩阵导致报错,这点需要注意以下。

                                                                      数据1拟合结果

数据1拟合结果

 

      数据2

      x1 = (np.random.rand(1000)-0.3)*5
      x2 = (np.random.rand(1000)-0.3)*5
      y = 2.0*np.exp(-(x1**2+x2**2))-3.0*np.exp(-( (x1-2)**2+(x2-2)**2))+np.random.rand(1000)*0.3

      拟合中knots数量为(6,6),degree =3, 选用更多的节点数量可能会使的spline矩阵为奇异矩阵导致报错,这点需要注意以下。

                                                                                       数据2拟合结果

原始数据点

数据2拟合结果

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值