Documentation |
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] )