Lagrange Interpolation #302
Open
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.
Lagrange Polynomial Interpolation
This pull request implements the Lagrange interpolator as one of the polynomial interpolators in issue #5.
The results have been benchmarked against SciPy's
lagrange
function.Important note before merging!
This Interpolation method requires the
std::ops::MulAssign
trait to be implemented for theInterpolationValue
type, however, this has already been done in this PR #301 for Natural Cubic splines.I will not include it in this PR to avoid a (more complicated) merge conflict - so it is best to merge #301 first before this PR.
If you want to test it beforehand, these lines must be included in
RustQuant_math/src/interpolation/mod.rs
to avoid error:Mathematical Background
Say we want to construct a polynomial that interpolates the following coordinates:
Define the Lagrange basis polynomial associated with$x_j$ :
It is clear that
The interpolation polynomial takes the form:
Now, evaluating at an interpolation point$x_j$ :
as required.