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.

 Risposta accettata

Torsten
Torsten il 7 Feb 2019
Modificato: Torsten il 8 Feb 2019

2 voti

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 Commenti

Hans123
Hans123 il 7 Feb 2019
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?
Torsten
Torsten il 8 Feb 2019
Code corrected.
Best wishes
Torsten.
Hans123
Hans123 il 9 Feb 2019
Thanks a lot, it works - If I may ask, how did you get the equation to find the second derivative?
Torsten
Torsten il 11 Feb 2019
Modificato: Torsten il 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.

Accedi per commentare.

Più risposte (0)

Prodotti

Release

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by