侃侃样条

转载 2006年05月23日 10:58:00

                        侃侃样条、小波与细分(libai, dlut)

     临近毕业前,曾在此版由感而写文 侃侃计算数学。时光飞逝,转眼已有一年半有余,我的研究领域也发生了较大的变化。每每翻看杂志,看到以前熟悉领域的论文、看到一个个熟悉的作者,便产生莫名奇妙的亲切感。亲切归亲切,却也没有再返回的想法。一人独坐进餐时,却突然想起研究这个领域多年的感受与认识。不妨写下,更多的是希望写三者之间的关联,而不是单纯详细介绍其中一个,一来是为了纪念一个陪伴我多年的领域,二来希望能给后来者一些借鉴。也希望能和同行交流、切磋。

     先侃样条(spline)。大凡对数学的美感兴趣的人,也许对样条的兴趣不是很大。因为它给人的感觉过于人为化。然而,对其接触多之后,我感觉事情并不是这样的,spline函数有着很美的一面。

     也许人们会想起泛函分析里面对样条函数的一个解释:一个变分方程的极小解。这也许就是样条函数名称的由来。这个解释固然重要,但却不够美。因为这个解是近似下得到的。“近似”两个字将美的感觉破坏无疑。

     我们看另外一个解释。试想,给你一个立方体,你能从里边看出什么来?我们初中的时候就知道,立方体6个面、8个顶点,12条边。其它呢?似乎没有。但事情并不是这样的,我们可以从里面看出一个2次B样条函数。为说明这个事情,我们不妨简化,看能否从一个正方形中看出一个1次B样条函数。我们想象,直线沿着与正方形的一条对角线平行的方向运动,那么,它落在正方形内的线段长度如何变化呢?很容易看到,先为0,后线性增加,当与对角线重合时最大,随后下降,逐渐变为0。这个线段长度的变化函数就是一个1次B样条函数。如果我们将正方形换为正立方体,将直线换为平面,那么我们就得到2次B样条函数。如此,就能得到任意次B样条函数。单位立方体蕴含B样条函数!这是一个非常奇特的事情,可惜,能了解并可欣赏这件事情的
人并不是很多。一般的书里面,对这件事情是绝口不提的。但我却认为,这是样条函数最美的解释。上世纪四十年代,Schoenberg 提出样条函数非常重要的四种观点,却唯独没有单位立方体投影的观点。而这种观点也没有很好的发展,很多时候只是当作一个向入门的人演示的东西。这是很遗憾的。

     做博士论文时,在纯粹数学美的召唤下,曾经用B样条函数对组合、数论中的线性丢番图方程组做了一些研究。后来,发现与人交流时,对方总是不解地问:样条函数与组合怎么会有关系?于是,我想到了一个解释:样条函数可以看作凸多面体的投影,而凸多面体可以看作线性方程组的解空间,因此,这种关联是自然的。听者似乎马上明白。我对这个解释也自鸣得意了一阵。而后来逐渐发现,这个解释,对于样条与组合关联而言,也许真的是本质的。

     如今,样条函数在CAGD、小波及其它领域中均有了很好的应用。我想,一个非常重要的原因就是因为它有了一个很好的基底:B样条基底。

     样条函数始于40年代,到70年代与80年代初期,其研究达到高潮。而随之取代的可能是小波(wavelet)。一般工科研究人员,他可能没听说过上同调、切从甚至同胚。但大多数却听说过小波,并试图接近它。小波在短短十几年时间发展到如此地步,确实令人吃惊。而从事相关研究的人员,却往往为数学领域里面被引用次数最高的人员。单纯从数学角度而言,小波对数学最重要的一个贡献也许就是给出了L_2空间局部正交基底。但真正把小波炒热的却是工程人员,人们疯狂的试图将其用到各自的领域。
     小波与样条有着天然的血缘关系,这种天然的纽带是在何处建立的呢?我觉得,恰好是双尺度方程。小波基底的建立,需要一个满足双尺度方程的函数。而B样条函数恰好满足这种双尺度方程。于是,二者的联姻便在情理之中。如今,关于样条与小波的论文浩如烟海。我想,把握住了这根线,想掌握这个方向就容易多了。当然满足双尺度方程的函数并不是B样条函数一个,我们可以构造出很多。不幸的是,除了B样条函数,其它的似乎均不能写出解析表达形式,虽然它们有各种各样的级数定义方式。如今,小波的研究给人感觉到了强弩之末,但余劲似乎仍然悠长..........

      细分(subdivision)作为CAGD中独立的领域,时间并不是很久。其最初引起人的注意,应该是在小波中。我们说过,一般满足双尺度方程的函数是写不出解析表达形式的,细分便成了建构这些函数的有力工具,如著名的Daubechies 正交小波基底也可以说是通过细分方式得到的。在几何造型中,细分也是一种很重要的方法。但其细分格式的建立往往依赖于Box样条函数(B样条函数的高维推广),因为Box样条满足双尺度方程,而双尺度方程的可以提供很好的细分格式。有趣的是,反过来说,我们计算B样条的算法却往往来源于细分。因此,spline, wavelet 和 subdivision演出了相互关联,不能割舍,又互相制约的三国演义!
     如今,小波研究的一个热点是试图构造任意三角剖分下小波基底,而我们不能成功的原因,可以说是缺少任意三角剖分下subdivision 好的格式。如果我们能发现这种格式,也就能构造出任意三角剖分下B样条基底。反之,如果我们有任意三角剖分下B样条基底,就能构造出任意三角剖分下细分格式,相应的就会有小波基底。所以,三者的研究是相互牵扯的,任意一个方向的进展,都可能导出另外两个方向的进展。

      更进一步,球面及任意流行上基底的构造亦是如此!

后记:

     这篇杂记是在清华期间而写,并非严肃的学术性文章。也只是独自进餐后几刻钟而写的,贴在这里前只做了简单的文字修正,不妥之处肯定在所难免。这篇杂记标题后简单写了libai,dlut. 前者为我喜用的网络id,只因喜欢李白之诗而作此选择,无它;后者则为母校大连理工大学英文名称的简写。

相关文章推荐

三次样条插值(Cubic Spline Interpolation)及代码实现(C语言)

用C语言写了一个三次样条插值(自然边界)的S-Function,代码如下: #define S_FUNCTION_NAME cubic #define S_FUNCTION_LEVEL 2 #...

mathematica变分法和样条插值求解最小旋转曲面

mathematica求解最小面积旋转曲面 做你没做过的事叫成长,做你不愿做做的事叫改变,做你不敢做的事叫突破。—— 巴菲特 问题描述:在一条直线的同一侧有两个已知点,试找出一条连接这两点的曲线,...

数值方法——薄板样条插值(Thin-Plate Spline)

插值假设已知函数y=f(x)y=f(x)在N+1N+1个点x1,x2,⋯,xN+1x_1,x_2,\cdots,x_{N+1}处的函数值y1,y2,⋯,yN+1y_1,y_2,\cdots,y_{N+...

ArcGIS教程:样条函数法的工作原理

从概念上讲,采样点被拉伸到它们数量上的高度;样条函数折弯一个橡皮页,该橡皮页在最小化表面总曲率的同时穿过这些输入点。在穿过采样点时,它将一个数学函数与指定数量的最近输入点进行拟合。此方法最适合生成平缓...

C++实现三次样条插值算法

程序中函数说明:用float f(int x1, int x2, int x3)来写函数; 用void cal_m(int n)来解系数; 用void printout(int n)来确定次数。三...

三次样条插值

C++数值算法(第二版) 3.3 三次样条插值         给定一个列表显示的函数 yi=y(xi),i=0,1,2,...,N-1。特别注意在xj和xj+1之间的一个特殊的区间。该区间的线...

关于Thin Plate Spline (薄板样条函数)

最近在看AAM(主动表现模型)时看到了,对于“Given corresponding points in two images, how do we warp one into the other?”...

拉格朗日、分段线性、三次样条 插值 C语言

/* * @file interp.cpp * @author lsy * @date 2015-3-30 * @description * Interpol...

B样条绘制

一、简介 在数学的子学科数值分析里,B-样条是样条曲线一种特殊的表示形式。它是B-样条基曲线的线性组合。B-样条是贝兹曲线的一种一般化,可以进一步推广为非均匀有理B样条(NURBS),使得我们能给更...
  • lzb863
  • lzb863
  • 2015-08-02 20:36
  • 1257

三次样条函数插值

三次样条函数插值C++实现
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)