View Source Scholar.Interpolation.Linear (Scholar v0.4.0)

Linear interpolation.

This kind of interpolation is calculated by fitting polynomials of the first degree between each pair of given points.

This means that for points (x0,y0),(x1,y1)(x_0, y_0), (x_1, y_1), the predictive polynomial will be given by: {y=ax+ba=y1y0x1x0b=y1ax1=y0ax0 \begin{cases} y = ax + b \newline a = \dfrac{y_1 - y_0}{x_1 - x_0} \newline b = y_1 - ax_1 = y_0 - ax_0 \end{cases}

Linear interpolation has O(N)O(N) time and space complexity where NN is the number of points.

Summary

Functions

Fits a linear interpolation of the given (x, y) points

Returns the value fit by fit/2 corresponding to the target_x input.

Types

t()

@type t() :: %Scholar.Interpolation.Linear{coefficients: term(), x: term()}

Functions

fit(x, y)

Fits a linear interpolation of the given (x, y) points

Inputs are expected to be rank-1 tensors with the same shape and at least 2 entries.

Examples

iex> x = Nx.iota({3})
iex> y = Nx.tensor([2.0, 0.0, 1.0])
iex> Scholar.Interpolation.Linear.fit(x, y)
%Scholar.Interpolation.Linear{
  coefficients: Nx.tensor(
    [
      [-2.0, 2.0],
      [1.0, -1.0]
    ]
  ),
  x: Nx.tensor(
    [0, 1, 2]
  )
}

predict(model, target_x, opts \\ [])

Returns the value fit by fit/2 corresponding to the target_x input.

Examples

iex> x = Nx.iota({3})
iex> y = Nx.tensor([2.0, 0.0, 1.0])
iex> model = Scholar.Interpolation.Linear.fit(x, y)
iex> Scholar.Interpolation.Linear.predict(model, Nx.tensor([[1.0, 4.0], [3.0, 7.0]]))
Nx.tensor(
  [
    [0.0, 3.0],
    [2.0, 6.0]
  ]
)

iex> x = Nx.iota({5})
iex> y = Nx.tensor([2.0, 0.0, 1.0, 3.0, 4.0])
iex> model = Scholar.Interpolation.Linear.fit(x, y)
iex> target_x = Nx.tensor([-2, -1, 1.25, 3, 3.25, 5.0])
iex> Scholar.Interpolation.Linear.predict(model, target_x, left: 0.0, right: 10.0)
#Nx.Tensor<
  f32[6]
  [0.0, 0.0, 0.25, 3.0, 3.25, 10.0]
>