Suppose you want to plot a function *g* depending on two variables *x*, *y* over a range where *y* depends on *x*.

Using Mathematica this can be done in essentially one line (not counting the definition of the function *g* and the lower and upper bounds *f1* and *f2*).

```
f1[y_] := y^3 - 1
f2[y_] := y^3 + 1
g[x_, y_] := x^2 + y^2
Plot3D[g[x, y], {x, -2, 2}, {y, -2, 2}, RegionFunction -> Function[{x, y, z}, f1[x] < y < f2[x]]]
```

The output will be like this.

I am not aware of an equivalent function built directly into MATLAB. However, the same functionality can be achieved with some manual coding.

The essential idea is to create a surface in 3D space and plot this using MATLAB’s *surf* function. I put the code in a gist, which you can find/fork/comment here.

The output looks like this.