Definition of Spline Basis Function
文章目录
- 背景
- Spline Basis Function
- 代码
- 参考
- 福利
背景
最近在研究functional 回归,发现有一些smoothing信号处理方法,跟我以前的一些肤浅的想法居然有一些共性,看来不是想不到,而是不敢想,想得不够深入的问题。这种算法提出已经比较久了,其中比较流行的一种平滑处理算法是基于B-spline。样条插值,作为一种插值或者函数逼近,无论是做图形图像还是数值分析,老早就接触过了,所谓了Spline Basis Function,第一反应无非是将函数切割,分段拟合罢了,保证分割处的n次导数相同即可。深入进行发现,这个基函数概念使得问题描述变得更加抽象,和之前的理解不太一样,下面记述一下自己对它的理解。看了一些不错的资料,但感觉描述的过于详细,反而觉得耽误了那些只想了解基本原理的人。所以,本文只想交代最重要的部分,细节可以参考文末给出的连接。
Spline Basis Function
首先,对于目标曲线进行分段,如何确定最优的分割点,据目前的了解也是相当复杂。这里,作为测试,分割点是自己直接设定的,详情可以参照后面的代码。
假设m+1个分割点, u 0 ≤ u 1 ≤ u 2 ≤ . . . ≤ u m , u i u_0 \leq u_1 \leq u_2 \leq ... \leq u_m,u_i u0≤u1≤u2≤...≤um,ui称为节点(knots)。这样,原来的曲线分为m段区间。
下面给出Cox-de Boor递归公式,也就是Spline Basis Function的生成公式
N i , 0 ( u ) = { 1 , u i ≤ u < u i + 1 0 , o t h e r w i s e N i , p ( u ) = u − u i u i + p − u i N i , p − 1 ( u ) + u i + p + 1 − u u i + p + 1 − u i + 1 N i + 1 , p − 1 ( u ) N_{i,0}(u) = \left\{\begin{matrix} 1,& u_i \leq u < u_{i+1} \\ 0, & otherwise \end{matrix}\right.\\ N_{i,p}(u) = \tfrac{u-u_i}{u_{i+p}-u_i} N_{i,p-1}(u) + \tfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) Ni,0(u)={1,0,ui≤u<ui+1otherwiseNi,p(u)=ui+p−uiu−uiNi,p−1(u)+ui+p+1−ui+1ui+p+1−uNi+1,p−1(u)
我们定义 N i , p N_{i,p} Ni,p为第 i i i个 p p p次 B − B- B−样条基函数,定义有一些拗口,它的递推公式也有点让人一头雾水,没关系,很快就清楚了。
关于它的生成方式,可以引用下图来表示。第一列是分段区间,第二列为0次基函数,依次类推。
我们可以发现两个重要特点
- 区间的数量决定了基函数的最大次数 。区间数量越多,基函数的最大次数越大,不用说,函数的逼近效果也越好,但也容易过拟合。
- 基函数次数越大,它的作用范围也越大。如下图部分, N 1 , 3 N_{1,3} N1,3它在蓝色虚线部分的区间 [ u 1 , u 5 ) [u_1,u_5) [u1,u5)取值为非0,其他全部为0.
总结一下,我们可以得到,对于 N i , p N_{i,p} Ni,p而言,它的作用范围是 [ u i , u i + p + 1 ) [u_i,u_{i+p+1}) [ui,ui+p+1)。
那么可以知道, N i , p − 1 N_{i,p-1} Ni,p−1的作用范围 [ u i , u i + p ) [u_i,u_{i+p}) [ui,ui+p), N i + 1 , p − 1 N_{i+1,p-1} Ni+1,p−1的作用范围 [ u i + 1 , u i + p + 1 ) [u_{i+1},u_{i+p+1}) [ui+1,ui+p+1),
现 在 可 以 解 释 \color{red}{现在可以解释} 现在可以解释 N i , p \color{red}N_{i,p} Ni,p 的 递 推 公 式 \color{red}{的递推公式} 的递推公式
N i , p ( u ) = u − u i u i + p − u i N i , p − 1 ( u ) + u i + p + 1 − u u i + p + 1 − u i + 1 N i + 1 , p − 1 ( u ) N_{i,p}(u) = \tfrac{u-u_i}{u_{i+p}-u_i} N_{i,p-1}(u) + \tfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) Ni,p(u)=ui+p−uiu−uiNi,p−1(u)+ui+p+1−ui+1ui+p+1−uNi+1,p−1(u)
N i , p N_{i,p} Ni,p实际上就是 N i , p − 1 N_{i,p-1} Ni,p−1和 N i + 1 , p − 1 N_{i+1,p-1} Ni+1,p−1的加权和,加权系数是怎么确定的呢,是根据u在两者对应的作用区间的位置决定的。我们可以看到,当 u u u在作用范围的边界时候,基函数的取值都接近于0.
下面看一段代码,来看看具体是怎么一回事情。代码将[0,4]均匀分成4个区间。然后,分别生成0,1,2,3次基函数,刚好4张图。
代码
代码比较简单,不过写得烂也没注释,跑一下就清楚了
clear;
linecolor = ['r','g','b','y','k','c','m','k','r','g','b'];
%knot span
knots = [0,1,2,3,4];
Len = 40;
x = linspace(0,4,Len);
figure('color','w');
for i = 1:1:4bf = GenerateBasicFunctionCurves(i-1,x,knots);subplot(2,2,i);drawsubplot(i-1,bf,linecolor,knots);
endfunction v = SplineBasisFunction(i,p,u,knots)u_i = knots(i); u_i1 = knots(i+1);if p==0if u>=u_i && u<u_i1v = 1;return;endv = 0;return;endu_ip1 = knots(i+p+1);u_ip = knots(i+p);v = (u-u_i)/(u_ip-u_i)*SplineBasisFunction(i,p-1,u,knots)+(u_ip1-u)/(u_ip1-u_i1)*SplineBasisFunction(i+1,p-1,u,knots);
end
function bf = GenerateBasicFunctionCurves(p,x,knots)for i = 1:1:length(knots)-1-pfor j = 1:1:length(x)bf(i,j) = SplineBasisFunction(i,p,x(j),knots);endend
end
function drawsubplot(p,bf,linecolor,knots)legendtxt = [];for i = 1:1:length(knots)-1-pplot(bf(i,:),strcat('-o',linecolor(i)),'LineWidth',1.5);hold on;txt = 'N';txt = strcat(txt,num2str(i-1));txt = strcat(txt,',');txt = strcat(txt,num2str(p));legendtxt = [legendtxt;string(txt)] ;endlegend(legendtxt);plotsettingtitle(p);
end
function plotsetting()a=gca;a.FontSize=20; set(gca,'fontweight','bold');set(gca,'Linewidth',2);xticks([1 ,11, 21,31,40]);xticklabels({'0','1','2','3','4' });
end
从上图可以看到,随着基函数的次数p增加,基函数的作用范围增大,基函数的数目减少。基函数的最大值一般靠近中间部位,两头趋近为0。上图有趣的地方在于,0次基函数就是一个门函数,1次基函数像是三角滤波器。
上图展现的是分割点均匀分布的情况,下图来一个不均匀分布的
修改上面代码的结点分割部分即可,其他不用调整
knots = [0,0.3,0.8,3.6,4];
参考
- CS3621 Introduction to Computing with Geometry Notes
- B-spline Curves 学习之B样条基函数的定义与性质(2)(中文版)
福利
为了查阅方便,把参考1部分打包成chm和pdf格式,有需要可以下载
Definition of Spline Basis Function相关推荐
- RBF(Radial Basis Function Network)+径向基网络
RBF(Radial Basis Function Network)+径向基网络 在SVM中引入Gaussian Kernel就能在无限多维的特征转换中得到一条"粗壮"的分界线(或 ...
- 核函数与径向基函数 (Radial Basis Function 简称 RBF)详解
1.核函数 1.1核函数的由来 -----------还记得为何要选用核函数么?----------- 对于这个问题,在Jasper's Java Jacal博客<SVM入门(七)为何需要核函数 ...
- 径向基(Radial basis function)神经网络、核函数的一些理解
径向基函数(RBF)在神经网络领域扮演着重要的角色,如RBF神经网络具有唯一最佳逼近的特性,径向基作为核函数在SVM中能将输入样本映射到高维特征空间,解决一些原本线性不可分的问题. 本文主要讨论: 1 ...
- 径向基(Radial Basis Function:RBF)神经网络
前言 径向基函数是一个取值仅仅依赖于离远点的实值函数,也就是ϕ(x)=ϕ(∣∣x∣∣)\ \phi(x)=\phi(||x||) ϕ(x)=ϕ(∣∣x∣∣),或者还可以是任意一点c的距离,c点称为中心 ...
- 径向基函数(RBF Radial Basis Function)神经网络
径向基函数(RBF Radial Basis Function)神经网络是由J.Moody和C.Darken在20世纪80年代末提出的一种神经网络,它是具有单隐层的三层前馈网络.由于它模拟了人脑中局部 ...
- 径向基(Radial Basis Function:RBF)神经网络学习笔记
原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080 一. 从BP神经网络到RDF神经网络 在上一篇文章BP(Back ...
- matlab径向基函数插值,径向基函数(Radial Basis Function)插值
将RBF用于插值 标签(空格分隔):径向基函数插值 算法 RBF 曲面重构 当高维数据稀疏,需要预测一些数据,需要使用曲面重构的方法. 曲面重构一般可以分为: 插值 重构 曲面插值里我们一般使用径向基 ...
- 径向基RBF(radial basis function)函数、RBF神经网络、 反推(back-stepping)控制
文章目录 1. 什么是径向基函数 1. 高斯径向基函数 2. 反演S型函数 3. 拟多二次函数 2. 正则化径向基神经网络 3. 基于RBF网络逼近的自适应控制 1. 问题描述 2. RBF 网络原理 ...
- Reconstruction and Representation of 3D Objects with Radial Basis Functions 阅读笔记
Reconstruction and Representation of 3D Objects with Radial Basis Functions 阅读笔记 紧接着上面的连篇blog,本篇学习如何 ...
最新文章
- 简单使用SpringCloud的fegin和熔断hystrix
- 解决“跨域问题”的几种方法
- 有哪些越早知道越好的人生经验?
- 软件工程里的UML序列图的概念和总结
- C#的目录与文件操作
- python模拟gps定位_python 模拟 GPS, $GPRMC $GPRMC
- l298n电机哪一端为正_L298N使用说明介绍
- 两个HC05蓝牙模块相互之间的通信
- dos攻击防范 php,DOS攻击和DDOS攻击的区别
- python加权求和_python求加权平均值的实例(附纯python写法)
- javascript函数传参
- 北航学堂Android客户端Beta阶段发布说明
- 硬件设计18之什么是VGA?
- 美丽的往生者-让自己慢下来(34)
- 用计算机弹发如雪,计算器弹音乐谱子
- SQL server 2008R2 入门
- 「迅捷」校园网多设备认证
- 来了!娱乐篇!一文带你了解那些适合日常使用的开源工具和应用(娱乐篇)
- 学UI设计有前途吗?内附课程资源
- 摆脱手机缚束,让运动更自由,vivo WATCH 2智能手表评测
热门文章
- 中国人保为山东三同新材料承保产品责任险,为消费者保驾护航
- 【python】python列表去重的5种常见方法实例
- chart.js 参数说明
- 正则表达式(手机号前带区号)
- Pandas学习-Day3
- (FJWC2020)DTOJ 4688. 迫害 DJ
- MATLAB下载html页面
- 安卓报错E/EGL_adreno: tid 3927: eglSurfaceAttrib(1334): error 0x3009 (EGL_BAD_MATCH)
- CVPR2021论文详解Rainbow Memory: Continual Learning with a Memory of Diverse Samples
- Animation动画效果