Integrating a Discrete Function in MATLAB

  1. I have a data curve with discrete time points that I imported into MATLAB. The x axis is an array named t:

    Code (Text):
    t =

      1.0e+003 *

        0.0319
        0.0505
        0.0851
        0.1037
        0.1356
        0.1648
        0.2021
        0.2313
        0.3616
        0.5823
        0.8880
        1.1778
        1.4996
        1.7814
    The y axis named Cp:

    Code (Text):
    Cp =

      1.0e+004 *

        0.0077
        0.7846
        3.7077
        3.2923
        1.8769
        1.3769
        1.0539
        0.7769
        0.5462
        0.3923
        0.2692
        0.1846
        0.1462
        0.1385
    The plot of the curve looks like this:

    [​IMG]

    Essentially I want to integrate the function from zero to one of the time points. I tried using the functions quad and trapz but they seem to return red error messages. The function trapz works when I integrate over the entire curve (trapz(Cp)) but it won't let me specify an integration interval.
     
  2. jcsd
  3. MATLABdude

    MATLABdude 1,724
    Science Advisor

    Trapz implements the trapezoid rule--if this is what you're looking for, that's great (but since you're not putting in the t-values, you're just getting the sum of x, which may or may not be what you're looking for):
    http://www.mathworks.com/help/techdoc/ref/trapz.html

    If you want to integrate only a portion of the data, put in only a portion of the vectors!

    For instance, to extract the 1st through 5th values of x, you'd type in:
    >> extract=x(1:5)

    More on array indexing (including the colon operator used above):
    http://www.mathworks.com/help/techdoc/learn_matlab/f2-12841.html#f2-428

    As per the examples under trapz above, as long as the two input vectors are the same size, trapz should produce something--not sure what the error message is, but if you'd post it, we may be able to help you.
     
  4. I should have posed the question in a better way... Based on the research I've done I think Simpson's rule is more efficient. I was initially trying to use the quad function:

    Code (Text):
    quad(Cp, 0, t(1))
    ??? Error using ==> fcnchk at 108
    FUN must be a function, a valid string expression, or an inline function object.

    Error in ==> quad at 66
    f = fcnchk(funfcn);
    I'm guessing that the error is because Cp is a discrete function and not a definite function of x. Essentially I need to know how to integrate this curve with Simpson's rule for a certain interval. Is there a way to do it directly or would I need to use the extract=x(..) function?
     
  5. MATLABdude

    MATLABdude 1,724
    Science Advisor

    The Simpson's rule implementation in MATLAB requires a function handle. Since you have a collection of data points, this won't work. And as you don't have a huge number of datapoints, efficiency isn't terribly relevant.
    http://www.mathworks.com/help/techdoc/ref/function_handle.html

    I'd suggest you stick with the trapezoid rule and use the subset extraction method I linked to earlier.
     
Know someone interested in this topic? Share this thead via email, Google+, Twitter, or Facebook

Have something to add?