diff
Differences and approximate derivatives
Description
calculates differences between adjacent elements ofY
= diff(X
)X
along the first array dimension whose size does not equal 1:
If
X
is a vector of lengthm
, thenY = diff(X)
返回一个vector of lengthm-1
. The elements ofY
are the differences between adjacent elements ofX
.Y = [X(2)-X(1) X(3)-X(2) ... X(m)-X(m-1)]
If
X
is a nonempty, nonvector p-by-m matrix, thenY = diff(X)
返回一个matrix of size (p-1)-by-m, whose elements are the differences between the rows ofX
.Y = [X(2,:)-X(1,:); X(3,:)-X(2,:); ... X(p,:)-X(p-1,:)]
If
X
is a 0-by-0 empty matrix, thenY = diff(X)
返回一个0-by-0 empty matrix.
Examples
Differences Between Vector Elements
Create a vector, then compute the differences between the elements.
X = [1 1 2 3 5 8 13 21]; Y = diff(X)
Y =1×70 1 1 2 3 5 8
Note thatY
has one fewer element thanX
.
Differences Between Matrix Rows
Create a 3-by-3 matrix, then compute the first difference between the rows.
X = [1 1 1; 5 5 5; 25 25 25]; Y = diff(X)
Y =2×34 4 4 20 20 20
Y
is a 2-by-3 matrix.
Multiple Differences
Create a vector and compute the second-order difference between the elements.
X = [0 5 15 30 50 75 105]; Y = diff(X,2)
Y =1×55 5 5 5 5
Differences Between Matrix Columns
Create a 3-by-3 matrix, then compute the first-order difference between the columns.
X = [1 3 5;7 11 13;17 19 23]; Y = diff(X,1,2)
Y =3×22 2 4 2 2 4
Y
is a 3-by-2 matrix.
Approximate Derivatives with diff
Use thediff
function to approximate partial derivatives with the syntaxY = diff(f)/h
, wheref
is a vector of function values evaluated over some domain,X
, andh
is an appropriate step size.
For example, the first derivative ofsin(x)
with respect tox
iscos(x)
, and the second derivative with respect tox
is-sin(x)
. You can usediff
to approximate these derivatives.
h = 0.001;% step sizeX = -pi:h:pi;% domainf = sin(X);% rangeY = diff(f)/h;% first derivativeZ = diff(Y)/h;% second derivative情节(X(: 1:长度(Y)), Y,'r',X,f,'b', X(:,1:length(Z)),Z,'k')
In this plot the blue line corresponds to the original function,sin
. The red line corresponds to the calculated first derivative,cos
, and the black line corresponds to the calculated second derivative,-sin
.
Differences Between Datetime Values
Create a sequence of equally-spaced datetime values, and find the time differences between them.
t1 = datetime('now'); t2 = t1 + minutes(5); t = t1:minutes(1.5):t2
t =1x4 datetimeColumns 1 through 3 26-Feb-2022 12:12:08 26-Feb-2022 12:13:38 26-Feb-2022 12:15:08 Column 4 26-Feb-2022 12:16:38
dt = diff(t)
dt =1x3 duration00:01:30 00:01:30 00:01:30
diff
返回一个duration
array.
Input Arguments
X
—Input array
vector|matrix|multidimensional array
Input array, specified as a vector, matrix, or multidimensional array.X
can be a numeric array, logical array, datetime array, or duration array.
Complex Number Support:Yes
n
—Difference order
positive integer scalar|[]
Difference order, specified as a positive integer scalar or[]
. The default value ofn
is 1.
It is possible to specifyn
sufficiently large so thatdim
reduces to a single (size(X,dim) = 1
) dimension. When this happens,diff
continues calculating along the next array dimension whose size does not equal 1. This process continues until a 0-by-0 empty matrix is returned.
Data Types:single
|double
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
dim
—Dimension to operate along
positive integer scalar
Dimension to operate along, specified as a positive integer scalar. If you do not specify the dimension, then the default is the first array dimension of size greater than 1.
Consider a two-dimensional p-by-m input array,A
:
diff(A,1,1)
works on successive elements in the columns ofA
and returns a (p-1)-by-m difference matrix.diff(A,1,2)
works on successive elements in the rows ofA
and returns a p-by-(m-1) difference matrix.
Data Types:double
|single
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
Output Arguments
Y
— Difference array
scalar | vector | matrix | multidimensional array
Difference array, returned as a scalar, vector, matrix, or multidimensional array. IfX
is a nonempty array, then the dimension ofX
acted on bydiff
is reduced in size byn
in the output.
Extended Capabilities
Tall Arrays
Calculate with arrays that have more rows than fit in memory.
This function supports tall arrays with the limitations:
You must use the three-input syntaxY = diff(X,N,dim)
.
For more information, seeTall Arrays.
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
If supplied, the arguments representing the number of times to apply
diff
and the dimension along which to calculate the difference must be constants.SeeVariable-Sizing Restrictions for Code Generation of Toolbox Functions(MATLAB Coder).
Code generation does not support sparse matrix inputs for this function.
Thread-Based Environment
Run code in the background using MATLAB®backgroundPool
or accelerate code with Parallel Computing Toolbox™ThreadPool
.
This function fully supports thread-based environments. For more information, seeRun MATLAB Functions in Thread-Based Environment.
GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
This function fully supports GPU arrays. For more information, seeRun MATLAB Functions on a GPU(Parallel Computing Toolbox).
Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.
This function fully supports distributed arrays. For more information, seeRun MATLAB Functions with Distributed Arrays(Parallel Computing Toolbox).
Version History
Introduced before R2006aR2022a: Improved performance with large number of elements
Thediff
函数显示improved performance when operating on vectors with at least 105elements or when operating along the first or second dimension of matrices and multidimensional arrays with at least 5 x 105elements.
For example, this code constructs a double with 2.5 x 107elements and calculates differences between adjacent elements. It runs approximately 2.4x faster than in the previous release:
function timingDiff rng default N = 5000; A = rand(N); tic for k = 1:40 D = diff(A); end toc end
The approximate execution times are:
R2021b:2.43 s
R2022a:1.00 s
The code was timed on a Windows®10, Intel®Xeon®v4 @ 3.60 GHz CPU e5 - 1650test system by calling thetimingDiff
function.
Open Example
You have a modified version of this example. Do you want to open this example with your edits?
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
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)