ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

bernstein

バーンスタイン多項式

構文

  • bernstein(f,n,t)
  • bernstein(g,n,t)
  • bernstein(g,var,n,t)

説明

関数ハンドル 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) とその近似を次のようにプロットします。

pr = ezplot(sin(2*pi*t),[0,1]);
hold on
pg = ezplot(b10,[0,1]);
pb = ezplot(b100,[0,1]);

set(pr,'Color','red')
set(pg,'Color','green')
set(pb,'Color','blue')

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

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

指数関数を変数 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

入力引数

すべて展開する

f - 多項式で近似する関数関数ハンドル

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

g - 多項式で近似する関数シンボリック式 | シンボリック関数

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

n - バーンスタイン多項式の次数非負の整数

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

t - 評価点数値 | シンボリックな数値 | シンボリック変数 | シンボリック式 | シンボリック関数

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

var - 自由変数シンボリック変数

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

詳細

すべて展開する

バーンスタイン多項式

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

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

ここで

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

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

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

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

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

ヒント

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

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

参考

| | | | | | | |

この情報は役に立ちましたか?