Determine differentiability of a x and y dataset

Hello everybody,
I have a dataset (x old, y old). Now I do some math on it and get a new dataset (x new, y new). To check whether my calculations are correct, the curve of the new datset must be differentiable.
Do you have any ideas, how I could do this "check"?
Thank you
Cheers
Christian

1 Comment

As you can see, the critical spot of the new dataset looks sometimes like this:
And now I need to find out, if the new curve is smooth or looks like above. It would be perfect if the code would give me a result which looks something like this:
new_dataset_1 = false ("not differentiable")
new_dataset_2 = true ("differentiable")
new_dataset_3 = true
new_dataset_4 = false...

Sign in to comment.

Answers (1)

The concept of diferrentiable does not mean much for a discretised function. By definition dy/dx always exists when you have a vector of x and y values, unless one of y or x is infinite or NaN.
So really the only thing you could test is
assert(all(isfinite(xnew)) & all(isfinite(ynew)))

7 Comments

Well, I know this is gonna be tricky, that is the reason why I Need your help.
If I use "isfinite" on my new datapoints, I won't get anything else than "1" (true). Because there is not a single datapoint which tends towards infinity.
So maybe I don't really get your point?
Well, if all the points are finite then your discretised function is differentiable.
For a discreet set of points, the derivative is equivalent to y(i+1)-y(i), that is the diff function in matlab. So for dicreet points, being differentiable simply means that you can calculate diff(y)./diff(x)
Note: I am assuming there's no duplicate x, since otherwise diff(x) is 0 and in this case, the function is indeed not differentiable.
That is a good idea! I might just check diff(x_new). If this returns me only positiv values, the curve should be rather smooth. If it returns any negative values, I have a critical point somewhere.
The only problem which this method does not cover, if I have a "perfect sharp bend" where my x data do not "go backwards".
Well,
all(diff(x) > 0) | all(diff(x) < 0)
will tell you if all the x values are strictly monotonically increasing or decreasing.
I'm not sure what you mean by perfect sharp bend.
As you can see at the second picture I added above, the "curve" makes a "U-turn" and then crosses the "curve". In this case, I will get some negative diff(x) values and I can use this fact as an evaluation whether the curve is "differentiable" or not.
But, if I am really unlucky and this case appears:
I won't get any negative diff(x) values but the curve is still not "differentiable".
Do you know what I mean?
Guillaume is right: For a discretized function, the term "differentiable" has no meaning. A line like x=[1,2,3], y=[1,2,100] might or might not represent a differentiable function, because even a smooth function can contain a huge derivative in one point. There is also no to "proove" if sin(1/x) is differentiable in x=0 if all you have is a finite number of its values.
All you can decide based on a set of data points is if the difference between neighboring points exceeds a certain limit or not. But this does not mean differentiablility.
I know what differentiability means, therefore I asked this question to the community.
But I think I might get along with the diff(x) < 0 thing in 99% of the time.

Sign in to comment.

Categories

Asked:

on 8 Mar 2017

Edited:

on 27 Mar 2017

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!