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)
は代替内挿法として、'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
までの一連の番号です。ここで、n
は v
の形状によって異なります。
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;
クエリ点に関数を内挿し、結果をプロットします。
figurevq1 = interp1(x,v,xq);plot(x,v,'o',xq,vq1,':.');xlim([0 2*pi]);title('(Default) Linear Interpolation');
'spline'
メソッドを使用して、同じ点で v
を評価します。
figurevq2 = 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
の間に位置する、一連のクエリ点を定義します。この場合、v
は 9
の値を含むため、既定の点は 1:9
です。
xq
で v
を評価します。
vq = interp1(v,xq);
結果をプロットします。
figureplot((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);
結果の実数部を赤でプロットし、虚数部を青でプロットします。
figureplot(x,real(v),'*r',xq,real(vq),'-r');hold onplot(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=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')
データ セットを内挿して、この日の 1 分ごとの温度測定値を予測します。データは周期的なので、'spline'
内挿法を使用できます。
xq = (datetime(2016,1,1):minutes(1):datetime(2016,1,2))';V = interp1(WeatherData.Time, WeatherData.Temperature, xq, 'spline');
内挿点をプロットします。
hold onplot(xq,V,'r')
2 つの異なる方法を使用した外挿
ライブ スクリプトを開く
サンプル点 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'
メソッドを使用して、xq
で v
を評価します。
vq1 = interp1(x,v,xq,'pchip')
vq1 = 1×5 19.3684 13.6316 13.2105 7.4800 12.5600
次に 'linear'
メソッドを使用して、xq
で v
を評価します。
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 の領域外のすべてのクエリに対する定数値の指定
ライブ スクリプトを開く
サンプル点 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'
メソッドを使用して、xq
で v
を評価し、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;
列がベクトル v1
、v2
および v3
で構成される行列 v
を作成します。
v = [v1 v2 v3];
x
を含む範囲内でより細かくサンプリングを行うための一連のクエリ点 xq
を定義します。
xq = -5:0.1:5;
xq
で 3 つの関数すべてを評価し、結果をプロットします。
vq = interp1(x,v,xq,'pchip');figureplot(x,v,'o',xq,vq);h = gca;h.XTick = -5:5;
プロット内の円は v
を表し、実線は vq
を表します。
入力引数
すべて折りたたむ
x
— サンプル点
ベクトル
サンプル点。実数の行または列ベクトルとして指定します。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
— サンプル値
ベクトル | 行列 | 配列
サンプル値。ベクトル、行列または実数か複素数の配列として指定します。v
が行列または配列の場合、各列には 1 次元の値の個別のセットが含まれます。
v
に複素数が含まれる場合、interp1
は実数部と虚数部を個別に内挿します。
例: rand(1,10)
例: rand(10,1)
例: rand(10,3)
データ型: single
| double
| duration
| datetime
複素数のサポート: あり
xq
— クエリ点
スカラー | ベクトル | 行列 | 配列
クエリ点。実数のスカラー、ベクトル、行列または配列として指定します。
例: 5
例: 1:0.05:10
例: (1:0.05:10)'
例: [0 1 2 7.5 10]
データ型: single
| double
| duration
| datetime
method
— 内挿法
'linear'
(既定値) | 'nearest'
| 'next'
| 'previous'
| 'pchip'
| 'cubic'
| 'v5cubic'
| 'makima'
| 'spline'
内挿法。次の表のオプションのいずれかとして指定します。
メソッド | 説明 | 連続性 | コメント |
---|---|---|---|
| 線形内挿クエリ点に内挿される値は、対応する各次元における、隣接するグリッド点の値を使用した線形内挿に基づいて決定されます。これは既定の内挿法です。 | C0 |
|
| 最近傍点による内挿。クエリ点に内挿される値は、最も近いサンプル グリッド点の値になります。 | 不連続 |
|
| 次の近傍内挿。クエリ点に内挿される値は、次のサンプル グリッド点の値になります。 | 不連続 |
|
| 前の近傍内挿。クエリ点に内挿される値は、前のサンプル グリッド点の値になります。 | 不連続 |
|
| 形状維持区分的 3 次内挿。クエリ点に内挿される値は、隣接するグリッド点の値を使用した形状維持区分的 3 次内挿に基づいて決定されます。 | C1 |
|
| MATLAB® 5 で使用される 3 次畳み込み。 | C1 |
|
|
| C1 | |
| 修正 Akima 3 次エルミート内挿。クエリ点での内挿値は、次数が最大 3 である多項式の区分的関数に基づいています。Akima 式はオーバーシュートを回避するよう修正されています。 | C1 |
|
| 節点なしの端点条件を使用したスプライン内挿。クエリ点に内挿される値は、個々の次元で隣接するグリッド点の値の 3 次内挿に基づいて決定されます。 | C2 |
|
extrapolation
— 外挿法
'extrap'
| スカラー値
外挿法。'extrap'
または実数スカラー値として指定します。
interp1
で内挿と同じ方法を使用して領域外にある点を評価する場合は、'extrap'
を指定します。interp1
により、領域外の点に対して特定の定数値を返す場合は、スカラー値を指定します。
既定の動作は、入力引数により異なります。
内挿法として
'pchip'
、'spline'
または'makima'
を指定した場合、既定の動作は'extrap'
です。他のすべての内挿法は、領域の外側のクエリ点に対して、既定で
NaN
を返します。
例: 'extrap'
例: 5
データ型: char
| string
| single
| double
出力引数
すべて折りたたむ
vq
— 内挿値
スカラー | ベクトル | 行列 | 配列
内挿値。スカラー、ベクトル、行列または配列として返されます。vq
のサイズは、v
と xq
の形状によって異なります。
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] 。 |
pp
— 区分的多項式
構造体
区分的多項式。評価のために関数 ppval に渡すことができる構造体として返されます。
詳細
すべて折りたたむ
Akima とスプライン内挿
1 次元内挿の Akima アルゴリズム ([1] および [2] を参照) は、3 次内挿を実行して、連続 1 次微分 (C1) で区分的多項式を生成します。このアルゴリズムは勾配を保持し、変動の少ない領域のうねりを防ぎます。同一平面上に 3 つ以上の連続する点があり、このアルゴリズムにより直線で接続されている場合、常に変動の少ない領域が発生します。2 つのデータ点間の領域をフラットにするために、これらの 2 点間に追加のデータを挿入します。
勾配が異なる 2 つの変動の少ない領域が一致する場合、元の Akima アルゴリズムに修正を加えると、勾配が 0 に近い側に多くの重みが割り当てられます。この変更によって、より直観的な水平に近い側が優先され、オーバーシュートが回避されます (元の Akima アルゴリズムでは両側の点に同等の重みが割り当てられるため、うねりは均等に分割されます)。
一方のスプライン アルゴリズムは、3 次内挿を実行して、連続 2 次微分 (C2) で区分的多項式を生成します。結果は通常の多項式内挿と同等ですが、度数の高いデータ点間の大きな発振に影響されにくくなります。ただし、この方法では、データ点間のオーバーシュートや発振の影響を受ける場合があります。
spline アルゴリズムと比べると、Akima アルゴリズムでは生成されるうねりが少ないため、変動の少ない領域の間で急激に変化する場合への適用に適しています。この違いを、複数の変動の少ない領域を接続するテスト データを使用して以下に示します。
参照
[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.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
入力引数
x
(サンプル点) は厳密に増加するか、厳密に減少していなければなりません。インデックスの並べ替えは行いません。入力引数
v
(サンプル値) が可変長ベクトル (1 行:
列または:
行 1 列) の場合、出力vq
の形状は MATLAB での形状と一致します。入力引数
v
が可変サイズであり、可変長ベクトルではない場合、実行時に行ベクトルになるとエラーが発生します。サンプル値またはクエリ点に
Inf
または-Inf
が含まれる場合、生成コードの出力は MATLAB の出力と一致しない場合があります。入力引数
xq
(クエリ点) が可変サイズであり、可変長ベクトルではない場合、実行時に行または列ベクトルになるとエラーが発生します。ツールボックス関数のコード生成に対する可変サイズの制限 (MATLAB Coder)を参照してください。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
使用上の注意事項および制限事項:
入力引数
x
(サンプル点) は厳密に増加するか、厳密に減少していなければなりません。インデックスの並べ替えは行いません。入力引数
v
(サンプル値) が可変長ベクトル (1 行:
列または:
行 1 列) の場合、出力vq
の形状は MATLAB での形状と一致します。入力引数
v
が可変サイズであり、可変長ベクトルではない場合、実行時に行ベクトルになるとエラーが発生します。入力引数
xq
(クエリ点) が可変サイズであり、可変長ベクトルではない場合、実行時に行または列ベクトルになるとエラーが発生します。ツールボックス関数のコード生成に対する可変サイズの制限 (MATLAB Coder)を参照してください。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
内挿法
'pchip'
および内挿法'makima'
はサポートされていません。NaN
を含むサンプル値v
では、内挿法'spline'
はサポートされていません。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
分散配列
Parallel Computing Toolbox™ を使用して、クラスターの結合メモリ上で大きなアレイを分割します。
この関数は分散配列を完全にサポートしています。詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入
すべて展開する
R2020b: interp1
の 'cubic'
メソッドが 3 次畳み込みを実行
R2020b では、interp1
の 'cubic'
内挿法が 3 次畳み込みを実行します。'v5cubic'
内挿法と 'cubic'
内挿法は同じタイプの内挿を実行するようになりました。これは、interp2
、interp3
、および interpn
の動作と一致しています。3 次畳み込み内挿法は等間隔に配置されているデータ用であり、非等間隔に配置されているデータの場合は 'spline'
内挿に戻ります。
以前のリリースでは、'cubic'
は 'pchip'
と同じで、'v5cubic'
のみが 3 次畳み込みを実行していました。
参考
interp2 | interp3 | interpn | griddedInterpolant
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom (English)
Contact your local office