ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

interp1

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

構文

vq = interp1(x,v,xq)
vq = interp1(x,v,xq,method)
vq = interp1(x,v,xq,method,extrapolation)
vq = interp1(v,xq)
vq = interp1(v,xq,method)
vq = interp1(v,xq,method,extrapolation)
pp = interp1(x,v,method,'pp')

説明

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

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

vq = interp1(x,v,xq,method) は代替内挿法として、'nearest''next''previous''linear''spline''pchip''makima' または 'cubic' を指定します。既定の手法は、'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');

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

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

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

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');

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

x = 1:10;

サンプル点における関数 の値を定義します。

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');

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

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=7x2 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')

データセットを内挿して、この日の 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')

サンプル点 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;

プロット内の円は 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'

メモ

interp1(...,'cubic') の動作は将来のリリースで変更される予定です。将来のリリースでは、この方法は 3 次畳み込みの実行になります。

'pchip' と同じです。

C1

この方法は現在、'pchip' と同じ結果を返します。

'v5cubic'

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

C1

点は等間隔に配置しなければなりません。'cubic' は将来のリリースで 'v5cubic' に置き換えられます。

'makima'

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

C1

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

  • 発生する起伏は 'spline' より少ないが、'pchip' ほど大幅に平坦化されない

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

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

'spline'

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

C2

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

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

R2017b 以降のリリースでは、method は二重引用符を使用して string として指定することもできます。たとえば、"spline" のようになります。

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

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

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

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

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

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

R2017b 以降のリリースでは、extrapolation は二重引用符を使用して string として指定することもできます。たとえば、"extrap" のようになります。

例: '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 に渡すことができる構造体として返されます。

拡張機能

R2006a より前に導入