3-d order derivative

4 次查看(过去 30 天)
Max Demesh
Max Demesh 2022-2-13
评论: Matt J 2022-2-14
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 个评论
Matt J
Matt J 2022-2-13
What do you mean by "use more points"? If it's a different input array why expect the same results?
Max Demesh
Max Demesh 2022-2-13
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.

请先登录,再进行评论。

回答(3 个)

Catalytic
Catalytic 2022-2-13
If the points are too close together, the difference between neighbours will be so small as to be dominated by floating point errors
  1 个评论
Max Demesh
Max Demesh 2022-2-13
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.

请先登录,再进行评论。


Matt J
Matt J 2022-2-13
You could try diff(x,3)
  2 个评论
Max Demesh
Max Demesh 2022-2-14
It does not work too, because diff() uses a forward difference, but the gradient() uses a central difference.
Matt J
Matt J 2022-2-14
Why care whether its forward or central? For a smooth curve, it should work out the same.

请先登录,再进行评论。


Max Demesh
Max Demesh 2022-2-14

类别

Help CenterFile Exchange 中查找有关 Spatial Search 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by