sandbox/easystab/integration.m
In this code we demonstrate the integration in 1D of a function. To see this in 2D please see integration_2D.m. To see how the integration weights are coded, please see dif1D.m.
We integrate f(x)=x^2 from 0 to 1, the exact value is,1/3.
clear all; clf
% parameters
L=1; % domain length
N=15; % number of points
Trapezoidal integration
We start with a simple equispaced grid x with grid spacing h. A basic way to integrate is to approximate the function between each grid nodes with a straight line. The integral is thus \displaystyle \int_{x_1}^{x_N} f dx =h\left(\frac{f_1}{2}+f_2+f_3+ \dots +f_{N-1}+\frac{f_N}{2}\right).
We continue with the idea of building linear operators to do the operations in easystab, instead of manipulating the individual elements of the variables. Thus we build the line vector of the integration weights \displaystyle w=h\begin{pmatrix}\frac{1}{2}, & 1, & 1, & \dots & 1, & \frac{1}{2} \end{pmatrix} and the integral is thus computed by the vector product w*f.
% equispaced grid
x=linspace(0,L,N)'; % the grid
f=x.^2; % the function
h=x(2)-x(1); % grid spacing
wx=h*[0.5,ones(1,N-2),0.5];
intf=wx*f; % integration
errtrap=abs(intf-1/3) % the error
Integration for the Chebychev grid
When using Chebychev polynomial we have a grid which is not equispaced, and since the function is apprximated with polynomilas we may reach a higher accuracy than using the naive trapezoidal integration. The work was done by Clenshaw and Curtis and the integration weights are coded in clencurt.m.
% Chebychev mesh and Clenshaw-Curtis integration weights
[dx,dxx,wx,x]=dif1D('cheb',0,L,N,3);
f=x.^2; % the function
intf=wx*f; % integration
errcheb=abs(intf-1/3) % the error
Validation
And here is the screen output for the approximation error. We see that with just 15 grid cells we get quite a nice accuracy with the Chebychev grid.
errtrap =
8.5034e-04
errcheb =
5.5511e-17
Exercices/contributions
- Please
- Please
- …