Main Content

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 のノット シーケンスで、an 列の行列である場合、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 を介して)、指定された行列または演算で操作 (および、おそらく加算) され、その後関数の説明の残りと再度組み合わされます (ppmakspmak,rpmak,rsmak,stmak を介して)。確かに、関数が有理の場合は、行列は分子の係数にのみ適用されます。ここでも、与えられたベクトルで関数値を変換しようとして、関数が pp 型である場合は、定数項に対応する係数のみがそのように変換されます。

2 つの関数の入力がある場合は、次の場合を "除いて" それらを同じタイプにしなければなりません (下記の「制限」を参照)。

fncmb(f1,op,f2) は、関数の pp 型を返します。

x|f1(x) op f2(x)

ここで、op'+', '-' '*' のいずれかで、f1f2 は任意の多項式型です。さらに、f2 がスカラーまたはベクトルの場合は、常にそのスカラーまたはベクトルに等しい関数になります。