Write two subroutines that compute the integral
The user will provide the function f, the interval endpoints a and b, and the tolerance tol.
The routines will return , and respectively. The number of node points n should be a power of 2 (). n is automatically selected by the routine such that the numerical result approximates the true integral within tol ( , and respectively). The routines will also return ierr, a state variable. ierr=0 means that the integration did not succeed; if the integration was successfull, then ierr returns the number of node points n.
The trapezoidal routine header and the declarations part should look like
| subroutine trap(f,a,b,tol,T,ierr) |
| implicit none |
| interface |
| real function f(x) |
| real, intent(in) :: x |
| end function f |
| end interface |
| real, intent(in) :: a,b,tol |
| real, intent(out) :: T |
| integer, intent(out) :: ierr |
The Simpson routine header and the declarations part should look like
| subroutine simpson(f,a,b,tol,S,ierr) |
| implicit none |
| interface |
| real function f(x) |
| real, intent(in) :: x |
| end function f |
| end interface |
| real, intent(in) :: a,b,tol |
| real, intent(out) :: S |
| integer, intent(out) :: ierr |
You need to insert detailed comments about the meaning of input, output and local variables, and about the computational algorithm.
Both routines will reside in the same file, named integration.f90.