3-d order derivative

Dear all,
there is the following problem with the calculation of a 3-d order derivative.
I have two vectors of lambda and refractive index, respectively. I take the 3-d order derivative using a gradient().
dndl=gradient(n)./gradient(lambda);
d2ndl2=gradient(dndl)./gradient(lambda);
d3ndl3=gradient(d2ndl2)./gradient(lambda);
When I use a relatively small number of points (for example 3000) , I get a smooth plot.
In the case of more points (30 000) there is some oscillation in the plot.
What is the reason of such behavior?
Thank you a lot.

2 Comments

Matt J
Matt J on 13 Feb 2022
What do you mean by "use more points"? If it's a different input array why expect the same results?
What do you mean by "use more points"?
I mean, that I make the differences smaller and increase the accuracy.
Moreover, if I find the analytical function and then take the 3-d order derivative, I obtain smooth plots in any case.

Sign in to comment.

Answers (3)

Catalytic
Catalytic on 13 Feb 2022

1 vote

If the points are too close together, the difference between neighbours will be so small as to be dominated by floating point errors

1 Comment

It seems to be true. Using non SI base units do not help.
I guess in this case there is no way to solve this issue.
P.S. For the 2-nd derivative there is no problem for any number of points.

Sign in to comment.

Matt J
Matt J on 13 Feb 2022

0 votes

You could try diff(x,3)

2 Comments

It does not work too, because diff() uses a forward difference, but the gradient() uses a central difference.
Matt J
Matt J on 14 Feb 2022
Why care whether its forward or central? For a smooth curve, it should work out the same.

Sign in to comment.

Categories

Find more on Linear Algebra in Help Center and File Exchange

Asked:

on 13 Feb 2022

Commented:

on 14 Feb 2022

Community Treasure Hunt

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

Start Hunting!