# Plot the graph of a discontinuous function of two variables using Maple

I want to plot the level curve of $xyz = 1$;

According to wolfram alpha the plot should look like this;

But instead I end up with;

Here's my Maple code. I'm sure it's because the function is not defined at $x, y = 0$ How do I fix it?

plot3d(1/(x.y), x = -1 .. 1, y = -1 .. 1)


This can be done in a single call to implicitplot3d.

plots:-implicitplot3d(x*y*z=1, x=-1..1, y=-1..1, z=-200..200,
grid=[40,40,40], style=surface);


And the particular look & feel can be adjusted as desired, via options. Eg.,

plots:-implicitplot3d(x*y*z=1, x=-1..1, y=-1..1, z=-200..200,
grid=[40,40,40], style=surfacecontour,


I find that manual rotation of a 3D plot having a higher grid resolution performs better with style=surfacecontour than with style=surface.

You can restrict the vertical range by view=-50..50. It also helps to set a grid with even number of data points, so that $(0,0)$ is not one of them. Like this:

plot3d(1/(x*y),x=-1..1,y=-1..1,view=-50..50,grid=[30,30]);


However, the picture is still isn't as clear, because Maple insists on drawing the vertical asymptotes:

For 2D plots these extra lines can be avoided with discont=true, but for 3D plots the workaround is to plot in each quadrant and combine the plots.

with(plots):
display(plot3d(1/(x*y),x=0.1..1,y=0.1..1, grid=[20,20]), plot3d(1/(x*y),x=0.1..1,y=-1..-0.1, grid=[20,20]), plot3d(1/(x*y),x=-1..-0.1,y=0.1..1, grid=[20,20]), plot3d(1/(x*y),x=-1..-0.1,y=-1..-0.1, grid=[20,20]));


Ugly code, but better plot.

Or, combining both approaches,