Note: This page has been translated by MathWorks. Please click here

To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

Evaluate spline 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?