MATLAB Answers

diff gives back one less valor

41 views (last 30 days)
So I have this set of data, it's humidity vs time when drying food. I need the speed of drying so what do I do? I use cftool to find best fit of data then I tag the fit and export to workspace.
I have:
time=[1;2;3;4;5;6] x=[0.5;0.4;0.3;0.25;0.22;0.18]
I use cftool to fit it and export to worskpace
Then i use;
Rc stands for speed in water removal (drying) and it gives back a vector with only 5 numbers, when it should give me a vector with 6 elements, each one the result of the derivate for each time...yet, as i said it doesn't... why is this?
Thanks a lot for the answers.


Sign in to comment.

Accepted Answer

Sean de Wolski
Sean de Wolski on 4 Oct 2013
Edited: Sean de Wolski on 4 Oct 2013
From the doc for diff
If X is a vector of length m, then Y = diff(X) returns a vector of length m-1. The elements of Y are the differences between adjacent elements of X.
Y = [X(2)-X(1) X(3)-X(2) ... X(m)-X(m-1)]
Thus it does the backward differences requiring one element shorter. IF you want the vector to be the same length, pad it with a 0.
There's also this file that might interest you:


Thomas on 4 Oct 2013
do not pad with a 0, this would alter your result. Rather pad 0.6 at the front or 0.14 at the end.
Sean de Wolski
Sean de Wolski on 4 Oct 2013
@Thomas, padding the results with a zero would not alter the results, just shift them.

Sign in to comment.

More Answers (1)

Thomas on 4 Oct 2013
It cannot give 6 elements since it calculates differences between successive elements and for 6 input values there are only differences e.g. assuming time=1:6 you have
INPUT : x=[ a b c d e f] (count 6) OUTPUT: differences used are b-a, c-b, d-c, e-d, f-e (count 5)
If you really need 6 values you could extrapolate your data boundaries and use a central differencing scheme.

  1 Comment

Juan Carlos
Juan Carlos on 4 Oct 2013
Yes! I thought i was something like that, i'll extrapolate. THANKS!

Sign in to comment.