Full plot of an implicit equation

조회 수: 18 (최근 30일)
Benjamin Midtvedt
Benjamin Midtvedt 2015년 10월 8일
댓글: Star Strider 2015년 10월 8일
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