Integrating a Discrete Function in MATLAB

Click For Summary
SUMMARY

The discussion focuses on integrating a discrete function in MATLAB using the trapezoid rule and Simpson's rule. The user has a dataset with discrete time points stored in an array named t and corresponding values in Cp. While the trapz function works for the entire dataset, the user encounters errors when attempting to specify an integration interval. The discussion concludes that for integrating a subset of data, the user should extract the relevant portion of the vectors before applying the trapz function.

PREREQUISITES
  • Familiarity with MATLAB syntax and functions
  • Understanding of numerical integration techniques, specifically trapezoid and Simpson's rule
  • Knowledge of array indexing in MATLAB
  • Basic understanding of discrete functions and function handles in MATLAB
NEXT STEPS
  • Learn how to implement Simpson's rule in MATLAB using function handles
  • Research advanced numerical integration techniques in MATLAB
  • Explore MATLAB's documentation on array manipulation and indexing
  • Investigate error handling in MATLAB functions to troubleshoot integration issues
USEFUL FOR

MATLAB users, data analysts, and engineers who need to perform numerical integration on discrete datasets and seek efficient methods for handling integration intervals.

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.