MATLAB: Diff() scales the amplitude

diff amplitude scale

I'm trying to numerically differentiate a signal. As a test, I created a y=sin(x) signal. When I use diff(y), the output amplitude is scaled down to 0.1 instead of 1. The analytical solution is cos(x), therefore I'd expect the output to have an amplitude of 1 as well. What am I missing?

Best Answer

Jonas, diff only calculates the differences between adjacent elements, the dy. To get the derivative you need to devide by dx, e.g.
x = 0:0.1:10;
y = sin(x);
dydx = diff(y)/(x(2)-x(1)); % assuming dx to be constant
plot(x(1:end-1),dydx)