伯恩斯坦多项式(Bernstein Polynomials)

本文深入探讨了伯恩斯坦多项式,包括其定义、性质和在数学及计算机图形学中的应用。伯恩斯坦多项式是多项式空间的一种基,具有非负性和单位剖分性,常用于几何建模。此外,文章还介绍了如何在伯恩斯坦基与幂基之间转换,并展示了其矩阵表示,这对于理解和使用这些多项式至关重要。

多项式是非常有用的数学工具,因为它们定义简单,可以在计算机系统上快速计算,并代表各种函数。多项式可以很容易进行微分和积分,并且可以拼接在一起形成样条曲线,该曲线可以逼近任何函数,达到所需的任何精度。我们在小学四年级就已经学过多项式的相关知识,让我们来回顾一下
p(t)=antn+an−1tn−1+⋯+a1t+a0(1) p(t)=a_nt^n+a_{n-1}t^{n-1}+\cdots+a_1t+a_0 \tag{1} p(t)=antn+an1tn1++a1t+a0(1)
上式表示某些初等多项式的{1,t,t2,…,tn}\{1,t,t^2,\dots,t^n\}{1,t,t2,,tn}的线性组合。

通常来说,次数小于nnn的多项式函数都可以写成式(1)这种形式,原因很简单

  • 次数小于或等于nnn的一组多项式构成一个向量空间:多项式可以相加,可以乘以一个标量,且所有向量空间的性质都保持不变。
  • {1,t,t2,…,tn}\{1,t,t^2,\dots,t^n\}{1,t,t2,,tn}这组函数可以作为此向量空间的基,也就是说,任何次数小于或等于nnn的多项式都可以被这组基唯一的线性表示出来。

这组基通常称为幂基(power basis),其只是多项式空间无穷多个基中其中的一个。

下面我们开始讨论多项式空间中的另一种常用的基——伯恩斯坦基(Bernstein basis),并讨论其性质。

伯恩斯坦多项式(Bernstein Polynomials)

nnn次伯恩斯坦多项式定义为
Bi,n(t)=(ni)ti(1−t)n−i(2) B_{i, n}(t)=\left(\begin{array}{l} n \\ i \end{array}\right) t^{i}(1-t)^{n-i} \tag{2} Bi,n(t)=(ni)ti(1t)ni(2)
i=0,1,⋯ ,ni=0,1,\cdots,ni=0,1,,n,其中
(ni)=n!i!(n−i)! \left(\begin{array}{l} n \\ i \end{array}\right) = \frac{n!}{i!(n-i)!} (ni)=i!(ni)!n!
从定义我们可以看出,共有n+1n+1n+1nnn次的伯恩斯坦多项式。为了方便,当i<0i<0i<0i>ni>ni>n时,我们令Bi,n=0B_{i,n}=0Bi,n=0

  • 一次的伯恩斯坦多项式为
    B0,1(t)=1−tB1,1(t)=t \begin{array}{l} B_{0,1}(t)=1-t \\ B_{1,1}(t)=t \end{array} B0,1(t)=1tB1,1(t)=t
    0≤t≤10\leq t \leq 10t1时,我们可以画出其图像

    image-20210505211718400

  • 二次伯恩斯坦多项式为
    B0,2(t)=(1−t)2B1,2(t)=2t(1−t)B2,2(t)=t2 \begin{array}{l} B_{0,2}(t)=(1-t)^2 \\ B_{1,2}(t)=2t(1-t) \\ B_{2,2}(t)=t^2 \end{array} B0,2(t)=(1t)2B1,2(t)=2t(1t)B2,2(t)=t2
    0≤t≤10\leq t \leq 10t1时,我们可以画出其图像

    image-20210505212322316

  • 三次伯恩斯坦多项式为
    B0,3(t)=(1−t)3B1,3(t)=3t(1−t)2B2,3(t)=3t2(1−t)B3,3(t)=t3 \begin{array}{l} B_{0,3}(t)=(1-t)^3 \\ B_{1,3}(t)=3t(1-t)^2 \\ B_{2,3}(t)=3t^2(1-t) \\ B_{3,3}(t)=t^3 \end{array} B0,3(t)=(1t)3B1,3(t)=3t(1t)2B2,3(t)=3t2(1t)B3,3(t)=t3
    0≤t≤10\leq t \leq 10t1时,我们可以画出其图像

伯恩斯坦多项式的递归定义

nnn阶伯恩斯坦多项式可以定义为两个n−1n-1n1阶伯恩斯坦多项式的混合。也就是说第kkknnn阶伯恩斯坦多项式可以写成
Bk,n(t)=(1−t)Bk,n−1(t)+tBk−1,n−1(t)(3) B_{k,n}(t)=(1-t)B_{k,n-1}(t)+tB_{k-1,n-1}(t) \tag{3} Bk,n(t)=(1t)Bk,n1(t)+tBk1,n1(t)(3)
为了证明式(3)成了,我们只需用到伯恩斯坦多项式的定义和一些简单的代数:
(1−t)Bk,n−1(t)+tBk−1,n−1(t)=(1−t)(n−1k)tk(1−t)n−1−k+t(n−1k−1)tk−1(1−t)n−1−(k−1)=(n−1k)tk(1−t)n−k+(n−1k−1)tk(1−t)n−k=[(n−1k)+(n−1k−1)]tk(1−t)n−k=(nk)tk(1−t)n−k=Bk,n(t) \begin{aligned} (1-t) B_{k, n-1}(t)+t B_{k-1, n-1}(t) &=(1-t)\left(\begin{array}{c} n-1 \\ k \end{array}\right) t^{k}(1-t)^{n-1-k}+t\left(\begin{array}{l} n-1 \\ k-1 \end{array}\right) t^{k-1}(1-t)^{n-1-(k-1)} \\ &=\left(\begin{array}{c} n-1 \\ k \end{array}\right) t^{k}(1-t)^{n-k}+\left(\begin{array}{c} n-1 \\ k-1 \end{array}\right) t^{k}(1-t)^{n-k} \\ &=\left[\left(\begin{array}{c} n-1 \\ k \end{array}\right)+\left(\begin{array}{l} n-1 \\ k-1 \end{array}\right)\right] t^{k}(1-t)^{n-k} \\ &=\left(\begin{array}{l} n \\ k \end{array}\right) t^{k}(1-t)^{n-k} \\ &=B_{k, n}(t) \end{aligned} (1t)Bk,n1(t)+tBk1,n1(t)=(1t)(n1k)tk(1t)n1k+t(n1k1)tk1(1t)n1(k1)=(n1k)tk(1t)nk+(n1k1)tk(1t)nk=[(n1k)+(n1k1)]tk(1t)nk=(nk)tk(1t)nk=Bk,n(t)

伯恩斯坦多项式是非负的

如果一个函数f(t)f(t)f(t)在区间[a,b][a,b][a,b]上满足f(t)≥0f(t) \geq 0f(t)0,则这个函数就是非负的。每一个nnn次的伯恩斯坦多项式在区间[0,1][0,1][0,1]上都是非负的。我们可以通过递归定义来证明此性质。

很容易,我们可以知道一次伯恩斯坦多项式B0,1(t)=1−tB_{0,1}(t)=1-tB0,1(t)=1tB1,1(t)=tB_{1,1}(t)=tB1,1(t)=t0≤t≤10 \leq t \leq 10t1上是非负的。我们假设所有不大于kkk次的伯恩斯坦多项式都是非负的,则我们使用递归定义
Bi,k(t)=(1−t)Bi,k−1(t)+tBi−1,k−1(t) B_{i,k}(t)=(1-t)B_{i,k-1}(t)+tB_{i-1,k-1}(t) Bi,k(t)=(1t)Bi,k1(t)+tBi1,k1(t)
由于等式右边所有的项在0≤t≤10 \leq t \leq 10t1上都是非负的,则我们可以认为Bi,k(t)B_{i,k}(t)Bi,k(t)0≤t≤10 \leq t \leq 10t1上也是非负的。通过数学归纳法,我们就可以证明所有的伯恩斯坦多项式在0≤t≤10 \leq t \leq 10t1上是非负的。

伯恩斯坦多项式拥有单位剖分性

如果一组函数,当自变量取值为ttt时相加等于1,则称该组函数具有单位剖分性。k+1k+1k+1kkk次多项式具有单位剖分性质,因为他们相加等于1.

对于任意的kkkk+1k+1k+1kkk次伯恩斯坦多项式的在ttt处的和等于kkkk−1k-1k1次伯恩斯坦多项式的在ttt处的和,即
∑i=0kBi,k(t)=∑i=0k−1Bi,k−1(t) \sum_{i=0}^k B_{i,k}(t) = \sum_{i=0}^{k-1} B_{i,k-1}(t) i=0kBi,k(t)=i=0k1Bi,k1(t)
单位划分的性质在几何建模和计算机图形学上非常的重要。特别的,对于三维空间中任何一组点P0,P1,⋯ ,PnP_0,P_1,\cdots,P_nP0,P1,,Pn对于任意的ttt,表达式
P(t)=P0B0,n(t)+P1B1,n(t)+⋯+PnBn,n(t) P(t)=P_0B_{0,n}(t)+P_1B_{1,n}(t)+\cdots+P_nB_{n,n}(t) P(t)=P0B0,n(t)+P1B1,n(t)++PnBn,n(t)
是这组点的仿射组合,且如果0≤t≤10 \leq t \leq 10t1则它是这组点的凸组合。

升阶

任意一个低阶的伯恩斯坦多项式(次数<n<n<n)都可以表达成nnn次伯恩斯坦多项式的线性组合。特别的,n−1n-1n1次伯恩斯坦多项式可以写成nnn次伯恩斯坦多项式的线性组合。首先我们注意到
tBi,n(t)=(ni)ti+1(1−t)n−i=(ni)ti+1(1−t)(n+1)−(i+1)=(ni)(n+1i+i)Bi+1,n+1(t)=i+1n+1Bi+1,n+1(t) \begin{aligned} t B_{i, n}(t) &=\left(\begin{array}{c} n \\ i \end{array}\right) t^{i+1}(1-t)^{n-i} \\ &=\left(\begin{array}{c} n \\ i \end{array}\right) t^{i+1}(1-t)^{(n+1)-(i+1)} \\ &=\frac{\left(\begin{array}{c} n \\ i \end{array}\right)}{\left(\begin{array}{c} n+1 \\ i+i \end{array}\right)} B_{i+1, n+1}(t) \\ &=\frac{i+1}{n+1} B_{i+1, n+1}(t) \end{aligned} tBi,n(t)=(ni)ti+1(1t)ni=(ni)ti+1(1t)(n+1)(i+1)=(n+1i+i)(ni)Bi+1,n+1(t)=n+1i+1Bi+1,n+1(t)

(1−t)Bi,n(t)=(ni)ti(1−t)n+1−i=(ni)(n+1i)Bi,n+1(t)=n−i+1n+1Bi,n+1(t) \begin{aligned} (1-t) B_{i, n}(t) &=\left(\begin{array}{c} n \\ i \end{array}\right) t^{i}(1-t)^{n+1-i} \\ &=\frac{\left(\begin{array}{c} n \\ i \end{array}\right)}{\left(\begin{array}{c} n+1 \\ i \end{array}\right)} B_{i, n+1}(t) \\ &=\frac{n-i+1}{n+1} B_{i, n+1}(t) \end{aligned} (1t)Bi,n(t)=(ni)ti(1t)n+1i=(n+1i)(ni)Bi,n+1(t)=n+1ni+1Bi,n+1(t)
最后
1(ni)Bi,n(t)+1(ni+1)Bi+1,n(t)=ti(1−t)n−i+ti+1(1−t)n−(i+1)=ti(1−t)n−i−1((1−t)+t)=ti(1−t)n−i−1=1(n−1i)Bi,n−1(t) \begin{aligned} \frac{1}{\left(\begin{array}{c} n \\ i \end{array}\right)} B_{i, n}(t)+\frac{1}{\left(\begin{array}{c} n \\ i+1 \end{array}\right)} B_{i+1, n}(t) &=t^{i}(1-t)^{n-i}+t^{i+1}(1-t)^{n-(i+1)} \\ &=t^{i}(1-t)^{n-i-1}((1-t)+t) \\ &=t^{i}(1-t)^{n-i-1} \\ &=\frac{1}{\left(\begin{array}{c} n-1 \\ i \end{array}\right)} B_{i, n-1}(t) \end{aligned} (ni)1Bi,n(t)+(ni+1)1Bi+1,n(t)=ti(1t)ni+ti+1(1t)n(i+1)=ti(1t)ni1((1t)+t)=ti(1t)ni1=(n1i)1Bi,n1(t)
使用最后这个公式,我们就可以根据高阶的伯恩斯坦多项式写出任意的伯恩斯坦多项式,即
Bi,n−1(t)=(n−1i)[1(ni)Bi,n(t)+1(ni+1)Bi+1,n(t)]=(n−in)Bi,n(t)+(i+1n)Bi+1,n(t) \begin{aligned} B_{i, n-1}(t) &=\left(\begin{array}{c} n-1 \\ i \end{array}\right)\left[\frac{1}{\left(\begin{array}{c} n \\ i \end{array}\right)} B_{i, n}(t)+\frac{1}{\left(\begin{array}{c} n \\ i+1 \end{array}\right)} B_{i+1, n}(t)\right] \\ &=\left(\frac{n-i}{n}\right) B_{i, n}(t)+\left(\frac{i+1}{n}\right) B_{i+1, n}(t) \end{aligned} Bi,n1(t)=(n1i)(ni)1Bi,n(t)+(ni+1)1Bi+1,n(t)=(nni)Bi,n(t)+(ni+1)Bi+1,n(t)
这说明了n−1n-1n1次的伯恩斯坦多项式可以有nnn次的伯恩斯坦多项式线性组合表示。于是我们可以说任何kkk次(小于nnn)的伯恩斯坦多项式都可以写成nnn次伯恩斯坦多项式的线性组合。例如,n−2n−2n2次的伯恩斯坦多项式可以表示为两个n−1n−1n1次伯恩斯坦多项式的线性组合,而每个n−1n-1n1次的伯恩斯坦多项式,又可以表示为两个nnn次伯恩斯坦多项式的线性组合,依此类推。

伯恩斯坦多项式基与幂基的转换

由于幂基{1,t,t2,⋯ ,tn}\{1,t,t^2,\cdots,t^n\}{1,t,t2,,tn}构成了次数小于或等于nnn的多项式空间的基,所以任何一个nnn次伯恩斯坦多项式都可以用幂基表示。我们可以通过伯恩斯坦多项式的定义和二项式定理得到
Bk,n(t)=(nk)tk(1−t)n−k=(nk)tk∑i=0n−k(−1)i(n−ki)ti=∑i=0n−k(−1)i(nk)(n−ki)ti+k=∑i=kn(−1)i−k(nk)(n−ki−k)ti=∑i=kn(−1)i−k(ni)(ik)ti \begin{aligned} B_{k, n}(t) &=\left(\begin{array}{l} n \\ k \end{array}\right) t^{k}(1-t)^{n-k} \\ &=\left(\begin{array}{l} n \\ k \end{array}\right) t^{k} \sum_{i=0}^{n-k}(-1)^{i}\left(\begin{array}{c} n-k \\ i \end{array}\right) t^{i} \\ &=\sum_{i=0}^{n-k}(-1)^{i}\left(\begin{array}{l} n \\ k \end{array}\right)\left(\begin{array}{c} n-k \\ i \end{array}\right) t^{i+k} \\ &=\sum_{i=k}^{n}(-1)^{i-k}\left(\begin{array}{c} n \\ k \end{array}\right)\left(\begin{array}{c} n-k \\ i-k \end{array}\right) t^{i} \\ &=\sum_{i=k}^{n}(-1)^{i-k}\left(\begin{array}{c} n \\ i \end{array}\right)\left(\begin{array}{l} i \\ k \end{array}\right) t^{i} \end{aligned} Bk,n(t)=(nk)tk(1t)nk=(nk)tki=0nk(1)i(nki)ti=i=0nk(1)i(nk)(nki)ti+k=i=kn(1)ik(nk)(nkik)ti=i=kn(1)ik(ni)(ik)ti
其中,我们使用了二项式定理对(1−t)n−k(1-t)^{n-k}(1t)nk进行展开。

对于幂基转换成伯恩斯坦基,我们可以使用升阶公式
tk=t(tk−1)=t∑i=k−1n(ik−1)(nk−1)Bi,n−1(t)=∑i=kn(i−1k−1)(n−1k−1)tBi−1,n−1(t)=∑i=k−1n−1(ik−1)(nk−1)inBi,n(t)=∑i=k−1n−1(ik)(nk)Bi,n(t) \begin{aligned} t^{k} &=t\left(t^{k-1}\right) \\ &=t \sum_{i=k-1}^{n} \frac{\left(\begin{array}{c} i \\ k-1 \end{array}\right)}{\left(\begin{array}{l} n \\ k-1 \end{array}\right)} B_{i, n-1}(t) \\ &=\sum_{i=k}^{n} \frac{\left(\begin{array}{c} i-1 \\ k-1 \end{array}\right)}{\left(\begin{array}{c} n-1 \\ k-1 \end{array}\right)} t B_{i-1, n-1}(t) \\ &=\sum_{i=k-1}^{n-1} \frac{\left(\begin{array}{c} i \\ k-1 \end{array}\right)}{\left(\begin{array}{c} n \\ k-1 \end{array}\right)} \frac{i}{n} B_{i, n}(t) \\ &=\sum_{i=k-1}^{n-1} \frac{\left(\begin{array}{l} i \\ k \end{array}\right)}{\left(\begin{array}{c} n \\ k \end{array}\right)} B_{i, n}(t) \end{aligned} tk=t(tk1)=ti=k1n(nk1)(ik1)Bi,n1(t)=i=kn(n1k1)(i1k1)tBi1,n1(t)=i=k1n1(nk1)(ik1)niBi,n(t)=i=k1n1(nk)(ik)Bi,n(t)
在第二步中我们使用了归纳假设。

伯恩斯坦多项式的矩阵表达

在许多应用场景中,使用矩阵形式的伯恩斯坦多项式是方便的。我们写出一个由伯恩斯坦基函数线性组合得到的多项式
B(t)=c0B0,n(t)+c1B1,n(t)+⋯+cnBn,n(t) B(t)=c_0B_{0,n}(t)+c_1B_{1,n}(t)+\cdots+c_nB_{n,n}(t) B(t)=c0B0,n(t)+c1B1,n(t)++cnBn,n(t)
我们很容易的将上式写成两个向量点乘的形式
B(t)=[B0,n(t)B1,n(t)⋯Bn,n(t)][c0c1⋮cn] B(t)=\left[\begin{array}{llll} B_{0, n}(t) & B_{1, n}(t) & \cdots & B_{n, n}(t) \end{array}\right]\left[\begin{array}{c} c_{0} \\ c_{1} \\ \vdots \\ c_{n} \end{array}\right] B(t)=[B0,n(t)B1,n(t)Bn,n(t)]c0c1cn
进一步,可以写出
B(t)=[1tt2⋯tn][b0,000⋯0b1,0b1,10⋯0b2,0b2,1b2,2⋯0⋮⋮⋮⋱⋮bn,0bn,1bn,2⋯bn,n][c0c1c2⋮cn] B(t)=\left[\begin{array}{llll} 1 & t & t^2 & \cdots & t^n \end{array}\right] \left[\begin{array}{c} b_{0,0} & 0 & 0 & \cdots & 0 \\ b_{1,0} & b_{1,1} & 0 & \cdots & 0 \\ b_{2,0} & b_{2,1} & b_{2,2} & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ b_{n,0} & b_{n,1} & b_{n,2} & \cdots & b_{n,n} \end{array}\right] \left[\begin{array}{c} c_{0} \\ c_{1} \\ c_{2} \\ \vdots \\ c_{n} \end{array}\right] B(t)=[1tt2tn]b0,0b1,0b2,0bn,00b1,1b2,1bn,100b2,2bn,2000bn,nc0c1c2cn
其中bi,jb_{i,j}bi,j是用于确定相应伯恩斯坦多项式的幂基系数。可以看出,该矩阵是一个下三角矩阵。

对于二次多项式(n=2n=2n=2)的情况,矩阵表示为
B(t)=[1tt2][100−2201−20][c0c1c2] B(t)=\left[\begin{array}{llll} 1 & t & t^2 \end{array}\right] \left[\begin{array}{c} 1 & 0 & 0 \\ -2 & 2 & 0 \\ 1 & -2 & 0 \\ \end{array}\right] \left[\begin{array}{c} c_{0} \\ c_{1} \\ c_{2} \end{array}\right] B(t)=[1tt2]121022000c0c1c2
对于三次(n=3n=3n=3)的情况,矩阵表示为
B(t)=[1tt2t3][1000−33003−630−13−31][c0c1c2c3] B(t)=\left[\begin{array}{llll} 1 & t & t^2 & t^3 \end{array}\right] \left[\begin{array}{c} 1 & 0 & 0 & 0 \\ -3 & 3 & 0 & 0 \\ 3 & -6 & 3 & 0 \\ -1 & 3 & -3 & 1 \\ \end{array}\right] \left[\begin{array}{c} c_{0} \\ c_{1} \\ c_{2} \\ c_{3} \end{array}\right] B(t)=[1tt2t3]1331036300330001c0c1c2c3

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值