# HOW DO I DO THAT IN MATLAB SERIES?

In this series, I am answering questions that students have asked me about MATLAB. Most of the questions relate to a mathematical procedure.

## TOPIC

How do I integrate a discrete function? Three cases of data are discussed.

## SUMMARY

```% Language : MATLAB 2008a;
% Authors : Autar Kaw;
% Mfile available at
% http://numericalmethods.eng.usf.edu/blog/integrationdiscrete.m;
% Last Revised : April 3, 2009;
% Abstract: This program shows you how to integrate a given discrete function.

clc
clear all
```

## INTRODUCTION

```disp('ABSTRACT')
disp('   This program shows you how to integrate')
disp('   a discrete function')
disp(' ')
disp('AUTHOR')
disp('   Autar K Kaw of http://autarkaw.wordpress.com')
disp(' ')
disp('MFILE SOURCE')
disp('   http://numericalmethods.eng.usf.edu/blog/integrationdiscrete.m')
disp(' ')
disp('LAST REVISED')
disp('   April 3, 2009')
disp(' ')
```
```ABSTRACT
This program shows you how to integrate
a discrete function

AUTHOR
Autar K Kaw of http://autarkaw.wordpress.com

MFILE SOURCE
http://numericalmethods.eng.usf.edu/blog/integrationdiscrete.m

LAST REVISED
April 3, 2009

```

## INPUTS

```% Integrate the discrete function y from x=1 to 6.5
% with y vs x data given as (1,2), (2,7), (4,16), (6.5,18)
% Defining the x-array
x=[1  2  4  6.5];
% Defining the y-array
y=[2  7  16  18];
```

## DISPLAYING INPUTS

```disp('____________________________________')
disp('CASE#1')
disp('LOWER LIMIT AND UPPER LIMITS OF INTEGRATION MATCH x(1) AND x(LAST)')
disp(' ')
disp('INPUTS')
disp('The x-data is')
x
disp('The y-data is')
y
fprintf('  Lower limit of integration, a= %g',x(1))
fprintf('\n  Upper limit of integration, b= %g',x(length(x)))
disp(' ')
```
```____________________________________
CASE#1
LOWER LIMIT AND UPPER LIMITS OF INTEGRATION MATCH x(1) AND x(LAST)

INPUTS
The x-data is

x =

1.0000    2.0000    4.0000    6.5000

The y-data is

y =

2     7    16    18

Lower limit of integration, a= 1
Upper limit of integration, b= 6.5
```

## THE CODE

```intvalue=trapz(x,y);
```

## DISPLAYING OUTPUTS

```disp('OUTPUTS')
fprintf('  Value of integral is = %g',intvalue)
disp('  ')
disp('___________________________________________')
```
```OUTPUTS
Value of integral is = 70
___________________________________________
```

## INPUTS

```% Integrate the discrete function y from x=3 to 6
% with y vs x data given as (1,2), (2,7), (4,16), (6.5,18)
% Defining the x-array
x=[1  2  4  6.5];
% Defining the y-array
y=[2  7  16  18];
% Lower limit of integration, a
a=3;
% Upper limit of integration, b
b=6;
```

## DISPLAYING INPUTS

```disp('CASE#2')
disp('LOWER LIMIT AND UPPER LIMITS OF INTEGRATION DO not MATCH x(1) AND x(LAST)')
disp('  ')
disp('INPUTS')
disp('The x-data is')
x
disp('The y-data is')
y
fprintf('  Lower limit of integration, a= %g',a)
fprintf('\n  Upper limit of integration, b= %g',b)
% Choose how many divisions you want for splining from a to b
n=1000;
fprintf('\n  Number of subdivisions used for splining = %g',n)
disp('  ')
disp('  ')
```
```CASE#2
LOWER LIMIT AND UPPER LIMITS OF INTEGRATION DO not MATCH x(1) AND x(LAST)

INPUTS
The x-data is

x =

1.0000    2.0000    4.0000    6.5000

The y-data is

y =

2     7    16    18

Lower limit of integration, a= 3
Upper limit of integration, b= 6
Number of subdivisions used for splining = 1000

```

## THE CODE

```xx=a:(b-a)/n:b;
% Using spline to approximate the curve from x(1) to x(last)
yy=spline(x,y,xx);
intvalue=trapz(xx,yy);
```

## DISPLAYING OUTPUTS

```disp('OUTPUTS')
fprintf('  Value of integral is = %g',intvalue)
disp('  ')
disp('___________________________________________')
```
```OUTPUTS
Value of integral is = 50.4424
___________________________________________
```

## INPUTS

```% Integrate the discrete function y from x=1 to 6.5
% with y vs x data given as (1,2), (4,16), (2,7), (6.5,18)
% The x-data is not in ascending order
% Defining the x-array
x=[1  4   2 6.5];
% Defining the y-array
y=[2  16  7 18];
% Lower limit of integration, a
a=3;
% Upper limit of integration, b
b=6;
```

## DISPLAYING INPUTS

```disp('CASE#3')
disp('LOWER LIMIT AND UPPER LIMITS OF INTEGRATION DO not MATCH x(1) AND x(LAST) ')
disp('AND X-DATA IS NOT IN ASCENDING OR DESCENDING ORDER')
disp('   ')
disp('INPUTS')
disp('The x-data is')
x
disp('The y-data is')
y
fprintf('  Lower limit of integration, a= %g',a)
fprintf('\n  Upper limit of integration, b= %g',b)
% Choose how many divisions you want for splining from a to b
n=1000;
fprintf('\n  Number of subdivisions used for splining = %g',n)
disp('  ')
disp('  ')
```
```CASE#3
LOWER LIMIT AND UPPER LIMITS OF INTEGRATION DO not MATCH x(1) AND x(LAST)
AND X-DATA IS NOT IN ASCENDING OR DESCENDING ORDER

INPUTS
The x-data is

x =

1.0000    4.0000    2.0000    6.5000

The y-data is

y =

2    16     7    18

Lower limit of integration, a= 3
Upper limit of integration, b= 6
Number of subdivisions used for splining = 1000

```

## THE CODE

```[x,so] = sort(x); % so is the sort order
y = y(so); % y data is now in same order as x data
xx=a:(b-a)/n:b;
% Using spline to approximate the curve from x(1) to x(last)
yy=spline(x,y,xx);
intvalue=trapz(xx,yy);
```

## DISPLAYING OUTPUTS

```disp('OUTPUTS')
fprintf('  Value of integral is = %g',intvalue)
disp('  ')
```
```OUTPUTS
Value of integral is = 50.4424
```