# fnval

Evaluate spline function

## Description

provides the value `v`

= fnval(`f`

,`x`

)*f*(*x*) at the points in `x`

of the spline function *f* whose description is contained in `f`

.

If `f`

is scalar-valued and univariate, the output `v`

is obtained by replacing each entry of `x`

by the value of *f* at that entry. This is the intent in all other cases, except that, for a `d`

-valued `m`

-variate function, `d`

-vectors replaces `m`

-vectors.

For a univariate *f* :

If

*f*is scalar-valued, then*v*is of the same size as`x`

.If

*f*is`[d1,...,dr]`

-valued, and`x`

has size`[n1,...,ns]`

, then`v`

has size`[d1,...,dr, n1,...,ns]`

, with`v(:,...,:, j1,...,js)`

the value of*f*at`x(j1,...,js)`

, – except that:`n1`

is ignored if it is`1`

and`s`

is`2`

, i.e., if`x`

is a row vector;MATLAB

^{®}ignores any trailing singleton dimensions of`x`

.

For an `m`

-variate *f* with `m>1`

, with *f* `[d1,...,dr]`

-valued, `x`

might be either an array, or else a cell array `{x1,...,xm}`

.

If

`x`

is an array, of size`[n1,...,ns]`

, then`n1`

must equal`m`

, and`v`

has size`[d1,...,dr, n2,...,ns]`

, with`v(:,...,:, j2,...,js)`

the value of*f*at`x(:,j2,...,js)`

, – except that:`d1`

, ...,`dr`

is ignored in case*f*is scalar-valued, i.e., both`r`

and`n1`

are`1`

;MATLAB ignores any trailing singleton dimensions of

`x`

.

If

`x`

is a cell array, then it must be of the form`{x1,...,xm}`

, with`xj`

a vector, of length`nj`

, and, in that case,`v`

has size`[d1,...,dr, n1,...,nm]`

, with`v(:,...,:, j1,...,jm)`

the value of*f*at (`x1`

(`j1`

), ...,`xm`

(`jm`

)), – except that`d1`

, ...,`dr`

is ignored in case*f*is scalar-valued, i.e., both`r`

and`n1`

are`1`

.

If *f* has a jump discontinuity at `x`

, then the value *f*(*x* +), i.e., the limit from the right, is returned, except when `x`

equals the right end of the basic interval of the form; for such `x`

, the value *f*(*x*–), i.e., the limit from the left, is returned.

`fnval(...,'l')`

treats *f* as continuous from the left. This means that if *f* has a jump discontinuity at `x`

, then the value *f*(*x*–), i.e., the limit from the left, is returned, except when `x`

equals the left end of the basic interval; for such `x`

, the value *f*(*x* +) is returned.

If the function is *multivariate*, then the above statements concerning continuity from the left and right apply coordinate wise.

## Examples

## Input Arguments

## Output Arguments

## Algorithms

For each entry of `x`

, the function determines the relevant break-interval or knot-interval and assembles the relevant information. Depending on whether `f`

is in ppform or in B-form, nested multiplication or the B-spline recurrence (see, e.g., [*PGS*; X.(3)]) are then used vector-fashion for the simultaneous evaluation at all entries of `x`

. Evaluation of a multivariate polynomial spline function takes full advantage of the tensor product structure.

Evaluation of a rational spline follows up evaluation of the corresponding vector-valued spline by division of all but its last component by its last component.

Evaluation of a function in stform makes essential use of `stcol`

, and tries to keep the matrices involved to reasonable size.

## Version History

**Introduced in R2006b**