Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

tpaps

薄板平滑化スプライン

説明

st = tpaps(x,y) は、指定されたデータ サイト x(:,j) および指定されたデータ値 y(:,j) の st 型の薄板平滑化スプライン f です。x(:,j) は平面内の異なる点でなければなりません。値はスカラー、ベクトル、行列、または場合によっては N 次元配列も指定できます。また、サイトの数とまったく同数の値が必要です。

薄板平滑化スプライン f は、重み付き和の固有の最小化関数です。

pE(f)+(1p)R(f)

E(f) を使用して、誤差測定を行います。

E(f)=j|y(:,j)f(x(:,j))|2

R(f) を使用して、粗さ測定を行います。

R(f)=(|D1D1f|2+2|D1D2f|2+|D2D2f|2)

ここで、すべての R2 上で積分が計算され、|z|2 は z のすべての要素の二乗和を示し、Dif は i 番目の引数に関する f の偏導関数を示しています。したがって、被積分には f の 2 次の偏導関数が含まれます。関数は、(1-p)/p が行列 A の対角要素の平均値と等しく、n 係数をもつ平滑化スプラインの線形システムの係数行列が A + (1-p)/p*eye(n) によって決定されるように、平滑化パラメーター p を選択します。こうすることで、必ず内挿 (p1 に近く、係数行列が基本的に A である場合) と完全な平滑化 (p0 に近く、係数行列が基本的に単位行列の倍数である場合) の 2 つの極値の間に位置することになります。これは p の適切な初期推定値として機能します。

st = tpaps(x,y,p) は "平滑化パラメーター” p (0 から 1 の間の数値) も入力します。平滑化パラメーターが 0 から 1 に変化すると、平滑化スプラインは、データに対する線形多項式による最小二乗近似 (p0 の場合) からデータに対する薄板スプライン内挿 (p1 の場合) に変化します。

[...,P] = tpaps(...) は、p を指定したかどうかに関係なく、最終的なスプラインの結果で使用された平滑化パラメーターも返します。この構文は、[pp,P] = tpaps(x,y) で開始する可能性のある実験で、p から妥当な初期推定値を得るために役立ちます。

すべて折りたたむ

次のコードでは、無作為に選択された 31 のサイトで平滑化関数の値を取得し、これらの値にランダム ノイズを追加します。その後、tpaps を使用して基データの正確な平滑値を復元します。このケースにおいて tpaps がいかに適切に機能するかを示すために、このコードは、平滑化スプラインに加えて、厳密な値 (黒い球体) と、平滑化された値から対応するノイズが含まれる値へと引かれたそれぞれの矢印もプロットします。

rng(23); nxy = 31;
xy = 2*(rand(2,nxy)-.5); vals = sum(xy.^2);
noisyvals = vals + (rand(size(vals))-.5)/5;
st = tpaps(xy,noisyvals); fnplt(st), hold on
avals = fnval(st,xy);
plot3(xy(1,:),xy(2,:),vals,'wo','markerfacecolor','k')
quiver3(xy(1,:),xy(2,:),avals,zeros(1,nxy),zeros(1,nxy), ...
         noisyvals-avals,'r'), hold off

Figure contains an axes. The axes contains 3 objects of type surface, line, quiver.

次のコードはベクトル データ値に対して内挿薄板スプラインを使用して、平面から平面へのマップを作成します。これは、単位正方形 {x:|x(j)|1,j=1:2} を、単位円板 {x:x(1)2+x(2)21} 上に近似的に置きます。

n = 64; t = linspace(0,2*pi,n+1); t(end) = [];
values = [cos(t); sin(t)];
centers = values./repmat(max(abs(values)),2,1);
st = tpaps(centers, values, 1);
fnplt(st), axis equal

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

内挿を取得するには、ここで平滑化パラメーターに 1 を選択することに注意してください。

入力引数

すべて折りたたむ

近似対象のデータ値 y のデータ サイト。ベクトル、または多変量データの場合は cell 配列として指定します。スプライン f は、j のすべての値について f(x(j)) = y(:,j) を満たすよう、各データ サイト x の節点によって作成されます。

多変量グリッド データの場合、x を、各変数の次元のデータ サイトを指定する cell 配列として指定できます。f(x1(i),x2(j),...xn(k)) = y(:,i,j,...,k)

スプライン作成時の近似対象のデータ値。ベクトル、行列、または配列として指定します。データ値 y(:,j) は、スカラー、行列、または n 次元配列にすることができます。同じデータ サイト x のデータ値は平均化されます。

データ型: single | double

平滑化パラメーター。0 ~ 1 のスカラー値、または多変量データ値の cell 配列として指定します。p をベクトルとして指定することで、粗さ測定の重み λ の値を指定することもできます。多変量データの粗さ測定の重みを指定するには、ベクトルの cell 配列を使用します。空の配列を指定した場合、関数は、p についてはデータ サイト x に基づく既定値、粗さ測定の重み λ については既定値 1 を選択します。

平滑化パラメーターは、f を滑らかにする、または f をデータに近づけるという相反する要求に適用する、相対的な重みを決定します。p = 0 の場合、f はデータの最小二乗直線近似となります。p = 1 の場合、f は変分または自然な 3 次スプライン内挿となります。p が 0 から 1 に移動すると、平滑化スプラインは一端からもう一方の端に変化します。

p の適切な範囲は多くの場合 1/(1 + h3/6) の近傍です。ここで、h はデータ サイトの平均間隔です。関数は、p の既定値をこの範囲内で選択します。等間隔のデータの場合、p = 1(1 + h3/60) では密接な近似を、p = 1/(1 + h3/0.6) ではある程度十分な平滑化を想定できます。p > 1 は入力できますが、これを選択した場合、平滑化スプラインが変分 3 次スプライン内挿よりもさらに粗くなります。

入力 p が負または空の場合、p の既定値が関数で使用されます。

p をベクトルとして指定することで、平滑化パラメーターと共に、粗さ測定の重み λ を指定できます。このベクトルは、x と同じサイズでなければなりません。ここで、i = 2:length(x) に対して、区間 (x(i-1)...x(i))i 番目のエントリを λ の値とします。入力ベクトル p の最初のエントリは平滑化パラメーター p の望ましい値となります。粗さ測定の重みを指定することで、区間のさまざまな場所において、結果の平滑化スプラインをより滑らかにしたり (重み値を大きくした場合)、データにより近づけたり (重み値を小さくした場合) することができます。粗さ測定の重みは非負でなければなりません。

p の選択が困難であっても、y のノイズのサイズをある程度は把握している場合は、代わりに spaps(x,y,tol) を使用することを検討します。この関数は、誤差測定を tol 以下にするという条件に従って粗さ測定ができるだけ小さくなるように p を選択します。この場合、誤差測定は通常 tol に指定した値と等しくなります。

データ型: single | double

出力引数

すべて折りたたむ

スプライン。次のフィールドがある構造体として返されます。

スプラインの形式。st-tp00st-tp10st-tp01st-tp として返されます。

サイトのシーケンス。行列、または多変量データの場合は配列として返されます。

各区分の多項式の係数。行列、または多変量データの場合は配列として返されます。

サイトのシーケンスの数。

スプラインを記述する多項式区分の数。スカラー、または多変量データの場合は各変数の区分数のベクトルとして返されます。

ターゲット関数の次元。スカラーとして返されます。

与えられたすべての中心を含む st 型の基本区間。配列として返されます。

スプラインの計算に使用された平滑化パラメーター。スカラー、または多変量データの場合はスカラー値の cell 配列として返されます。P01 の間になります。

制限

平滑化スプラインの決定には、存在するデータ点と同じ数の未知のものを伴う線形システムの解が含まれます。この線形システムの行列は非スパース行列であるため、ここでのケースと同様に 728 を超えるデータ点がある場合に反復スキームが使用されていたとしても、解を求める所要時間が長くなる可能性があります。この反復の収束速度は p の影響を強く受けます。p が大きいほど、速度は遅くなります。そのため、大規模な問題に対しては、時間がある場合にのみ内挿 (つまり p = 1) を使用してください。

R2006b で導入