Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

spap2

最小二乗スプライン近似

説明

spline = spap2(knots,k,x,y) は、以下に対して指定された節点シーケンス knots をもつ次数 k の B 型スプライン f を返します。

(*)   y(:,j) = f(x(j)), all j 

加重平均二乗という意味では、次の和

jw(j)|y(:,j)f(x(j))|2

が、既定の重み 1 で最小化されることを意味します。データ値 y(:,j) には、スカラー、ベクトル、行列、または N 次元配列を指定でき、|z|2 は、z のすべてのエントリの二乗和です。同じサイトをもつデータ点はそれらの平均で置き換えられます。

サイト x が Schoenberg-Whitney 条件を満たす場合、

          knots(j)<x(j)<knots(j+k)(**)                                j=1,...,length(x)=length(knots)k

(*) を正確に満たす、特定の次数と節点シーケンスの一意のスプラインがあります。x の一部のサブシーケンスでは (**) が満たされない場合スプラインは返されません。

spap2(l,k,x,y) (l は正の整数) は、最小二乗スプライン近似の B 型を返しますが、節点シーケンスが選択されています。節点シーケンスは、aptkntx の適切なサブシーケンスに適用して取得されます。結果の区分的多項式は、l 多項式区分で構成され、k-2 連続導関数をもちます。内部節点の別の分布の方が機能が向上する可能性がある場合は、次を使用してください。

sp1 = spap2(newknt(spline),k,x,y));

spline = spap2(...,x,y,w) を使用すると、誤差測定 (上記) で重み w を指定できます。w は、非負のエントリを持つ、x と同じサイズのベクトルでなければなりません。同じサイトをもつデータ点に対応するすべての重みは、それらのデータ点が平均で置き換えられるときに合計されます。

spap2({knorl1,...,knorlm},k,{x1,...,xm},y) は、"グリッド" データの最小二乗スプライン近似を提供します。ここでは、各 knorli は節点シーケンスまたは正の整数となります。さらに、km ベクトルでなければなりません。また y は (r+m) 次元配列でなければならず、y(:,i1,...,im) であればデータは i1, ..., im のすべてにわたり、site [x{1}(i1),...,x{m}(im)] で近似されます。ただし、スプラインがスカラー値となる場合は、一変量の場合とは異なり、ym 次元配列になることが許可されます。この場合 y(i1,...,im)site [x{1}(i1),...,x{m}(im)] で近似されるデータで、すべてが i1, ..., im です。

spap2({knorl1,...,knorlm},k,{x1,...,xm},y,w) では、重みも指定できます。この m 変量のケースでは、wm をエントリ、w{i}xi と同じサイズの非負のベクトルとする cell 配列としなければなりません。そうしない場合 w{i} は空でなければならず、この場合、既定の重さは i 番目の変数で使用されます。

すべて折りたたむ

この例では、基本区間 [a..b]、および内部ブレーク xi の 2 つの連続導関数を使用した 3 次スプラインによる、データ xy の最小二乗近似を計算する方法を示します。ここでは、xi のすべてのエントリが (a..b) 内にあり、条件 (**) が満たされていることが前提になります。

sp = spap2(augknt([a,xi,b],4),4,x,y)

その場合、近似は length(xi)+1 の多項式区分で構成されます。単に l 多項式区分で構成される 3 次スプライン近似を得る必要がある場合は、代わりに次を使用します。

sp = spap2(l,4,x,y); 

結果の近似が不十分である場合は、大きい l を使用してみてください。または、次を使用してください。

sp = spap2(newknt(sp),4,x,y);

これにより、節点シーケンスの分布が向上します。この処理を複数回繰り返し、分布の忠実度を向上させます。

もう 1 つの例 spap2(1,2,x,y); では、データ xy の最小二乗直線近似が生成され、

w = ones(size(x)); 
w([1 end]) = 100; 
spap2(1,2,x,y,w); 

上記の場合は、近似が最初のデータ点と最後のデータ点に非常に近くなります。

この例では、二変量関数を作成し、その最小二乗近似を計算してプロットする方法を示します。

近似用のデータと二変量関数を生成します。

x = -2:.2:2; 
y=-1:.25:1; 
[xx, yy] = ndgrid(x,y); 
z = exp(-(xx.^2+yy.^2)); 

最小二乗近似を計算し、それをプロットします。

sp = spap2({augknt([-2:2],3),2},[3 4],{x,y},z);
fnplt(sp)

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

入力引数

すべて折りたたむ

スプラインの節点シーケンス。非減少のベクトルとして指定します。

スプライン f の次数。スカラーとして指定します。

得られる区分的多項式の多項式区分の数。正の整数として指定します。

誤差測定での重み。x と同じサイズの非負のベクトルとして指定します。

近似対象のデータ値 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

出力引数

すべて折りたたむ

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

スプラインの形式。B- として返されます。B- はスプラインが B 型であることを示します。

スプラインの節点の位置。ベクトル、または多変量データの場合はベクトルの cell 配列として返されます。ベクトルには厳密に増加する要素が含まれます。これらの要素は、多項式区分が定義される各区間の開始と終了を表します。

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

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

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

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

アルゴリズム

spcol は、概ブロック対角の選点行列 (Bj,k(xi)) を提供するために呼び出され、slvblk は、ブロック QR 分解を使用して、線形システム (*) を (重み付けされた) 最小二乗で解きます。

グリッド データは、一変量の重み付けされた最小二乗近似が近似されている値に比例するという点を利用して、テンソル積により一度に 1 変数ずつ近似されます。

バージョン履歴

R2006a より前に導入