Numerical derivative of a vector

milad picture milad · Aug 11, 2014 · Viewed 10.9k times · Source

I have a problem with numerical derivative of a vector that is x: Nx1 with respect to another vector t (time) that is the same size of x. I do the following (x is chosen to be sine function as an example):

t=t0:ts:tf;
x=sin(t);
xd=diff(x)/ts;

but the answer xd is (N-1)x1 and I figured out that it does not compute derivative corresponding to the first element of x.

is there any other way to compute this derivative?

Answer

thewaywewalk picture thewaywewalk · Aug 11, 2014

You are looking for the numerical gradient I assume.

t0 = 0;
ts = pi/10;
tf = 2*pi;

t  = t0:ts:tf;
x  = sin(t);
dx = gradient(x)/ts

The purpose of this function is a different one (vector fields), but it offers what diff doesn't: input and output vector of equal length.


gradient calculates the central difference between data points. For an array, matrix, or vector with N values in each row, the ith value is defined by

enter image description here

The gradient at the end points, where i=1 and i=N, is calculated with a single-sided difference between the endpoint value and the next adjacent value within the row. If two or more outputs are specified, gradient also calculates central differences along other dimensions. Unlike the diff function, gradient returns an array with the same number of elements as the input.