5

値がわかっている 2D の点がたくさんあります。MATLAB を使用して他のデータを補間するために、それらに 3 次スプラインを当てはめたいと思います。

私のコードは次のようになります:

fitobject = fit(x,y,'cubicinterp');
yy=feval(fitobject,xx)

次の入力を使用します。

座標

x = [...
   313     3;
   313     5;
   313     7;
   315     3;
   315     5;
   317     3;
   319     5];

y = [...
   28.0779;
   28.0186;
   11.6220;
   16.7640;
   23.7139;
  -14.7882;
  -20.4626];

補間点

xx = [...
   313     3;
   313     4;
   313     5;
   313     6;
   313     7;
   313     8;
   313     9;
   314     3;
   314     5;
   314     7;
   315     3;
   315     4;
   315     5;
   315     6;
   315     7;
   316     3;
   316     5;
   317     3;
   317     4;
   317     5;
   318     3;
   319     5;
   319     6;
   319     7;
   320     5];

私の出力ベクトルyyでは、いくつかの値が得られNaNます。私には、入力データはきれいに見えます (それらはすべて有限値であり、 はありませんNaN)。データをフィッティングするときに何がfeval返されるのかわかりません。NaNたとえそれが悪いとしても、なぜ可能な限り最高のフィット感を与えることができなかったのですか? 私のアプローチに誤りはありますか?

少しブラウジングしたところ、同じ質問が mathworks フォーラムで何度も尋ねられたようですが、誰も明確な答えを出していませんでした。

よろしくお願いします。

4

2 に答える 2

6

NaN として現れるポイントが補間の外側にあるように見えます。プロットして見ることができます。

三次補間

これを使って遊んでいたコードは次のとおりです: (NaN を -25 に設定してプロットできるようにしたことに注意してください)

x = [313     3;
    313     5;
    313     7;
    315     3;
    315     5;
    317     3;
    319     5];
y = [
    28.0779
    28.0186
    11.6220
    16.7640
    23.7139
    -14.7882
    -20.4626];

fitobject = fit(x,y,'cubicinterp');

xx = [
    313     3
    313     4
    313     5
    313     6
    313     7
    313     8
    313     9
    314     3
    314     5
    314     7
    315     3
    315     4
    315     5
    315     6
    315     7
    316     3
    316     5
    317     3
    317     4
    317     5
    318     3
    319     5
    319     6
    319     7
    320     5];


yy = fitobject(xx);
badindices = isnan(yy);
yy(badindices) = -25;

plot(fitobject, xx, yy, 'Exclude', badindices)

ところで、私は feval を使用していないことに注意してください。fitobject

于 2013-05-29T15:02:58.947 に答える