plotting a nonlinear curve in matlab

조회 수: 2 (최근 30일)
MatG
MatG 2015년 8월 11일
댓글: Walter Roberson 2015년 8월 12일
I would like MATLAB to draw the plot for the curve described by the following equation, where for instance (a,b,d) = (-10,-10,-10) is a point in 3D cartesian space and c = 2. x and y are the variables. Are there any thoughts?
x^2(1+1/c.^2) -2ax + y^2(1+1/c.^2) - 2by+(a^2+b^2+d^2-r^2)-2d/c(sqrt(x^2+y^2)) = 0
ps. the equation is actually the intersection of a sphere and cone and can be seen in http://mathworld.wolfram.com/Cone-SphereIntersection.html

채택된 답변

Walter Roberson
Walter Roberson 2015년 8월 12일
If you have the Symbolic Toolbox, you can use solve(). But the solution involves a quartic so the solution will probably be in terms of RootOf(). You need two of the roots. Be careful, two of the roots might be spurious (and might be real-valued) so back-substitute and test before you accept a root at any given location.
For any given x you can use roots() to find the 4 y numerically:
roots([c^4+2*c^2+1, (-4*c^4-4*c^2)*b, (2*c^4+2*c^2)*a^2+(-4*c^4*x-4*c^2*x)*a+(6*c^4+2*c^2)*b^2+(2*d^2-2*r^2+2*x^2)*c^4+(-2*d^2-2*r^2+4*x^2)*c^2+2*x^2, -4*a^2*b*c^4+8*a*b*c^4*x-4*b^3*c^4+((-4*d^2+4*r^2-4*x^2)*c^4-4*c^2*x^2)*b, a^4*c^4-4*a^3*c^4*x+(2*b^2*c^4+(2*d^2-2*r^2+6*x^2)*c^4+2*c^2*x^2)*a^2+(-4*x*c^4*b^2+(-4*d^2*x+4*r^2*x-4*x^3)*c^4-4*x^3*c^2)*a+b^4*c^4+((2*d^2-2*r^2+2*x^2)*c^4+2*c^2*x^2)*b^2+(d^4+(-2*r^2+2*x^2)*d^2+r^4-2*x^2*r^2+x^4)*c^4+(-2*d^2*x^2-2*r^2*x^2+2*x^4)*c^2+x^4])
Be sure to cross-check the values.
For the a, b, c, d that you provide, the smallest positive r for which there are real-valued x and y that are solutions is r = 4*sqrt(5)+2*sqrt(5)*sqrt(2)
  댓글 수: 2
MatG
MatG 2015년 8월 12일
편집: Walter Roberson 2015년 8월 12일
Thanks for the reply Walter.
The code I wrote:
a= -10; b=-10; d=-10; c = 2; r= 50; syms x y z [Sx,Sy,Sz] = solve( [(x-a)^2 + (y-b)^2+(z-d)^2 == (r^2), x^2+y^2 - (c^2)*z^2 == 0],[x,y,z]);
The output is:
??? Error using ==> char Conversion to char from logical is not possible.
Error in ==> solve>getEqns at 165 vc = char(v);
Error in ==> solve at 67 [eqns,vars] = getEqns(varargin{:});
Error in ==> Quadric at 9 [Sx,Sy,Sz] = solve( [(x-a)^2 + (y-b)^2+(z-d)^2 == (r^2), x^2+y^2 - (c^2)*z^2 == 0],[x,y,z]);
Can any one help with this?
Walter Roberson
Walter Roberson 2015년 8월 12일
I do not know at the moment why char is being mentioned. The code you posted is not the same as the code the error message was generated for: the code you posted is all on one line but the error message was for line 9. This does make a difference because you have no ";" between the "syms" and the assignment following in the code you posted.
If your MATLAB version is before (I think it is) R2010b, you might have to rewrite your comparisons A==B as (A)-(B) and allow it to assume the implicit "== 0".

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Calculus에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by