Main Content

interp1

1 次データ内挿 (テーブル ルックアップ)

説明

vq = interp1(x,v,xq) は、線形内挿を使用して、特定のクエリ点における 1 次元関数の内挿値を返します。ベクトル x には、サンプル点が含まれていて、v には対応する値 v (x) が含まれています。ベクトル xq は、クエリ点の座標を含んでいます。

同じ点の座標でサンプリングされたデータ セットが複数存在する場合、v を配列として渡すことができます。配列 v の各列には、1 次元サンプル値の複数のセットが含まれています。

vq = interp1(x,v,xq,method) は代替内挿法として、'linear''nearest''next''previous''pchip''cubic''v5cubic''makima'、または 'spline' を指定します。既定の手法は、'linear' です。

vq = interp1(x,v,xq,method,extrapolation) は、x の領域の外側に配置されている点を評価する方法を指定します。外挿に method アルゴリズムを使用する場合は、extrapolation'extrap' に設定します。別の方法として、スカラー値を指定することができますが、その場合、interp1 は、x 領域外のすべての点にこの値を返します。

vq = interp1(v,xq) は内挿値を返し、サンプル点の座標の既定セットを想定します。既定の点は、1 から n までの一連の番号です。ここで、nv の形状によって異なります。

  • v がベクトルの場合、既定の点は 1:length(v) です。

  • v が配列の場合、既定の点は 1:size(v,1) です。

この構文は、点の間の絶対距離を考慮しない場合に使用します。

vq = interp1(v,xq,method) は、代替内挿法のいずれかを指定し、既定のサンプル点を使用します。

vq = interp1(v,xq,method,extrapolation) は外挿法を指定し、既定のサンプル点を使用します。

pp = interp1(x,v,method,'pp')method アルゴリズムを使用して、v (x) の区分的多項式を返します。

メモ

この構文は推奨されません。代わりに griddedInterpolant を使用してください。

すべて折りたたむ

サンプル点 x と、対応するサンプル値 v を定義します。

x = 0:pi/4:2*pi; 
v = sin(x);

x を含む範囲内でより細かくサンプリングを行うためのクエリ点を定義します。

xq = 0:pi/16:2*pi;

クエリ点に関数を内挿し、結果をプロットします。

figure
vq1 = interp1(x,v,xq);
plot(x,v,'o',xq,vq1,':.');
xlim([0 2*pi]);
title('(Default) Linear Interpolation');

Figure contains an axes object. The axes object with title (Default) Linear Interpolation contains 2 objects of type line. One or more of the lines displays its values using only markers

'spline' メソッドを使用して、同じ点で v を評価します。

figure
vq2 = interp1(x,v,xq,'spline');
plot(x,v,'o',xq,vq2,':.');
xlim([0 2*pi]);
title('Spline Interpolation');

Figure contains an axes object. The axes object with title Spline Interpolation contains 2 objects of type line. One or more of the lines displays its values using only markers

一連の関数値を定義します。

v = [0  1.41  2  1.41  0  -1.41  -2  -1.41 0];

既定の点 1:9 の間に位置する、一連のクエリ点を定義します。この場合、v9 の値を含むため、既定の点は 1:9 です。

xq = 1.5:8.5;

xqv を評価します。

vq = interp1(v,xq);

結果をプロットします。

figure
plot((1:9),v,'o',xq,vq,'*');
legend('v','vq');

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent v, vq.

一連のサンプル点を定義します。

x = 1:10;

サンプル点における関数 v(x)=5x+x2i の値を定義します。

v = (5*x)+(x.^2*1i);

x を含む範囲内でより細かくサンプリングを行うためのクエリ点を定義します。

xq = 1:0.25:10;

クエリ点で v を内挿します。

vq = interp1(x,v,xq);

結果の実数部を赤でプロットし、虚数部を青でプロットします。

figure
plot(x,real(v),'*r',xq,real(vq),'-r');
hold on
plot(x,imag(v),'*b',xq,imag(vq),'-b');

Figure contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers

タイムスタンプ付きデータ点を内挿します。

4 時間ごとに測定する温度測定値を含むデータ セットを考えてみましょう。1 日分のデータに相当する table を作成し、データをプロットします。

x = (datetime(2016,1,1):hours(4):datetime(2016,1,2))';
x.Format = 'MMM dd, HH:mm';
T = [31 25 24 41 43 33 31]';
WeatherData = table(x,T,'VariableNames',{'Time','Temperature'})
WeatherData=7×2 table
        Time         Temperature
    _____________    ___________

    Jan 01, 00:00        31     
    Jan 01, 04:00        25     
    Jan 01, 08:00        24     
    Jan 01, 12:00        41     
    Jan 01, 16:00        43     
    Jan 01, 20:00        33     
    Jan 02, 00:00        31     

plot(WeatherData.Time, WeatherData.Temperature, 'o')

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

データ セットを内挿して、この日の 1 分ごとの温度測定値を予測します。データは周期的なので、'spline' 内挿法を使用できます。

xq = (datetime(2016,1,1):minutes(1):datetime(2016,1,2))';
V = interp1(WeatherData.Time, WeatherData.Temperature, xq, 'spline');

内挿点をプロットします。

hold on
plot(xq,V,'r')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

サンプル点 x と、対応するサンプル値 v を定義します。

x = [1 2 3 4 5];
v = [12 16 31 10 6];

x の領域を越えるクエリ点 xq を指定します。

xq = [0 0.5 1.5 5.5 6];

'pchip' メソッドを使用して、xqv を評価します。

vq1 = interp1(x,v,xq,'pchip')
vq1 = 1×5

   19.3684   13.6316   13.2105    7.4800   12.5600

次に 'linear' メソッドを使用して、xqv を評価します。

vq2 = interp1(x,v,xq,'linear')
vq2 = 1×5

   NaN   NaN    14   NaN   NaN

ここで 'linear' メソッドを 'extrap' オプションで使用します。

vq3 = interp1(x,v,xq,'linear','extrap')
vq3 = 1×5

     8    10    14     4     2

既定では 'pchip' は外挿を実行しますが、'linear' は外挿を行いません。

サンプル点 x と、対応するサンプル値 v を定義します。

x = [-3 -2 -1 0 1 2 3];
v = 3*x.^2;

x の領域を越えるクエリ点 xq を指定します。

xq = [-4 -2.5 -0.5 0.5 2.5 4];

ここで 'pchip' メソッドを使用して、xqv を評価し、x の領域の外側の任意の値を、値 27 に割り当てます。

vq = interp1(x,v,xq,'pchip',27)
vq = 1×6

   27.0000   18.6562    0.9375    0.9375   18.6562   27.0000

サンプル点を定義します。

x = (-5:5)';

x で定義された点で、3 つの異なる放物線関数をサンプリングします。

v1 = x.^2;
v2 = 2*x.^2 + 2;
v3 = 3*x.^2 + 4;

列がベクトル v1v2 および v3 で構成される行列 v を作成します。

v = [v1 v2 v3];

x を含む範囲内でより細かくサンプリングを行うための一連のクエリ点 xq を定義します。

xq = -5:0.1:5;

xq で 3 つの関数すべてを評価し、結果をプロットします。

vq = interp1(x,v,xq,'pchip');
figure
plot(x,v,'o',xq,vq);

h = gca;
h.XTick = -5:5;

Figure contains an axes object. The axes object contains 6 objects of type line. One or more of the lines displays its values using only markers

プロット内の円は v を表し、実線は vq を表します。

入力引数

すべて折りたたむ

サンプル点。実数の行または列ベクトルとして指定します。x の値は、一意でなければなりません。x の長さは、次のいずれかの要件に従わなければなりません。

  • v がベクトルの場合、length(x)length(v) と同じでなければなりません。

  • v が配列の場合、length(x)size(v,1) と同じでなければなりません。

例: [1 2 3 4 5 6 7 8 9 10]

例: 1:10

例: [3 7 11 15 19 23 27 31]'

データ型: single | double | duration | datetime

サンプル値。ベクトル、行列または実数か複素数の配列として指定します。v が行列または配列の場合、各列には 1 次元の値の個別のセットが含まれます。

v に複素数が含まれる場合、interp1 は実数部と虚数部を個別に内挿します。

例: rand(1,10)

例: rand(10,1)

例: rand(10,3)

データ型: single | double | duration | datetime
複素数のサポート: あり

クエリ点。実数のスカラー、ベクトル、行列または配列として指定します。

例: 5

例: 1:0.05:10

例: (1:0.05:10)'

例: [0 1 2 7.5 10]

データ型: single | double | duration | datetime

内挿法。次の表のオプションのいずれかとして指定します。

メソッド

説明

連続性

コメント

'linear'

線形内挿クエリ点に内挿される値は、対応する各次元における、隣接するグリッド点の値を使用した線形内挿に基づいて決定されます。これは既定の内挿法です。

C0

  • 少なくとも 2 つの点が必要

  • 最近傍よりも多くのメモリと計算時間が必要

'nearest'

最近傍点による内挿。クエリ点に内挿される値は、最も近いサンプル グリッド点の値になります。

不連続

  • 少なくとも 2 つの点が必要

  • 必要メモリ量は中程度

  • 計算時間は最も速い

'next'

次の近傍内挿。クエリ点に内挿される値は、次のサンプル グリッド点の値になります。

不連続

  • 少なくとも 2 つの点が必要

  • メモリ要求と計算時間は 'nearest' と同じ

'previous'

前の近傍内挿。クエリ点に内挿される値は、前のサンプル グリッド点の値になります。

不連続

  • 少なくとも 2 つの点が必要

  • メモリ要求と計算時間は 'nearest' と同じ

'pchip'

形状維持区分的 3 次内挿。クエリ点に内挿される値は、隣接するグリッド点の値を使用した形状維持区分的 3 次内挿に基づいて決定されます。

C1

  • 少なくとも 4 つの点が必要

  • 'linear' よりも多くのメモリと長い計算時間が必要

'cubic'

MATLAB® 5 で使用される 3 次畳み込み。

C1

  • 少なくとも 3 つの点が必要

  • 点は等間隔でなければならない

  • 非等間隔のデータの場合、このメソッドは 'spline' 内挿に戻る

  • メモリ要求と計算時間は 'pchip' と同様

'v5cubic'

'cubic' と同じ。

C1

'makima'

修正 Akima 3 次エルミート内挿。クエリ点での内挿値は、次数が最大 3 である多項式の区分的関数に基づいています。Akima 式はオーバーシュートを回避するよう修正されています。

C1

  • 少なくとも 2 つの点が必要

  • 発生するうねりは 'spline' より少ないが、'pchip' ほど大幅に変動が少なくならない

  • 計算量は 'pchip' より多くなるが、通常は 'spline' より少ない

  • メモリの要件は 'spline' と同様

'spline'

節点なしの端点条件を使用したスプライン内挿。クエリ点に内挿される値は、個々の次元で隣接するグリッド点の値の 3 次内挿に基づいて決定されます。

C2

  • 少なくとも 4 つの点が必要

  • 'pchip' よりも多くのメモリと長い計算時間が必要

外挿法。'extrap' または実数スカラー値として指定します。

  • interp1 で内挿と同じ方法を使用して領域外にある点を評価する場合は、'extrap' を指定します。

  • interp1 により、領域外の点に対して特定の定数値を返す場合は、スカラー値を指定します。

既定の動作は、入力引数により異なります。

  • 内挿法として 'pchip''spline' または 'makima' を指定した場合、既定の動作は 'extrap' です。

  • 他のすべての内挿法は、領域の外側のクエリ点に対して、既定で NaN を返します。

例: 'extrap'

例: 5

データ型: char | string | single | double

出力引数

すべて折りたたむ

内挿値。スカラー、ベクトル、行列または配列として返されます。vq のサイズは、vxq の形状によって異なります。

v の形状xq の形状Vq のサイズ
ベクトルベクトルsize(xq)size(v) = [1 100]
かつ size(xq) = [1 500] の場合、
size(vq) = [1 500]
ベクトル行列
または N 次元配列
size(xq)size(v) = [1 100]
かつ size(xq) = [50 30] の場合、
size(vq) = [50 30]
行列
または N 次元配列
ベクトル[length(xq) size(v,2),...,size(v,n)]size(v) = [100 3]
かつ size(xq) = [1 500] の場合、
size(vq) = [500 3]
行列
または N 次元配列
行列
または N 次元配列
[size(xq,1),...,size(xq,n),... size(v,2),...,size(v,m)]size(v) = [4 5 6]
かつ size(xq) = [2 3 7] の場合、
size(vq) = [2 3 7 5 6]

区分的多項式。評価のために関数 ppval に渡すことができる構造体として返されます。

詳細

すべて折りたたむ

Akima とスプライン内挿

1 次元内挿の Akima アルゴリズム ([1] および [2] を参照) は、3 次内挿を実行して、連続 1 次微分 (C1) で区分的多項式を生成します。このアルゴリズムは勾配を保持し、変動の少ない領域のうねりを防ぎます。同一平面上に 3 つ以上の連続する点があり、このアルゴリズムにより直線で接続されている場合、常に変動の少ない領域が発生します。2 つのデータ点間の領域をフラットにするために、これらの 2 点間に追加のデータを挿入します。

勾配が異なる 2 つの変動の少ない領域が一致する場合、元の Akima アルゴリズムに修正を加えると、勾配が 0 に近い側に多くの重みが割り当てられます。この変更によって、より直観的な水平に近い側が優先され、オーバーシュートが回避されます (元の Akima アルゴリズムでは両側の点に同等の重みが割り当てられるため、うねりは均等に分割されます)。

一方のスプライン アルゴリズムは、3 次内挿を実行して、連続 2 次微分 (C2) で区分的多項式を生成します。結果は通常の多項式内挿と同等ですが、度数の高いデータ点間の大きな発振に影響されにくくなります。ただし、この方法では、データ点間のオーバーシュートや発振の影響を受ける場合があります。

spline アルゴリズムと比べると、Akima アルゴリズムでは生成されるうねりが少ないため、変動の少ない領域の間で急激に変化する場合への適用に適しています。この違いを、複数の変動の少ない領域を接続するテスト データを使用して以下に示します。

Plot of 1-D test data with multiple flat regions. The spline algorithm produces undulations in the flat regions, while the Akima algorithm smoothly connects the points.

参照

[1] Akima, Hiroshi. "A new method of interpolation and smooth curve fitting based on local procedures." Journal of the ACM (JACM) , 17.4, 1970, pp. 589-602.

[2] Akima, Hiroshi. "A method of bivariate interpolation and smooth surface fitting based on local procedures." Communications of the ACM , 17.1, 1974, pp. 18-20.

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する