# Load packages

```
library(tidyverse)
library(mosaic)
library(plotly)
```

# Gimme a function

Say, you have some function such as

\[ f(x) = x^2+z^2 \]

In more R-ish:

`f <- makeFun(x^2 + z^2 ~ x & z)`

And you would like to plot it.

Observe that this function has *two* input (independent) variables, \(x\) and \(z\), plus one output (dependent) variables, \(y\).

The thing is, you’ll need to define the values for a number of output values for \(y\), as defined by the function.

# Define a grid

First, we define a grid for the input variables.

`x <- y <- seq(-5, 5, length = 20)`

# Compute the function value for each combination of the input variables

Then we compute the \(y\) value for each combination of \(x\) and \(y\), this can be achieved using `outer()`

. That function applies some function on each combination of \(x\) and \(y\), and that’s just what we would like to achieve.

`z <- outer(x,y, FUN = f)`

# Plot in Base R

Now, let’s plot:

`persp(x, y, z)`

# Plot using Plotly

`plot_ly(x = x, y = y, z = z, type = "surface")`

# Bonus: Contour plot in plotly

`plot_ly(x = x, y = y, z = z, type = "contour")`