INTERP1 関数を実行すると、「X の値は異なるべきです​」のエラーが発生する​のはなぜですか?

6 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2010 年 2 月 2 日
INTERP1 関数でデータを補間をしようとしたところ、以下のようなエラーが発生します。
>> yi=interp1(X,Y,xi)
??? エラー ==> interp1 at 261
X の値は異なるべきです。
もしくは、
??? エラー: ==> interp1 The values of X should be distinct.

採用された回答

MathWorks Support Team
MathWorks Support Team 2013 年 10 月 25 日
yi=interp1(X,Y,xi)
は、入力データ [X,Y] の組み合わせから、内挿によって xi に対応する yi を計算しますが、X の要素に重複する値が含まれる場合、上記エラーが発生します。
この場合は下記の方法などを参考にして、入力データ [X,Y] の X に重複する値が含まれないようにする必要があります。
1. X に含まれる重複する値の1つを選択し、残りは削除する
2. 他のベクトルxxを使って [xx,X]、[xx,Y] の組み合わせで内挿する
1. Xに含まれる重複する値の1つを選択し、残りは削除する
UNIQUE 関数に X を入力し、出力引数を 2つ与えると 1つ目の出力引数に X の一意な要素が、2つ目の出力引数にその要素番号が出力されます。
なお、X の重複するデータの中から要素番号の大きなデータが選択されます。
例えば下記例では、X(2) と X(11) は同じ値 2 となりますが、要素番号の大きなX(11)が選択されます。
また X(8) と X(12) は同じ値 8 となりますが、要素番号の大きな X(12) が選択されます。
出力 b は昇順にソートされ、対応する元データ X の要素番号が index に出力されます。
この要素番号に対応する Y の値を選択し、X の一意な要素 b と組み合わせて内挿を行います。
X=[1:10,2,8];Y=[1:10,5,4];
[b,index]=unique(X);
xi=1:.1:10;
yi=interp1(b,Y(index),xi,'spline');
plot(X,Y,'ko',xi,yi,'-');
legend('生データ','スプライン補間');
2.他のベクトルxxを使って [xx,X]、[xx,Y] の組み合わせで内挿する
X と同じ要素数を持つベクトル xx を作成し、[xx,X],[xx,Y] の組み合わせで内挿を行います。この方法の場合、X に重複する値があっても [X,Y] の組み合わせの要素番号順に内挿を行います。
X=[1:10,2,8];Y=[1:10,5,4];
xx=1:length(X);
xi=interp1(xx,X,1:.1:length(X),'spline');
yi=interp1(xx,Y,1:.1:length(X),'spline');
plot(X,Y,'ko',xi,yi,'g-');
legend('生データ','スプライン補間');

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange内挿 についてさらに検索

タグ

タグが未入力です。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!