lsq_splin
重み付き最小二乗三次スプラインフィッティング
呼び出し手順
[y, d] = lsq_splin(xd, yd, x) [y, d] = lsq_splin(xd, yd, wd, x)
パラメータ
- xd, yd
同じ大きさのベクトル, 3次スプラインによりフィッティング するデータ
- wd
(オプション)
xd
およびyd
の形式のベクトルで, 最小二乗フィッティングの重み.- x
単調増加の (行または列) ベクトル, 3次スプラインの折点
- y, d
x
と同じ大きさのベクトル, 近似3次スプラインを定義する組(x,y,d).
説明
この関数は,データxd, yd, wd
(以下では,mをこれらのベクトルの長さと
仮定します)および
スプライン折点x
(例えばn個の等間隔折点を選択したい場合には
x=linspace(min(xd),max(xd),n))
とする
ことができます)
に関して
近似3次スプラインsを計算します.
Sを折点
x1 < x2 < ... < xnを指定する
あらゆる3次スプライン関数の空間とする場合,
得られるスプライン sは次のようになります:
ただし,fはSの中の任意の値. すなわち,Sの任意の関数について, 二乗誤差の合計を最小化します.
スプラインsは
組(x,y,d)
により完全に定義されます
(y
および d
は,xiにおけるスプライン座標および1階微分のベクトル
です : yi=s(xi) および
di=s'(xi)) .
何らかの点における評価は,
interp関数で行います.
注意
wd
が指定されない場合, 全ての点は
同じ重み1を有します.
xd(k) が [x1,xn] の範囲で,wd(k) > 0の場合, 点 (xd(k),yd(k)) は, フィットの範囲にあるとみなされます. 特に, フィッティングにおいて無視したいデータ点に重み0 (または負の重み) を設定することができます. フィット処理が適用される点の総数が4個未満の場合, エラーが発生します.
ベクトル xd
は昇順である必要は
ありません.
数,xd(k)の位置, x(i)の選択に基づき いくつかの解が存在しますが, 選択できるのは1つだけです. この場合,Scilabコマンドウインドウに警告メッセージが 発生します. この関数は,mがnよりも はるかに大きい場合に使用されることを意図しています. このような場合,このような問題は発生しません.
例
// これは人工的な例で,データxdおよびydは // 外乱付きのsin関数から構築されます a = 0; b = 2*%pi; sigma = 0.1; // ガウスノイズの標準偏差 m = 200; // 試行点の数 xd = linspace(a,b,m)'; yd = sin(xd) + grand(xd,"nor",0,sigma); n = 6; // 折点の数 x = linspace(a,b,n)'; // スプラインを計算 [y, d] = lsq_splin(xd, yd, x); // 等しい重みを使用 // プロット ye = sin(xd); ys = interp(xd, x, y, d); clf() plot2d(xd,[ye yd ys],style=[2 -2 3], ... leg="exact function@experimental measures (gaussian perturbation)@fitted spline") xtitle("a least square spline") show_window()
参照
Report an issue | ||
<< linear_interpn | Interpolation | mesh2d >> |