kmath
kmath copied to clipboard
Add PiecewiseBicubicSplineInterpolatingFunction
trafficstars
Please add function (for multiplatform) like org.apache.commons.math3.analysis.interpolation.PiecewiseBicubicSplineInterpolatingFunction.
Purpose: To be able to interpolate points for surface given by points matrix there is a need for such function.
It would be best if you could clarify what use case do you have. What input and output data formats and what additional parameters do you have. It it is quite easy to replicate CM behavior. But maybe we could do better.
Here is a peace of code that uses interpolation function (Apache Commons Math implementation):
import org.apache.commons.math3.analysis.interpolation.PiecewiseBicubicSplineInterpolatingFunction
import org.apache.commons.math3.exception.OutOfRangeException
class InterpolatingSurface(
xPoints: DoubleArray,
yPoints: DoubleArray,
zPoints: Array<DoubleArray>
) : Surface {
init {
require(zPoints.size == xPoints.size)
require(zPoints.all { it.size == yPoints.size })
}
private val interpolator = PiecewiseBicubicSplineInterpolatingFunction(
/* x = */ xPoints,
/* y = */ yPoints,
/* f = */ zPoints
)
override fun z(x: Double, y: Double): Double {
return try {
interpolator.value(x, y)
} catch (_: OutOfRangeException) {
Double.NaN
}
}
}