Source code for src.Math.Integrate
################################################################################
# this file defines functions for
# integration method
################################################################################
import numpy as np
import numba as nb
from .. import Constants as Cst
################################################################################
# integration with using Tapzodial method
################################################################################
[docs]def Trapze(integrand, x):
r"""
Integration using Trapzoidal rule
Parameters
----------
integrand : array-like of np.double
integrand as a function of variable x
x : array-like of np.double
independent variable x
Returns
-------
sum : np.double
result of integration
Notes
------
Refer to [1]_.
References
----------
.. [1] Trapzoidal rule, wikipedia, https://en.wikipedia.org/wiki/Trapezoidal_rule
"""
n = x.size
dx = np.empty(n,dtype=np.double)
for i in range(1, n-1):
dx[i] = 0.5 * (x[i+1]-x[i-1])
dx[0] = 0.5 * (x[1]-x[0])
dx[n-1] = 0.5 * (x[n-1] - x[n-2])
sum = 0.0
for i in range(n):
sum += dx[i] * integrand[i]
return sum
################################################################################
# whether to compile them using numba's LLVM
################################################################################
if Cst.isJIT == True:
Trapze = nb.jit([nb.float64(nb.float64[:],nb.float64[:]),nb.int_(nb.int_[:],nb.int_[:])],nopython=True)( Trapze )