Main Content

bernstein

バーンスタイン多項式

説明

関数ハンドル f をもつ bernstein(f,n,t) は、t 点において評価された n 次のバーンスタイン多項式 symsum(nchoosek(n,k)*t^k*(1-t)^(n-k)*f(k/n),k,0,n) を返します。この多項式は、区間 [0,1] における関数 f を近似します。

シンボリック式または関数 g をもつ bernstein(g,n,t) は、t 点において評価された n 次のバーンスタイン多項式を返します。この構文における g は、symvar(g,1) によって決まる変数の一変数関数として認識されます。

引数のいずれかがシンボリックである場合、bernstein では関数ハンドル以外の引数がすべてシンボリックに変換され、関数ハンドルの結果もシンボリックに変換されます。

シンボリック式または関数 g をもつ bernstein(g,var,n,t) は、g を変数 var の一変数関数と見なし、n 次の近似バーンスタイン多項式を返します。

関数ハンドルとして指定される正弦関数の近似

10 次および 100 次のバーンスタイン多項式で正弦関数を近似します。

syms t
b10 = bernstein(@(t) sin(2*pi*t), 10, t);
b100 = bernstein(@(t) sin(2*pi*t), 100, t);

sin(2*pi*t) とその近似をプロットします。

fplot(sin(2*pi*t),[0,1])
hold on
fplot(b10,[0,1])
fplot(b100,[0,1])

legend('sine function','10th-degree polynomial',...
                      '100th-degree polynomial')
title('Bernstein polynomials')
hold off

Figure contains an axes object. The axes object with title Bernstein polynomials contains 3 objects of type functionline. These objects represent sine function, 10th-degree polynomial, 100th-degree polynomial.

シンボリック式として指定される指数関数の近似

指数関数を変数 t の 2 次のバーンスタイン多項式で近似します。

syms x t
bernstein(exp(x), 2, t)
ans =
(t - 1)^2 + t^2*exp(1) - 2*t*exp(1/2)*(t - 1)

多変数指数関数を近似します。多変数関数を近似する場合、bernstein はこの関数を symvar によって決まる既定の変数の一変数関数として認識します。式 y*exp(x*y) の既定の変数は x です。

syms x y t
symvar(y*exp(x*y), 1)
ans =
x

bernstein はこの式を x の一変数関数と見なします。

bernstein(y*exp(x*y), 2, t)
ans =
y*(t - 1)^2 + t^2*y*exp(y) - 2*t*y*exp(y/2)*(t - 1)

y*exp(x*y) を変数 y の関数として扱うには、変数を明示的に指定します。

bernstein(y*exp(x*y), y, 2, t)
ans =
t^2*exp(x) - t*exp(x/2)*(t - 1)

シンボリック関数として指定される直線傾斜の近似

直線傾斜を表す関数 f を変数 t の 5 次のバーンスタイン多項式で近似します。

syms f(t)
f(t) = triangularPulse(1/4, 3/4, Inf, t);
p = bernstein(f, 5, t)
p =
7*t^3*(t - 1)^2 - 3*t^2*(t - 1)^3 - 5*t^4*(t - 1) + t^5

結果を単純化します。

simplify(p)
ans =
-t^2*(2*t - 3)

単純化されたバーンスタイン多項式の数値安定性

シンボリックな高階数のバーンスタイン多項式を単純化すると、数値的に安定した方法で結果を評価できないことがよくあります。

この矩形パルス関数を 100 次のバーンスタイン多項式で近似し、その結果を単純化します。

f = @(x)rectangularPulse(1/4,3/4,x);
b1 = bernstein(f, 100, sym('t'));
b2 = simplify(b1);

多項式 b1 と単純化した多項式 b2 を MATLAB® 関数に変換します。

f1 = matlabFunction(b1);
f2 = matlabFunction(b2);

元の矩形パルス関数、数値的に安定したバーンスタイン多項式表現 f1 および単純化版の f2 のプロットを比較してみてください。単純化版は数値的に安定していません。

t = 0:0.001:1;
plot(t, f(t), t, f1(t), t, f2(t))
hold on
legend('original function','Bernstein polynomial',...
                'simplified Bernstein polynomial')
hold off

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent original function, Bernstein polynomial, simplified Bernstein polynomial.

入力引数

すべて折りたたむ

多項式で近似する関数。関数ハンドルとして指定します。f は 1 つのスカラーの入力引数を受け入れ、1 つのスカラー値を返さなければなりません。

多項式で近似する関数。シンボリック式またはシンボリック関数として指定します。

バーンスタイン多項式の階数。非負の数値として指定します。

評価点は、数値、シンボリック数、変数、式または関数として指定します。t がシンボリック関数の場合、評価点は t を定義する数式です。t を定義する数式を抽出するために、bernstein では formula(t) を使用します。

自由変数。シンボリック変数として指定します。

詳細

すべて折りたたむ

バーンスタイン多項式

バーンスタイン多項式は、バーンスタイン基底多項式の線形結合です。

n 次のバーンスタイン多項式は次のように定義されます。

B(t)=k=0nβkbk,n(t).

ここで

bk,n(t)=(nk)tk(1t)nk,   k=0,,n

はバーンスタイン基底多項式で、(nk) は二項係数です。

係数 βk は、バーンスタイン係数またはベジエ係数と呼ばれています。

f が区間 [0, 1] で連続関数であり、また

Bn(f)(t)=k=0nf(kn)bk,n(t)

が近似バーンスタイン多項式である場合、

limnBn(f)(t)=f(t)

t で区間 [0, 1] において一様に成立します。

ヒント

  • シンボリックな t に対して返されるシンボリック多項式は、t に対して 0 から 1 の間の数値を代入する場合、数値的に安定しています。

  • シンボリックなバーンスタイン多項式を単純化すると、曲線のパラメーター t に対して数値を代入した場合に結果が不安定になることがあります。

バージョン履歴

R2013b で導入