A CUDA based numerical discretization algorithm on a rectangular grid using Gauss-Legendre quadrature rule.
The numerical discretization algorithm is develepod for two dimensional sufficiently smooth functions. The discretization method is a projection based scheme from the continuous space into a finite dimensional representation space. The projection operator uses a pixel based expansion set to obtain the coefficients in the representation space. The computations are parallelized on a 2D rectangular grid defined by the width of the nth expansion along the respective dimension.
-
The numerical discretization algorithm is implemented in the CUDA kernel file Numerical-Discretization-GLQ.cu and the Jupyter nootbook Numerical_Discretization_GLQ.ipynb.
-
The Python 3 Jupyter notebook Numerical_Discretization_GLQ.ipynb can be used on the Google colaboratory cloud service that provides a free access to the NVIDIA Tesla K80 GPU.
-
The nodes and weights are stored as list of lists using bidimensional arrays. The Legendre nodes (roots of the Legendre polynomials) in the interval (-1, 1) can be computed using mathematica nootbook Nodes-weights-Gauss-Legendre.nb or other open source tools.
-
The Thrust C++ tempelate libraries are used here for abstraction and performace.
-
Fast implementation to directly compute the Legendre nodes and weights for the Gauss-Legendre quadrature.
-
Adaptive quadrature rule to compute the error estimates.
-
Hildebrand, F. B. Introduction to Numerical Analysis. New York: McGraw-Hill, pp. 323-325, 1956.
-
Atkinson, Kendall E. "A survey of numerical methods for solving nonlinear integral equations." The Journal of Integral Equations and Applications (1992): 15-46.
-
Atkinson, Kendall E., and Florian A. Potra. "Projection and iterated projection methods for nonlinear integral equations." SIAM journal on numerical analysis 24.6 (1987): 1352-1373.
Licensed under the MIT License