You can do
% Original spacing
x=[-3,0.1,3];
y=[-3,0.1,3];
[X,Y]=meshgrid(x,y);
Z = 1 ./ (X .* Y);
subplot(2, 1, 1);
surf(X,Y,Z);
xlabel('X', 'FontSize', 20);
ylabel('Y', 'FontSize', 20);
zlabel('Z', 'FontSize', 20);
colorbar;
but you are WAY undersampling this function to see the results, which essentially goes to infinity at X and Y both = 0.
% More fine spacing:
subplot(2, 1, 2);
numPoints = 700;
x = linspace(-3, 3, numPoints);
y = linspace(-3, 3, numPoints);
[X, Y] = meshgrid(x,y);
Z = 1 ./ (X .* Y);
surf(X,Y,Z, 'LineStyle', 'none');
xlabel('X', 'FontSize', 20);
ylabel('Y', 'FontSize', 20);
zlabel('Z', 'FontSize', 20);
colormap(jet);
colorbar;
xlim([-.05,.05]);
ylim([-.05,.05]);
zlim([-300, 1200]);
Your sampling at at the top while mine is at the bottom.