このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
diff
差分と近似微分
説明
は、サイズが 1 でない最初の配列の次元に沿って、Y
= diff(X
)X
の隣接する要素間の差分を計算します。
X
が、長さm
のベクトルの場合、Y = diff(X)
は長さがm-1
のベクトルを返します。Y
の要素は、X
の隣接する要素間の差分です。Y = [X(2)-X(1) X(3)-X(2) ... X(m)-X(m-1)]
X
が空ではなく p 行 m 列の非ベクトル行列である場合、Y = diff(X)
はサイズが (p-1) 行 m 列の行列を返します。この行列の要素はX
の行間の差分になります。Y = [X(2,:)-X(1,:); X(3,:)-X(2,:); ... X(p,:)-X(p-1,:)]
X
が 0 行 0 列の空の行列である場合、Y = diff(X)
は 0 行 0 列の空の行列を返します。X
が p 行 m 列の table または timetable である場合、Y = diff(X)
はサイズが (p-1) 行 m 列の table または timetable を返します。この行列の要素はX
の行間の差分になります。X
が 1 行 m 列の table または timetable の場合、Y
のサイズは 0 行 m 列でなければなりません。 (R2023a 以降)
例
ベクトル要素間の差分
ベクトルを作成し、要素間の差分を計算します。
X = [1 1 2 3 5 8 13 21]; Y = diff(X)
Y = 1×7
0 1 1 2 3 5 8
Y
の要素数が X
より 1 つ少なくなることに注意してください。
行列の行間の差分
3 行 3 列の行列を作成し、行間の 1 階差分を計算します。
X = [1 1 1; 5 5 5; 25 25 25]; Y = diff(X)
Y = 2×3
4 4 4
20 20 20
Y
は 2 行 3 列の行列です。
複数の差分
行列の列間の差分
3 行 3 列の行列を作成し、列間の 1 次差分を計算します。
X = [1 3 5;7 11 13;17 19 23]; Y = diff(X,1,2)
Y = 3×2
2 2
4 2
2 4
Y
は 3 行 2 列の行列です。
diff による導関数の近似
関数 diff
を構文 Y = diff(f)/h
で使用して偏導関数を近似します。f
は、領域 X
で評価される関数値のベクトルで、h
は適切なステップ サイズです。
たとえば、x
に関する sin(x)
の 1 次導関数は cos(x)
で、x
に関する 2 次導関数は -sin(x)
になります。diff
を使用して、これらの導関数を近似できます。
h = 0.001; % step size X = -pi:h:pi; % domain f = sin(X); % range Y = diff(f)/h; % first derivative Z = diff(Y)/h; % second derivative plot(X(:,1:length(Y)),Y,'r',X,f,'b', X(:,1:length(Z)),Z,'k')
このプロットで、青のラインは元の関数 sin
に対応します。赤のラインは計算された 1 次導関数 cos
に対応し、黒のラインは計算された 2 次導関数 -sin
に対応します。
datetime 値の差分
等間隔の datetime 値のシーケンスを作成し、それらの時間差を求めます。
t1 = datetime('now');
t2 = t1 + minutes(5);
t = t1:minutes(1.5):t2
t = 1x4 datetime
19-Apr-2023 18:53:50 19-Apr-2023 18:55:20 19-Apr-2023 18:56:50 19-Apr-2023 18:58:20
dt = diff(t)
dt = 1x3 duration
00:01:30 00:01:30 00:01:30
diff
は duration
配列を返します。
入力引数
X
— 入力配列
ベクトル | 行列 | 多次元配列 | table | timetable
入力配列。ベクトル、行列、多次元配列、table、または timetable として指定します。X
は数値配列、logical 配列、datetime 配列、duration 配列、またはそれらのデータ型のいずれかが含まれた変数をもつ table または timetable にすることができます。
複素数のサポート: あり
n
— 微分の次数
正の整数スカラー | []
微分の次数。正の整数スカラーまたは []
として指定します。n
の既定値は 1 です。
n
が操作次元より大きい場合の diff
の動作は、使用されている構文によって異なります。
n
の大きさが 1 でない最初の次元より大きい場合のdiff(X,n)
では、diff
はその次元のサイズを 1 に減らしてから、大きさが 1 でない次の次元に沿って差分の計算を続けます。n >= size(X,dim)
の場合のdiff(X,n,dim)
では、diff
は空の配列を返します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
dim
— 演算の対象の次元
正の整数スカラー
演算の対象の次元。正の整数のスカラーとして指定します。次元を指定しない場合、既定値はサイズが 1 より大きい最初の配列次元です。
2 次元の p 行 m 列の入力配列 A
について考えます。
diff(A,1,1)
は、A
の列の連続する要素に対して有効で、(p-1) 行 m 列の差分行列を返します。diff(A,1,2)
は、A
の行の連続する要素に対して有効で、p 行 (m-1) 列の差分行列を返します。
データ型: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
出力引数
Y
— 差分配列
スカラー | ベクトル | 行列 | 多次元配列 | table | timetable
差分配列。スカラー、ベクトル、行列、多次元配列、table、または timetable として返されます。X
が空ではない配列の場合、diff
により動作する X
の次元は、出力で n
だけサイズが縮小します。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
diff
を適用する回数を表す引数、および差分を計算する次元を表す引数を指定する場合、それらは定数でなければなりません。ツールボックス関数のコード生成に対する可変サイズの制限 (MATLAB Coder)を参照してください。
コード生成では、この関数のスパース行列入力はサポートされません。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は GPU 配列を完全にサポートしています。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
分散配列
Parallel Computing Toolbox™ を使用して、クラスターの結合メモリ上で大きなアレイを分割します。
この関数は分散配列を完全にサポートしています。詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入R2023a: table および timetable で直接計算を実行
関数 diff
は、table または timetable 内のすべての変数に対して、それらの変数にアクセスするためのインデックス付けを行うことなく計算できます。すべての変数のデータ型で計算がサポートされている必要があります。詳細については、table および timetable での直接計算を参照してください。
R2022a: 要素数が多い場合のパフォーマンスが向上
関数 diff
は、105 個以上の要素をもつベクトルの演算を行う場合や、5 x 105 個以上の要素をもつ行列または多次元配列の 1 番目または 2 番目の次元に沿って演算を行う場合のパフォーマンスが向上しました。
たとえば、次のコードは、2.5 x 107 個の要素をもつ double を構築し、隣接する要素間の差を計算します。直前のリリースと比較して、次のコードは約 2.4 倍速くなっています。
function timingDiff rng default N = 5000; A = rand(N); tic for k = 1:40 D = diff(A); end toc end
おおよその実行時間は以下のとおりです。
R2021b: 2.43 秒
R2022a: 1.00 秒
コードは、Windows® 10、Intel® Xeon® CPU E5-1650 v4 (3.60 GHz) のテスト システム上で関数 timingDiff
を呼び出して時間測定されました。
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:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
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
- United Kingdom (English)