MATLAB How to Calculate the Second Derivative of a Curve in Matlab?

AI Thread Summary
To calculate the second derivative of a curve from a given dataset, one effective method is to fit the data to a polynomial curve, such as a cubic or quartic polynomial. The coefficients of the fitted polynomial can then be used to derive the first and second derivatives analytically. The process involves using functions like polyfit to obtain the polynomial coefficients and polyval to evaluate the polynomial at desired points. For the provided data, the second derivative can be calculated using the formula derived from the polynomial coefficients. Alternatively, finite difference methods can be employed for numerical differentiation, which may be implemented using convolution functions like conv(). However, caution is advised with small datasets, as edge effects can limit the validity of results. If the roles of x and r are reversed, the code can be adjusted accordingly to reflect that change.
anahita
Messages
27
Reaction score
0
I have a set of data as follows, How can I calculate the second derivative of the curve obtained from these data.

x=[0.1;0.07;0.05;0.03;0]; r=[-98.9407;-105.7183;-111.2423;-116.0320;-120.0462];
 
Physics news on Phys.org
How about fitting it to a curve, then calculating the second derivative analytically from the fitted curve formula? Like this:

Code:
x=[0.1;0.07;0.05;0.03;0];
r=[-98.9407;-105.7183;-111.2423;-116.0320;-120.0462];
plot(x, r, 'r*-', 'LineWidth', 2);
% Fit to a cubic
coefficients = polyfit(x, r, 4)
xFit = linspace(min(x), max(x), 100);
rFit = polyval(coefficients, xFit);
hold on;
plot(xFit, rFit, 'b-', 'LineWidth', 2);
grid on;
legend('Actual', 'fit');

% Set up figure properties:
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
% Get rid of tool bar and pulldown menus that are along top of figure.
set(gcf, 'Toolbar', 'none', 'Menu', 'none');
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')

% Equation is a1*x^4 + a2*x^3 + a3*x^2 + a4*x + a5
% First derivative is 4*a1*x^3 + 3*a2*x^2 + 2*a3*x + a4
% Second derivative is 12*a1*x^2 + 6*a2*x + 2*a3
a1 = coefficients(1)
a2 = coefficients(2)
a3 = coefficients(3)
deriv2 = 12*a1*xFit.^2 + 6*a2*xFit + 2*a3
 
Thanks.
But how to calculate second derivative graph x on r?
 
What does that mean? I showed you how to calculate the second derivative of r with respect to x. Is that not what you want? Is r the independent variable instead of x? If so, just swap x and r in my code. Or do you just need to know how to call plot()?

Code:
plot(xFit, deriv2, 'b-');
 
Irene Kaminkowa said:
anahita,
you can siply use finite differencies: https://en.wikipedia.org/wiki/Finite_difference
You can implement this method with conv(), though with such a small array as the poster posted, the edge effects will reduce the valid region to about one element. However, for a longer vector (more elements), conv() is a good way to take the numerical/empirical derivative (vs. the analytical derivative as in my answer).
 

Similar threads

Replies
5
Views
3K
Replies
1
Views
2K
Replies
2
Views
3K
Replies
5
Views
2K
Replies
4
Views
2K
Replies
5
Views
3K
Replies
6
Views
2K
Back
Top