Integrating a Discrete Function in MATLAB

Click For Summary

Discussion Overview

The discussion revolves around integrating a discrete function in MATLAB, specifically focusing on how to perform integration over a specified interval using different numerical methods, such as the trapezoid rule and Simpson's rule. Participants share their experiences and challenges with MATLAB functions related to integration.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant describes their data curve with discrete time points and expresses the need to integrate the function from zero to one of the time points using MATLAB.
  • Another participant explains that the trapz function implements the trapezoid rule and suggests that to integrate only a portion of the data, one should extract the relevant portion of the vectors.
  • A later post indicates that the participant believes Simpson's rule may be more efficient and discusses an error encountered when trying to use the quad function, suggesting that the error arises because Cp is a discrete function rather than a continuous one.
  • Another participant clarifies that Simpson's rule requires a function handle, which may not be applicable to the participant's discrete data points, and reiterates the suggestion to use the trapezoid rule with subset extraction.

Areas of Agreement / Disagreement

Participants express differing opinions on the best method for integration, with some advocating for the trapezoid rule and others suggesting Simpson's rule. There is no consensus on the most effective approach for integrating the discrete function.

Contextual Notes

Participants mention specific MATLAB functions and their requirements, including the need for function handles and the implications of using discrete data points. There are unresolved issues regarding the error messages encountered and the conditions under which different integration methods can be applied.

tramar
Messages
52
Reaction score
0
I have a data curve with discrete time points that I imported into MATLAB. The x-axis is an array named t:

Code:
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:
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:

[PLAIN]http://dl.dropbox.com/u/11932911/Cp.jpg

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.
 
Last edited by a moderator:
Physics news on Phys.org
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.
 
Last edited by a moderator:
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:
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?
 
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.