Main Content

diff

説明

Y = diff(X) は、サイズが 1 でない最初の配列の次元に沿って、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 以降)

Y = diff(X,n) は、diff(X) 演算子を再帰的に n 回適用することで n 階差分を計算します。実際、これは diff(X,2)diff(diff(X)) と同じであることを示します。

Y = diff(X,n,dim) は、dim で指定された次元に沿って計算された n 階差分です。dim 入力は、正の整数のスカラーです。

すべて折りたたむ

ベクトルを作成し、要素間の差分を計算します。

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 列の行列です。

ベクトルを作成し、要素間の 2 階差分を計算します。

X = [0 5 15 30 50 75 105];
Y = diff(X,2)
Y = 1×5

     5     5     5     5     5

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 を構文 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')

Figure contains an axes object. The axes object contains 3 objects of type line.

このプロットで、青のラインは元の関数 sin に対応します。赤のラインは計算された 1 次導関数 cos に対応し、黒のラインは計算された 2 次導関数 -sin に対応します。

等間隔の datetime 値のシーケンスを作成し、それらの時間差を求めます。

t1 = datetime('now');
t2 = t1 + minutes(5);
t = t1:minutes(1.5):t2
t = 1x4 datetime
   25-Jan-2024 22:19:42   25-Jan-2024 22:21:12   25-Jan-2024 22:22:42   25-Jan-2024 22:24:12

dt = diff(t)
dt = 1x3 duration
   00:01:30   00:01:30   00:01:30

diffduration 配列を返します。

入力引数

すべて折りたたむ

入力配列。ベクトル、行列、多次元配列、table、または timetable として指定します。X は数値配列、logical 配列、datetime 配列、duration 配列、またはそれらのデータ型のいずれかが含まれた変数をもつ table または timetable にすることができます。

複素数のサポート: あり

微分の次数。正の整数スカラーまたは [] として指定します。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

演算の対象の次元。正の整数のスカラーとして指定します。次元を指定しない場合、既定値はサイズが 1 より大きい最初の配列次元です。

2 次元の p 行 m 列の入力配列 A について考えます。

  • diff(A,1,1) は、A の列の連続する要素に対して有効で、(p-1) 行 m 列の差分行列を返します。

  • diff(A,1,2) は、A の行の連続する要素に対して有効で、p 行 (m-1) 列の差分行列を返します。

diff(A,1,1) column-wise computation and diff(A,1,2) row-wise computation

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

出力引数

すべて折りたたむ

差分配列。スカラー、ベクトル、行列、多次元配列、table、または timetable として返されます。X が空ではない配列の場合、diff により動作する X の次元は、出力で n だけサイズが縮小します。

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する

参考

| | |