Add different ways to provide data for XY interpolator

This commit is contained in:
Alexander Nozik 2020-02-12 22:26:25 +03:00
parent 73f40105c4
commit 068b90e7ab
2 changed files with 25 additions and 1 deletions

View File

@ -3,6 +3,8 @@ package scientifik.kmath.interpolation
import scientifik.kmath.functions.PiecewisePolynomial import scientifik.kmath.functions.PiecewisePolynomial
import scientifik.kmath.functions.value import scientifik.kmath.functions.value
import scientifik.kmath.operations.Ring import scientifik.kmath.operations.Ring
import scientifik.kmath.structures.Buffer
import scientifik.kmath.structures.asBuffer
interface Interpolator<X, Y> { interface Interpolator<X, Y> {
fun interpolate(points: XYPointSet<X, Y>): (X) -> Y fun interpolate(points: XYPointSet<X, Y>): (X) -> Y
@ -18,4 +20,26 @@ interface PolynomialInterpolator<T : Comparable<T>> : Interpolator<T, T> {
override fun interpolate(points: XYPointSet<T, T>): (T) -> T = { x -> override fun interpolate(points: XYPointSet<T, T>): (T) -> T = { x ->
interpolatePolynomials(points).value(algebra, x) ?: getDefaultValue() interpolatePolynomials(points).value(algebra, x) ?: getDefaultValue()
} }
}
fun <T : Comparable<T>> PolynomialInterpolator<T>.interpolatePolynomials(
x: Buffer<T>,
y: Buffer<T>
): PiecewisePolynomial<T> {
val pointSet = BufferXYPointSet(x, y)
return interpolatePolynomials(pointSet)
}
fun <T : Comparable<T>> PolynomialInterpolator<T>.interpolatePolynomials(
data: Map<T, T>
): PiecewisePolynomial<T> {
val pointSet = BufferXYPointSet(data.keys.toList().asBuffer(), data.values.toList().asBuffer())
return interpolatePolynomials(pointSet)
}
fun <T : Comparable<T>> PolynomialInterpolator<T>.interpolatePolynomials(
data: List<Pair<T, T>>
): PiecewisePolynomial<T> {
val pointSet = BufferXYPointSet(data.map { it.first }.asBuffer(), data.map { it.second }.asBuffer())
return interpolatePolynomials(pointSet)
} }

View File

@ -1,4 +1,4 @@
//package scientifik.kmath.interpolation package scientifik.kmath.interpolation
// //
//import scientifik.kmath.functions.PiecewisePolynomial //import scientifik.kmath.functions.PiecewisePolynomial
//import scientifik.kmath.operations.Ring //import scientifik.kmath.operations.Ring