fncmb
関数を用いた算術
構文
fn = fncmb(function,operation)
f = fncmb(function,function)
fncmb(function,matrix,function)
fncmb(function,matrix,function,matrix)
f = fncmb(function,op,function)
説明
目的は、関与する関数の関連する部分を明示的に処理することなく、スプライン空間内でのスケーリングや追加の標準の線形演算の実行を容易にすることです。
fn = fncmb(function,operation) は、operation によって指定された演算である function の関数の値に適用することで取得された関数 (の説明) を返します。演算の性質は、operation が "スカラー"、"ベクトル"、"行列"、"文字ベクトルまたは string スカラー" のいずれであるかに応じて、次のように異なります。
スカラー | 関数をそのスカラーで乗算します。 |
ベクトル | ベクトルを関数の値に追加します。関数はベクトル値でなければなりません。 |
行列 | 行列を関数の係数に適用します。 |
文字ベクトルまたは string スカラー | その文字ベクトルまたは string スカラーによって指定された関数を関数の係数に適用します。 |
残りのオプションは "一変量" 関数でのみ機能します。詳細については、「制限」を参照してください。
f = fncmb(function,function) は、2 つの関数の点単位の和 (の説明) を返します。2 つの関数は同じ型でなければなりません。入力引数が 2 つのみのこの特定のケースは一変量関数のみで機能するため、上記の表には含まれていません。
fncmb(function,matrix,function) は fncmb(fncmb(function,matrix),function) と同じです。
fncmb(function,matrix,function,matrix) は fncmb((fncmb(function,matrix),fncmb(function,matrix))) と同じです。
f = fncmb(function,op,function) は、文字ベクトルまたは string スカラー op で指定された、2 つの関数の点単位の組み合わせによって取得されたスプラインの pp 型を返します。引数 op は、'+'、'-'、'*' のいずれかにすることができます。2 番目の関数が定数である場合は、ここでその定数を指定するだけで十分です。
例
fncmb(fn,3.5) は、fn の関数 (の係数) に 3.5 を乗算します。
fncmb(f,3,g,-4) は、それぞれ重みが 3 と –4 の f の関数と g の関数の線形結合を返します。
fncmb(f,3,g) は、f の関数の 3 倍を g の関数に加算します。
f の関数 f がスカラー値となる場合、f3=fncmb(f,[1;2;3]) には、x での値が 3 ベクトル (f(x), 2f(x), 3f(x)) である関数の説明が含まれます。このツールボックス全体にわたる規則によって、後続のステートメント fnval(f3, x) は 1 "列" の行列を返す点に注意してください。
f が R3 内で曲面を記述する場合、つまり、f の関数が 3 ベクトル値 二変量である場合は、f2 = fncmb(f,[1 0 0;0 0 1]) が (x, z) 面へのその曲面の投影を記述します。
次のコマンドはスピロヘータのような図を生成します。
c = rsmak('circle');
fnplt(fncmb(c,diag([1.5,1]))); axis equal, hold on
sc = fncmb(c,.4);
fnplt(fncmb(sc,-[.2;-.5]))
fnplt(fncmb(sc,-[.2,-.5]))
hold off, axis off
t が長さ n+k のノット シーケンスで、a が n 列の行列である場合、fncmb(spmak(t,eye(n)),a) は spmak(t,a) と同じです。
fncmb(spmak([0:4],1),'+',ppmak([-1 5],[1 -1])) は、ブレーク -1:5 を持つ区分的多項式で、区間 [0 .. 4] において、関数 x|→ B(x|0,1,2,3,4) + x に一致します (ただし、0 と 1 のいずれにもアクティブなブレークはないため、区間 [0 .. 4] の外部では、この関数と異なります)。
fncmb(spmak([0:4],1),'-',0) は fn2fm(spmak([0:4],1),'pp') と同じ効果があります。
sp が次数 <k のスプラインの B 型を記述すると仮定すると、
fn2fm(fncmb(sp,'+',ppmak(fnbrk(sp,'interv'),zeros(1,k))),'B-')
の出力は、同じスプラインの B 型を記述しますが、次数は k まで増加します。
制限
fncmb は、fncmb(function,operation) を除き、"一変量" 関数の場合、つまり、入力に 1 つだけ関数が存在する場合にのみ動作します。
さらに、2 つの関数を伴う場合は、それらは同じタイプでなければなりません。つまり、それらは両方が B 型であるか、または両方が pp 型であり、さらに、ノットまたはブレーク、次数、およびターゲットが同じでなければなりません。この唯一の例外は、形式 fncmb(function,op,function) のコマンドです。
アルゴリズム
係数は抽出され (fnbrk を介して)、指定された行列または演算で操作 (および、おそらく加算) され、その後関数の説明の残りと再度組み合わされます (ppmak、spmak,rpmak,rsmak,stmak を介して)。確かに、関数が有理の場合は、行列は分子の係数にのみ適用されます。ここでも、与えられたベクトルで関数値を変換しようとして、関数が pp 型である場合は、定数項に対応する係数のみがそのように変換されます。
2 つの関数の入力がある場合は、次の場合を "除いて" それらを同じタイプにしなければなりません (下記の「制限」を参照)。
fncmb(f1,op,f2) は、関数の pp 型を返します。
ここで、op は '+', '-'、 '*' のいずれかで、f1、f2 は任意の多項式型です。さらに、f2 がスカラーまたはベクトルの場合は、常にそのスカラーまたはベクトルに等しい関数になります。