Full plot of an implicit equation

12 次查看(过去 30 天)
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?

采纳的回答

Star Strider
Star Strider 2015-10-8
编辑:Star Strider 2015-10-8
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!
  5 个评论
Benjamin Midtvedt
Benjamin Midtvedt 2015-10-8
I solved it by plotting both xv,yv and yv,xv. Not the best way, but it works. Thanks!
Star Strider
Star Strider 2015-10-8
My pleasure!
I agree it may not be the best way in a more inclusive perspective, but you were given what I consider to be a somewhat difficult problem. I imagine the problem was presented to you specifically so that you would see the symmetry properties and use them to your advantage.
In a non-symmetrical sort of problem, you would either have to use contour or do a rather exhaustive search for the zeros of the function. That is definitely not something I would want to do, especially if contour had already solved the programming problem for me.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Programming 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by