# Documentation

### This is machine translation

Translated by
Mouseover text to see original. Click the button below to return to the English verison of the page.

# ezsurf

(Not recommended) Easy-to-use 3-D colored surface plotter

`ezsurf` is not recommended. Use `fsurf` instead.

## Syntax

```ezsurf(fun) ezsurf(fun,domain) ezsurf(funx,funy,funz) ezsurf(funx,funy,funz,[smin,smax,tmin,tmax]) ezsurf(funx,funy,funz,[min,max]) ezsurf(...,n) ezsurf(...,'circ') ezsurf(axes_handle,...) h = ezsurf(...) ```

## Description

`ezsurf(fun)` creates a graph of `fun(x,y)` using the `surf` function. `fun` is plotted over the default domain: -2π < `x` < 2π, -2π < `y` < 2π.

`fun` can be a function handle or a character vector (see the Tips section).

`ezsurf(fun,domain)` plots `fun` over the specified `domain`. `domain` must be a vector. See the Algorithms section for details on vector inputs vs axes limit outputs.

`ezsurf(funx,funy,funz)` plots the parametric surface `funx(s,t)`, `funy(s,t)`, and `funz(s,t)` over the square: -2π < `s` < 2π, -2π < `t` < 2π.

`ezsurf(funx,funy,funz,[smin,smax,tmin,tmax])` or `ezsurf(funx,funy,funz,[min,max])` plots the parametric surface using the specified domain.

`ezsurf(...,n)` plots `fun` over the default domain using an `n`-by-`n` grid. The default value for `n` is 60.

`ezsurf(...,'circ')` plots `fun` over a disk centered on the domain.

`ezsurf(axes_handle,...)` plots into the axes with handle `axes_handle` instead of the current axes (`gca`).

`h = ezsurf(...)` returns the handle to a surface object in `h`.

## Examples

collapse all

Plot the function over the domain and . The `ezsurf` function does not plot points where the mathematical function is not defined. These points are set to `NaN` so that they do not plot.

```figure ezsurf('real(atan(x+i*y))')```

Use `surf` to plot the same data without filtering discontinuities.

```figure [x,y] = meshgrid(linspace(-2*pi,2*pi,60)); z = real(atan(x+1i.*y)); surf(x,y,z)```

## Tips

`ezsurf` and `ezsurfc` do not accept complex inputs.

### Passing the Function as a Character Vector

Array multiplication, division, and exponentiation are always implied in the expression you pass to `ezsurf`. For example, the MATLAB® syntax for a surface plot of the expression

`sqrt(x.^2 + y.^2);`

is written as

`ezsurf('sqrt(x^2 + y^2)')`

That is, `x^2` is interpreted as `x.^2` in the character vector you pass to `ezsurf`.

If the function to be plotted is a function of the variables u and v (rather than x and y), then the domain endpoints `umin`, `umax`, `vmin`, and `vmax` are sorted alphabetically. Thus, ```ezsurf('u^2 - v^3',[0,1],[3,6])``` plots u2 - v3 over 0 < u < 1, 3 < v < 6.

### Passing a Function Handle

Function handle arguments must point to functions that use MATLAB syntax. For example, the following statements define an anonymous function and pass the function handle `fh` to `ezsurf`.

```fh = @(x,y) sqrt(x.^2 + y.^2); ezsurf(fh)```

Note that when using function handles, you must use the array power, array multiplication, and array division operators (```.^, .*, ./```) since `ezsurf` does not alter the syntax, as in the case with character vector inputs.

If your function has additional parameters, for example `k` in `myfun`:

```function z = myfun(x,y,k1,k2,k3) z = x.*(y.^k1)./(x.^k2 + y.^k3);```

then you can use an anonymous function to specify that parameter:

`ezsurf(@(x,y)myfun(x,y,2,2,4))`

## Algorithms

`ezsurf` determines the x- and y-axes limits in different ways depending on how you input the domain (if at all). In the following table, `R` is the vector [`xmin`, `xmax`, `ymin`, `ymax`] and `v` is the manually entered domain vector.

Number of domain values specified:Resulting domain vector:
`v = [ ];`
`R = [-2*pi, 2*pi, -2*pi, 2*pi];`
`v = [ v(1) ];`
`R = double([-abs(v),abs(v),-abs(v),abs(v)]);`
`v = [ v(1) v(2) ];`
`R = double([v(1),v(2),v(1),v(2)]);`
`v = [ v(1) v(2) v(3) ];`
`R = double([-v(1),v(2),-abs(v(3)),abs(v(3))]);`
`v = [ v(1) v(2) v(3) v(4) ];`
`R = double(v);`
`v = [ v(1)..v(n) ]; ``n>4`
`R = double([-abs(v(1)), abs(v(1)), -abs(v(1)), abs(v(1))]);`

If you specify a single number in non-vector format (without square brackets, [ ]), `ezsurf` interprets it as the `n`, the number of points desired between the axes `max` and `min` values.

By default, `ezsurf` uses 60 points between the `max` and `min` values of an axes. When the `min` and `max` values are the default values (`R = [-2*pi, 2*pi, -2*pi, 2*pi];`), `ezsurf` ensures the 60 points fall within the non-complex range of the specified equation. For example, $\sqrt{1-{x}^{2}-{y}^{2}}$ is only real when ${x}^{2}-{y}^{2}\le 1$. The default graph of this function looks like this:

`ezsurf('sqrt(1-x^2-y^2)')`

You can see that there are 60 points between the minimum and maximum values for which $\sqrt{1-{x}^{2}-{y}^{2}}$has real values. However, when you specify the domain values to be the same as the default (```R = [-2*pi, 2*pi, -2*pi, 2*pi];```), a different result appears:

`ezsurf('sqrt(1-x^2-y^2)',[-2*pi 2*pi])`

In this case, the graphic limits are the same, but `ezsurf` used 60 points between the user-defined limits instead of checking to see if all those points would have real answers.