Taking the second derivative

I have two arrays M and V, both are the same dimesions.
I am trying to find and plot this vs. M, this is the code I am working with - but it doesn't work - what should I do?
second_der = diff(V_preamp,2)./diff(M,2);
The probem with the above code is it creates a second derivative code that is shorter than the independent variable I am plotting the graph with (independent variable - M)
How can I fix this isse.

 Accepted Answer

Torsten
Torsten on 7 Feb 2019
Edited: Torsten on 8 Feb 2019
second_der = zeros(size(V_preamp));
second_der(2:end-1) = ((V_preamp(3:end)-V_preamp(2:end-1))./...
(M(3:end)-M(2:end-1))-...
(V_preamp(2:end-1)-V_preamp(1:end-2))./...
(M(2:end-1)-M(1:end-2)))./...
(0.5*(M(3:end)-M(1:end-2)));
plot(M(2:end-1),second_der(2:end-1))

5 Comments

Hi Torsten,
Thanks for that answer! I get a matrix dimensions don't agree error.
Can you tell me how you got the second derivative?
Code corrected.
Best wishes
Torsten.
Thanks a lot, it works - If I may ask, how did you get the equation to find the second derivative?
Torsten
Torsten on 11 Feb 2019
Edited: Torsten on 11 Feb 2019
It's the usual finite difference approximation for the second derivative.
On uniform grids,
f''(x_i) = (approximately) (f(x_i-h)-2*f(x_i)+f(x_i+h))/h^2
On non-uniform grids
f''(x_i) = (approximately) ((f(x_(i+1)-f(x_i)))/(x_(i+1)-x_i) - (f(x_i)-f(x_(i-1)))/(x_i-x_(i-1)))/(0.5*(x_(i+1)-x_(i-1)))
For the two arrays V and M you have, V must be equal to some function of M where V = f(M).
To get the second derivative of V with respect to M it is simply:
d2VdM2 = diff(V, M, 2)
where V=f(M), M is what you differentiating with respect to and 2 is order of the derivative.

Sign in to comment.

More Answers (0)

Categories

Find more on Mathematics in Help Center and File Exchange

Products

Release

R2017b

Asked:

on 7 Feb 2019

Commented:

on 2 Mar 2021

Community Treasure Hunt

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

Start Hunting!