Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Second Derivative in Matlab

  1. Jul 17, 2016 #1
    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];
  2. jcsd
  3. Jul 17, 2016 #2
    How about fitting it to a curve, then calculating the second derivative analytically from the fitted curve formula? Like this:

    Code (Text):
    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
  4. Jul 18, 2016 #3
    But how to calculate second derivative graph x on r?
  5. Jul 18, 2016 #4
    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 (Text):

    plot(xFit, deriv2, 'b-');
  6. Jul 18, 2016 #5
  7. Jul 18, 2016 #6
    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).
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted