张量积型的Bernstein基函数
所谓张量积型,或者乘积型的二元空间是指,他的基函数可以由一元基函数通过张量积(乘积)得到.例如,我们考虑两个分量的次数分别不超过m和n次的二元多项式空间
P
m
,
n
P_{m,n}
Pm,n,可以由两个一元多项式空间
P
m
P_m
Pm和
P
n
P_n
Pn的张量积得到,即
P
m
,
n
=
P
m
⨂
P
n
P_{m,n} = P_m \bigotimes P_n
Pm,n=Pm⨂Pn.因此
a
=
s
p
a
n
{
(
1
,
x
,
⋯
,
x
m
)
⨂
(
1
,
y
,
⋯
,
y
m
)
}
=
s
p
a
n
{
x
i
y
j
,
i
=
0
,
1
,
⋯
,
m
,
j
=
0
,
1
,
⋯
,
n
}
\begin{aligned} a& = span{\left\{{(1,x,\cdots,x^m)\bigotimes(1,y,\cdots,y^m)}\right\}} \\ & = span\left\{x^iy^j,i = 0,1,\cdots,m,j = 0,1,\cdots,n\right\} \end{aligned}
a=span{(1,x,⋯,xm)⨂(1,y,⋯,ym)}=span{xiyj,i=0,1,⋯,m,j=0,1,⋯,n}
P
m
,
n
P_{m,n}
Pm,n空间的基函数
x
i
y
j
(
i
=
0
,
1
,
⋯
,
m
,
j
=
0
,
1
,
⋯
,
n
)
x^iy^j(i = 0,1,\cdots,m,j = 0,1,\cdots,n)
xiyj(i=0,1,⋯,m,j=0,1,⋯,n)对应的矩阵结构,
1
x
x
2
x
3
⋯
y
x
y
x
2
y
x
3
y
⋯
y
2
x
y
2
x
2
y
2
x
3
y
2
⋯
y
3
x
y
3
x
2
y
3
x
3
y
3
⋯
⋮
⋮
⋮
⋮
\begin{matrix} 1 & x & x^2 & x^3 & \cdots \\ y & xy & x^2y & x^3y & \cdots \\ y^2 & xy^2 & x^2y^2 & x^3y^2 & \cdots \\ y^3 & xy^3 & x^2y^3 & x^3y^3 & \cdots \\ \vdots & \vdots & \vdots & \vdots \\ \end{matrix}
1yy2y3⋮xxyxy2xy3⋮x2x2yx2y2x2y3⋮x3x3yx3y2x3y3⋮⋯⋯⋯⋯
因此可以称为矩形上的多项式空间.
由上可知,通过两组Bernstein基函数
B
i
m
(
u
)
B^m_i(u)
Bim(u)和
B
j
n
(
v
)
B^n_j(v)
Bjn(v)的张量积,就可以得到张量积型的二元Bernstein基函数
B i , j m , n ( u , v ) = B i m ( u ) B j n ( v ) , i = 0 , 1 , ⋯ , m , j = 0 , 1 , ⋯ , n B^{m,n}_{i,j} (u,v)= B^{m}_{i}(u)B^{n}_{j}(v),i = 0,1,\cdots,m,j = 0,1,\cdots,n Bi,jm,n(u,v)=Bim(u)Bjn(v),i=0,1,⋯,m,j=0,1,⋯,n
下图给了三个张量积型的双二次Bernstein基函数
B
0
,
0
2
,
2
(
u
,
v
)
、
B
1
,
0
2
,
2
(
u
,
v
)
B^{2,2}_{0,0} (u,v)、B^{2,2}_{1,0} (u,v)
B0,02,2(u,v)、B1,02,2(u,v) 和
B
1
,
1
2
,
2
(
u
,
v
)
B^{2,2}_{1,1} (u,v)
B1,12,2(u,v)在单位矩阵
[
0
,
1
]
×
[
0
,
1
]
[0,1]\times[0,1]
[0,1]×[0,1]上的图像.
二、相应的matlab程序
function bernstein_surf_bf
%bf: basis function基函数
%张量积型的bernstein基函数
a = 0;
b = 1;
N = 40;
M = 50;
hx = (b-a)/N;
hy = (b-a)/M;
x = (a:hx:b)'; %x:[0,1]区间N等分得到的向量
y = (a:hy:b)'; %y:[0,1]区间M等分得到的向量
n = 2;
m = 2;
z = f(x,y,n,m,1,1);
figure(1)
surf(x,y,z)
title('B^{2,2}_{1,1}');
end
function z = f(x,y,n,m,N,M) %n:n次bernstein基函数;m:m次bernstein基函数
[x,y] =meshgrid(x,y); %N:n次bernstein基函数中取B(n,N)
z = B(x,n,N).*B(y,m,M);
end
function y = B(x,n,i)
y = k(n,i).*(x.^i).*((1-x).^(n-i));
end
function y = k(n,i)
y1 = factorial(n); %n的阶乘
y2 = factorial(i)*factorial(n-i);
y = y1/y2;
end