## Documentation Center |

Evaluate function

`v = fnval(f,x) fnval(x,f) fnval(...,'l') `

`v = fnval(f,x) ` and `v
= fnval(x,f)` both provide the value *f*(*x*)
at the points in `x` of the spline function *f* whose
description is contained in `f`.

Roughly speaking, the output `v` is obtained
by replacing each entry of `x` by the value of *f* at
that entry. This is literally true in case the function in `f` is
scalar-valued and univariate, and is the intent in all other cases,
except that, for a `d`-valued `m`-variate
function, this means replacing `m`-vectors by `d`-vectors.
The full details are as follows.

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(1)

`n1`is ignored if it is`1`and`s`is`2`, i.e., if`x`is a row vector; and(2) MATLAB

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

For an `m`-variate *f* with `m>1`,
with *f* `[d1,...,dr]`-valued, `x` may
be either an array, or else a cell array `{x1,...,xm}`.

If

`x`is an array, of size`[n1,...,ns]`say, 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(1)

`d1`, ...,`dr`is ignored in case*f*is scalar-valued, i.e., both`r`and`n1`are`1`;(2) 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(x,f) ` is the same
as `fnval(f,x)`.

`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 coordinatewise.

Interpolate some data and plot and evaluate the resulting functions.

Define some data.

x = [0.074 0.31 0.38 0.53 0.57 0.58 0.59 0.61 0.61 0.65 0.71 0.81 0.97]; y = [0.91 0.96 0.77 0.5 0.5 0.51 0.51 0.53 0.53 0.57 0.62 0.61 0.31];

Interpolate the data and plot the resulting function, `f`.

f = csapi( x, y ) fnplt( f )

Find the value of the function `f` at `x
= 0.5`.

fnval( f, 0.5 )

Find the value of the function `f` at `0,
0.1, ..., 1`.

fnval( f, 0:0.1:1 )

Create a function `f2` that represents
a surface.

x = 0.0001+(-4:0.2:4); y = -3:0.2:3; [yy, xx] = meshgrid( y, x ); r = pi*sqrt( xx.^2+yy.^2 ); z = sin( r )./r; f2 = csapi( {x,y}, z );

Plot the function `f2`.

fnplt( f2 ) axis( [-5, 5, -5, 5, -0.5, 1] );

Find the value of the function `f2` at `x
= -2` and `y = 3`.

fnval( f2, [-2; 3] )

Was this topic helpful?