Main Content

ndBasis

調整可能なゲイン曲面の基底関数

説明

基底関数の拡張を使用して、tunableSurface コマンドでゲイン スケジュール コントローラーを調整するためのゲイン曲面をパラメーター化します。複数のスケジューリング変数がある場合、そのような拡張の複雑度はすぐに増大します。ndBasis を使用して、低次元の拡張から n 次元の拡張を行います。ndBasis は、拡張を各次元に沿って空間的に複製するという点で、ndgrid と類似しています。

shapefcn = ndBasis(F1,F2) は 2 つの基底関数の拡張の外積 (テンソル積) を形成します。それぞれの基底関数の拡張は、polyBasis などによって返される、拡張項のベクトルを返す関数です。F1(x1)=[F1,1(x1),F1,2(x1),,F1,i(x1)] かつ F2(x2)=[F2,1(x2),F2,2(x2),,F2,i(x2)] の場合、shapefcn は次の形式の項のベクトルです。

Fij=F1,i(x1)F2,j(x2).

項は列方向にリストされ、i の変化が最初で、次に j です。

shapefcn = ndBasis(F1,F2,...,FN) は 3 つ以上の基底関数の拡張の外積を形成します。shapefcn によって返されるベクトル内の項は、次の形式です。

Fi1iN=F1,ii(x1)F2,i2(x2)FN,iN(xN).

これらの項は n 次元配列の並べ替え順序でリストされ、i1 の変化が最初で、次に i2 のように続きます。それぞれの Fj 自体が、多次元の基底関数の拡張となることができます。

すべて折りたたむ

多項式関数の 2 次元の基底を両方の変数で 2 次まで作成します。

1 次元の基底関数一式を定義します。

F = @(x)[x,x^2];

同様に、polyBasis を使用して F を作成できます。

F = polyBasis('canonical',2);

F から 2 次元拡張を生成します。

F2D = ndBasis(F,F);

F2D は 2 つの変数の関数です。この関数は、以下の 2 つの変数の評価された基底関数を含むベクトルを返します。

F2D(x,y)=[x,x2,y,yx,yx2,y2,xy2,x2y2].

これを確認するには、x = 0.2、y = -0.3 について F2D を評価します。

F2D(0.2,-0.3)
ans = 1×8

    0.2000    0.0400   -0.3000   -0.0600   -0.0120    0.0900    0.0180    0.0036

ndBasis で組み合わせる拡張では次数が同じである必要はありません。たとえば、F を 1 つの変数での 1 次拡張と組み合わせます。

G = @(y)[y];
F2D2 = ndBasis(F,G);

F2D2 によって返される配列は F2D によって返される配列と似ていますが、2 番目の変数に二次の項がありません。

F2D2(x,y)=[x,x2,y,yx,yx2].

x = 0.2、y = -0.3 について F2D2 を評価して、項の次数を確認します。

F2D2(0.2,-0.3)
ans = 1×5

    0.2000    0.0400   -0.3000   -0.0600   -0.0120

拡張が 1 つの変数では 2 次元で、その他の変数では周期である、一連の 2 次元基底関数を作成します。

まず 1 次元の拡張を生成します。可読性を改善するため変数に名前を付けます。

F1 = polyBasis('canonical',2,'x');
F2 = fourierBasis(1,1,'y');

簡単にするため、この例では周期的な変動の最初の高調波のみを使用します。これらの拡張には、以下によって与えられる基底関数があります。

F1(x)=[x,x2],F2(y)=[cos(πy),sin(πy)].

2 次元の基底関数の拡張を作成します。ndBasis は、1 次元の拡張に割り当てた変数名を保持することに注意してください。

F = ndBasis(F1,F2)
F = function_handle with value:
    @(x,y)utFcnBasisOuterProduct(FDATA_,x,y)

F によって返される配列には、基底関数の乗法的組み合わせがすべて含まれます。

F(x,y)=[x,x2,cos(πy),cos(πy)x,cos(πy)x2,sin(πy),xsin(πy),x2sin(πy)].

これを確認するには、x = 0.2、y = -0.3 について F を評価します。

F(0.2,-0.3)
ans = 1×8

    0.2000    0.0400    0.5878    0.1176    0.0235   -0.8090   -0.1618   -0.0324

入力引数

すべて折りたたむ

基底関数の拡張。関数ハンドルとして指定します。関数は、1 つ以上のスケジューリング変数の基底関数のベクトルを返さなければなりません。これらの基底関数を明示的に、もしくは polyBasis または fourierBasis を使用して定義できます。

例: F = @(x)[x,x^2,x^3]

例: F = polyBasis(3,2)

出力引数

すべて折りたたむ

基底関数の拡張。関数ハンドルとして指定します。shapefcnF1,F2,...,FN の変数の合計数を入力引数として受け取ります。各入力変数の区間 [–1,1] で定義された、これらの変数の関数のベクトルを返します。shapefcn を使用してゲイン曲面を作成する場合、tunableSurface はベクトルに含まれる各項の調整可能な係数を自動的に生成します。

ヒント

  • ndBasis 演算は次のように結合的です。

    ndBasis(F1,ndBasis(F2,F3)) = ndBasis(ndBasis(F1,F2),F3) = ndBasis(F1,F2,F3)

バージョン履歴

R2015b で導入