Skip to content

math::interpolation

The interpolation module provides bilinear and trilinear interpolation on flat 1D-stored grids. Query points are passed as an Nx2 or Nx3 Mat<number>; the result is a flat Array<number> with one interpolated value per query point.

use std::math::interpolation

interpolation::bilinear(grid, shape, lo, hi, points) -> Array<number>

Section titled “interpolation::bilinear(grid, shape, lo, hi, points) -> Array<number>”

Bilinear interpolation on a flat 2D grid stored in [y][x] order.

ParameterTypeDescription
gridArray<number>Flat grid values, length ny * nx
shapeArray<int>[ny, nx]
loArray<number>Lower bounds [y_lo, x_lo]
hiArray<number>Upper bounds [y_hi, x_hi]
pointsMat<number>Nx2 matrix of query points [x, y]

interpolation::trilinear(grid, shape, lo, hi, points) -> Array<number>

Section titled “interpolation::trilinear(grid, shape, lo, hi, points) -> Array<number>”

Trilinear interpolation on a flat 3D grid stored in [z][y][x] order.

ParameterTypeDescription
gridArray<number>Flat grid values, length nz * ny * nx
shapeArray<int>[nz, ny, nx]
loArray<number>Lower bounds [z_lo, y_lo, x_lo]
hiArray<number>Upper bounds [z_hi, y_hi, x_hi]
pointsMat<number>Nx3 matrix of query points [x, y, z]
use std::math::interpolation
// 2x2 grid: values at corners of unit square
let grid = [0.0, 1.0, // y=0 row
2.0, 3.0] // y=1 row
let pts = mat(1, 2, [0.5, 0.5]) // single query point at (0.5, 0.5)
let vals = interpolation::bilinear(grid, [2, 2], [0.0, 0.0], [1.0, 1.0], pts)
// vals[0] == 1.5 (interpolated center value)