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

Click For Summary

Discussion Overview

The discussion focuses on calculating the second derivative of a curve derived from a given set of data points using Matlab. Participants explore different methods, including analytical approaches and numerical techniques.

Discussion Character

  • Technical explanation
  • Mathematical reasoning
  • Debate/contested

Main Points Raised

  • One participant asks how to calculate the second derivative from a set of data points.
  • Another participant suggests fitting the data to a curve and then calculating the second derivative analytically from the fitted curve formula, providing a detailed Matlab code example.
  • A subsequent post seeks clarification on calculating the second derivative specifically with respect to the graph of x on r.
  • One participant questions whether r is the independent variable instead of x and suggests swapping the variables in the provided code if that is the case.
  • Another participant proposes using finite differences as a method for calculating the second derivative, referencing an external source for more information.
  • A later reply reiterates the finite differences method and mentions the use of the conv() function, noting potential issues with edge effects due to the small size of the data array.

Areas of Agreement / Disagreement

There is no consensus on the preferred method for calculating the second derivative, as participants present multiple approaches and seek clarification on the problem's specifics.

Contextual Notes

Participants express uncertainty regarding the roles of the variables x and r, which may affect the calculation method. The discussion also highlights limitations related to the small size of the data set when using numerical methods.

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 ·
Replies
5
Views
4K
  • · Replies 9 ·
Replies
9
Views
4K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 5 ·
Replies
5
Views
3K
Replies
5
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 6 ·
Replies
6
Views
2K