B-spline Basis Functions B样条基函数(转)

2023-10-19 20:10

本文主要是介绍B-spline Basis Functions B样条基函数(转),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://www.cnblogs.com/icmzn/p/5100761.html

基函数

这里讨论B-spline Basis Functions

设U 是m + 1个非递减数的集合,u0 <= u2 <= u3 <= ... <= um。ui称为节点(knots), 集合U 称为节点向量(knot vector), 半开区间[ui, ui+1) 是第i个节点区间(knot span)。注意某些ui可能相等,某些节点区间会不存在。如果一个节点 ui 出现 k 次 (即,ui = ui+1 = ... = ui+k-1), 其中 k > 1, ui 是一个重复度(multiplicity)为k 的多重节点,写为 ui(k)。 否则,如果ui只出现一次,它是一个简单节点。如果节点等间距(即, ui+1 - ui 是一个常数,对 0 <= i <= m - 1),节点向量或节点序列称为均匀的;否则它是非均匀的。

为了定义B-样条基函数,我们还需要一个参数,基函数的次数(degree)p,第i个p次B-样条基函数,写为Ni,p(u),递归定义如下:

11173460-68269e312a08009c.jpg
bs-basis[1].jpg

上述公式通常称为Cox-de Boor递归公式。 这个定义看起来很复杂;但是不难理解。如果次数(degree)为零(即, p = 0),这些基函数都是阶梯函数,这也是第一个表达式所表明的。即,如果u是在第i个节点区间[ui, ui+1)上基函数Ni,0(u)是1。 例如,如果我们有四个节点u0 = 0, u1 = 1, u2 = 2和 u3 = 3, 节点区间 0, 1 和2是[0,1), [1,2), [2,3),0次基函数是N0,0(u) = 1 在 [0,1) ,在其它区间是0;N1,0(u) = 1 在 [1,2)上,在其它区间是0;N2,0(u) = 1在[2,3)上,其它区间是0。如下图所示:
11173460-70f2a493478356eb.jpg
bs-basis-0[1].jpg

为了理解p大于0时计算Ni,p(u)的方法,我们使用三角计算格式。所有节点区间列在左边(第一)列,所有零次基函数在第二列。见下图。
11173460-006569177cbce456.jpg
bs-scheme[1].jpg

两个重要的观察

因为 Ni,1(u) 是从 Ni,0(u) 和 Ni+1,0(u)计算的而 因为Ni,0(u)和Ni+1,0(u) 在区间[ui, ui+1)和[ui+1, ui+2)分别是非零的,Ni,1(u) 在这两个区间都是非零的。换句话说,Ni,1(u)在[ui, ui+2)上是非零的。相似地,因为 Ni,2(u) 依赖于Ni,1(u) 和Ni+1,1(u)且因为这两个基函数在[ui, ui+2)和[ui+1, ui+3)分别是非零的,Ni,2(u)在[ui, ui+3)上非零。总之,为确定基函数Ni,p(u), 的非零定义域,可以追溯到三角计算格式直到回到第一列。例如,假设我们想找到 N1,3(u)的非零定义域。基于上述讨论,我们可从西北和西南方向追溯直到第一列为止,如下图中蓝色虚线所示。因此 N1,3(u)在 [u1, u2), [u2, u3), [u3, u4) 和[u4, u5)上是非零的。或,相等地,它在[u1, u5)上非零。

11173460-b1cfe54e7628e7a4.jpg
bs-back[1].jpg

总之,我们有下列观察:

基函数 Ni,p(u)** 在[ui, ui+p+1)****上非零。或,相等地,Ni,p(u)** p+1****个节点区间[ui, ui+1), [ui+1, ui+2), ..., [ui+p, ui+p+1)****上非零。**
   接着,我们看相反的方向。给定一个节点区间[ui, ui+1),我们想知道哪个基函数会在计算中使用这个区间。我们可以以这个节点区间开始并画一个西北界限箭头和一个西南界限的箭头。所有封闭在楔形里的基函数使用 Ni,0(u)(为什么?)因此在该区间是非零的。因此,所有在[ui, ui+1)上非零的p 次基函数是这个楔形和包含所有Ni,p(u) 的列的交集。实际上,这一列和两个箭头形成一个等边三角形,而这一列是垂直边。 从 Ni,0(u) 数到 Ni,p(u) 有p+1列。因此,等边三角形的垂直边至多有p+1 项,即 Ni,p(u), Ni-1,p(u), Ni-2,p(u), ..., Ni-p+2,p(u), Ni-p+1,p(u) 和Ni-p,p(u)。

11173460-f418d6b862c865ed.jpg
bs-non-0[1].jpg

让我们看上图。为了找到所有3次在 [u4, u5) 上非零的基函数,画出两个箭头和所有在垂直边的函数是我们想要的。这个例子,是N1,3(u), N2,3(u), N3,3(u), 和N4,3(u).用黄色三角表示。蓝色 (resp., 红色) 三角显示的是在[u3, u4) (resp., [u2, u3) )上非零的3次基函数。注意在[u2, u3)上只有3个3次基多项式。.
总之,我们观察到下列特性:
  在任何一个节点区间 [ui, ui+1), 最多有 p+1个p 次基函数非零,即:Ni-p,p(u), Ni-p+1,p(u), Ni-p+2,p(u), ..., Ni-1,p(u) 和 Ni,p(u)。

系数的意义是什么?

最后,让我们研究下Ni,p(u)定义中系数的意义。当计算 Ni,p(u) 时,它使用Ni,p-1(u)和Ni+1,p-1(u)。前者在 [ui, ui+p)上非零。如果u 是在这个半开区间,那么u - ui 是u 和这个区间左端之间的距离,区间长度是ui+p - ui, ,而(u - ui) / (ui+p - ui) 是上述距离的比且在0和1之间。见下图。第二项,Ni,p-1(u),在[ui+1, ui+p+1)上非零。如果u 在该区间,那么ui+p+1 - u 是 u 到该区间右端的距离,ui+p+1 - ui+1 是区间长度,而(ui+p+1 - u) / (ui+p+1 - ui+1) 是这两个距离的比且值在0和1之间。因此, Ni,p(u) 是Ni,p-1(u) 和Ni+1,p-1(u)的线性组合,有两个系数,都在 u上是线性的,在0和1之间。

11173460-41d119ac42270413.jpg
division-of-u[1].jpg

这篇关于B-spline Basis Functions B样条基函数(转)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/242091

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http