Discrete Spherical Bessel Transform #8
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR is to propose a solution for the non-Limber integration challenge based on using a discretisation trick for spherical Bessel transforms when a function is compactly supported on the interval [0, 1]. I used this relation in my very first paper (https://arxiv.org/abs/1112.0561) to define a discrete spherical Bessel transform (DSBT) which reduces the integration problem to simply evaluating a matrix operation. It actually involves turning the integral into a truncated series, with a trade-off on accuracy depending on the order of truncation of that series.
My strategy is to rewrite the integral as:

And evaluating each inner integral with the DSBT. It's cool because we only need to compute these inner integrals once for each tracer, and then we can multiply tracers together for the overall integral on k, which can be done with any simple integration method as there is no Bessel function left.
The only expensive part is computing this matrix (requires computing zeros of bessel functions and such), but once it's computed, the evaluation of the transform is super fast because simply a matrix operation. I gave it a first try on the first gg bin:

