MATLAB: Full plot of an implicit equation

implicitplot

I have the equation;
x^2+y^2=1+4.5*sin^2(xy)
I want to plot this equation, and was explicitly told to use the plot function, instead of ezplot or contour. Since the equation is implicit, I tried using fzero to solve for a set of x.
f=@(x,y) x.^2+y.^2-1-4.5.*sin(x.*y).^2;
xv=linspace(-3,3);
yv=zeros(size(xv));
for i=1:length(xv);
yv(i)=fzero(@(y) f(xv(i),y), 0);
end
plot(xv, yv)
However, this obviously only gives one y for each x, while the equation can be satisfied by several y values for some x.
How do I add these additional solutions, and add them to my plot?

Best Answer

One option is to do a second fzero call in each iteration, with a different initial parameter estimate:
f=@(x,y) x.^2+y.^2-1-4.5.*sin(x.*y).^2;
xv=linspace(-3,3);
yv=zeros(size(xv));
for i=1:length(xv);
yv(i,1)=fzero(@(y) f(xv(i),y), 1);
yv(i,2)=fzero(@(y) f(xv(i),y), -1);
end
plot(xv, yv)
This produces an additional negative mirror image of the single-call loop. You could expand on this with other initial parameter estimates (perhaps ±5, ±10, &c.) to see if you got other results. Experiment with it!