は、入力データ [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('生データ','スプライン補間');