Main Content

fnval

スプライン関数を評価する

説明

v = fnval(f,x) は、f に説明が含まれているスプライン関数 fx の各点で値 f(x) を与えます。

f がスカラー値であり、一変量である場合、x の各エントリをそのエントリの f の値で置き換えることにより、出力 v が得られます。他のすべての場合もこれを意図していますが、dm 変量関数の場合は例外で、m ベクトルが d ベクトルで置き換えられます。

一変量関数 f の場合:

  • f がスカラー値の場合、v のサイズは x と同じサイズです。

  • f の値が [d1,...,dr]x のサイズが [n1,...,ns] の場合、x(j1,...,js) での f の値が v(:,...,:, j1,...,js) になり、v のサイズは [d1,...,dr, n1,...,ns] です。ただし、次の例外があります。

    • n1 は、その値が 1s2 の場合、つまり x が行ベクトルの場合、無視されます。

    • MATLAB® では x の末尾にある大きさが 1 の次元が無視されます。

fm 変量 (m>1) で、f の値が [d1,...,dr] の場合、x は配列か cell 配列 {x1,...,xm} である場合があります。

  • x がサイズ [n1,...,ns] の配列の場合、n1m と等しくなければならず、x(:,j2,...,js) での f の値が v(:,...,:, j2,...,js) になり、v のサイズは [d1,...,dr, n2,...,ns] です。ただし、次の例外があります。

    • f がスカラー値、つまり rn1 がどちらも 1 の場合、d1、...、dr は無視されます。

    • MATLAB では x の末尾にある大きさが 1 の次元が無視されます。

  • x が cell 配列の場合、{x1,...,xm} の形式でなければなりません。ここで、xj は長さ nj のベクトルです。この場合、(x1(j1), ..., xm(jm)) での f の値が v(:,...,:, j1,...,jm) になり、v のサイズは [d1,...,dr, n1,...,nm] です。ただし、f がスカラー値、つまり rn1 がどちらも 1 の場合、d1、...、dr は無視されます。

fx でジャンプ不連続点がある場合、値 f(x +)、つまり右極限値が返されます。ただし、x がこの形式の基本区間の右端に等しい場合、この x については値 f(x–)、つまり左極限値が返されます。

fnval(x,f) fnval(f,x) と同じです。

fnval(...,'l') は、f を左連続であるとして扱います。つまり、fx でジャンプ不連続点がある場合、値 f(x–)、つまり左極限値が返されます。ただし、x が基本区間の左端に等しい場合、この x については値 f(x +) が返されます。

関数が "多変量" の場合、左右からの不連続性に関する上の説明は座標ごとに適用されます。

すべて折りたたむ

この例では、データを内挿し、結果として得られる関数をプロットおよび評価する方法を示します。

データを定義します。

x = [0.074 0.31 0.38 0.53 0.57 0.58 0.59 0.61 0.61 0.65 0.71 0.81 0.97];
y = [0.91 0.96 0.77 0.5 0.5 0.51 0.51 0.53 0.53 0.57 0.62 0.61 0.31]; 

データを内挿し、結果として得られる関数 f をプロットします。

f = csapi( x, y )
f = struct with fields:
      form: 'pp'
    breaks: [0.0740 0.3100 0.3800 0.5300 0.5700 0.5800 0.5900 0.6100 0.6500 0.7100 0.8100 0.9700]
     coefs: [11x4 double]
    pieces: 11
     order: 4
       dim: 1

fnplt( f )

Figure contains an axes object. The axes object contains an object of type line.

関数 fx = 0.5 での値を求めます。

fnval( f, 0.5 )
ans = 
0.5294

関数 f0, 0.1, ..., 1 での値を求めます。

fnval( f, 0:0.1:1 )
ans = 1×11

    0.3652    1.0220    1.1579    0.9859    0.7192    0.5294    0.5171    0.6134    0.6172    0.4837    0.2156

曲面を表す関数 f2 を作成します。

x = 0.0001+(-4:0.2:4);
y = -3:0.2:3;
[yy, xx] = meshgrid( y, x );
r = pi*sqrt( xx.^2+yy.^2 );
z = sin( r )./r;
f2 = csapi( {x,y}, z ); 

関数 f2 をプロットします。

fnplt( f2 )
axis( [-5, 5, -5, 5, -0.5, 1] );

Figure contains an axes object. The axes object contains an object of type surface.

関数 f2x = -2 および y = 3 での値を求めます。

fnval( f2, [-2; 3] )
ans = 
-0.0835

入力引数

すべて折りたたむ

評価するスプライン関数。オブジェクトとして指定します。

スプライン関数 f を評価する点。ベクトル、行列、または cell 配列として指定します。

出力引数

すべて折りたたむ

スプライン関数 fx の各点における値 f(x)。スカラー、ベクトル、行列、または cell 配列として返されます。

アルゴリズム

x の各エントリについて、この関数は、関連する分割区間またはノット区間を決定し、関連する情報を集めます。f が pp 型か B 型かに応じて、入れ子にされた乗算または B スプラインの再帰 (たとえば、[PGS; X.(3)] を参照) が x のすべてのエントリでの同時評価でベクトルのように使用されます。多変量多項式スプライン関数の評価では、テンソル積構造を最大限に活用します。

有理スプラインの評価では、すべての区分ごとに対応するベクトル値スプラインが順に評価されますが、最後の成分については最後の成分で評価されます。

st 型の関数の評価では、stcol が重要な役割を果たし、関連する行列を妥当なサイズに維持することが試みられます。

バージョン履歴

R2006b で導入