Error using mesh X, Y, Z., and C cannot be complex

5 views (last 30 days)
Mihai
Mihai on 14 Nov 2014
Answered: Steven Lord on 14 Nov 2016
I have this code:
*x1='Bucur',
x2='Mihai'
a=(single(uint8(x1(1)))+single(uint8(x2(2))))/2-60
%b=(numarul de ordine din grupa 92X)/4 (X=1,2,3,4,5,6,7);
b=2/4
%1.1. Sa se determine tangenta, normala si binormala la curba: [b*sin(t); b*cos(t); a*t*sin(t)*cos(t)], t=[-pi,pi],
%in punctele: t1=-2*pi/3, t2=pi/3
syms t
r=[0.5000*sin(t),0.5000*cos(t),25.5000*t.*sin(t).*cos(t)];
%Derivatele lui r:
rprim=diff(r);
rsec=diff(r,2);
rtert=diff(r,3);
r1xr2=cross(rprim,rsec);
rprim2=rprim(1)^2+rprim(2)^2+rprim(3)^2;
rprim_rsec=rprim(1)*rsec(1)+rprim(2)*rsec(2)+rprim(3)*rsec(3);
T=rprim./sqrt(rprim2) %Tangenta
Bvec=cross(rprim,rsec);
Bvec2=Bvec(1)^2+Bvec(2)^2+Bvec(3)^2
k=sqrt(Bvec2/rprim2) %Curbura
N=(rprim2*rsec-rprim_rsec*rprim)/rprim2^2 %Normala
B=cross(T,N) %Binormala
tau=(r1xr2(1)*rtert(1)+r1xr2(2)*rtert(2)+r1xr2(3)*rtert(3))/rprim_rsec^2 %Torsiunea
% tangenta, normala si binormala in t1=-2*pi/3
Tangenta=[subs(T(1),t,-2*pi/3),subs(T(2),t,-2*pi/3),subs(T(3),t,-2*pi/3)]
Normala=[subs(N(1),t,-2*pi/3),subs(N(2),t,-2*pi/3),subs(N(3),t,-2*pi/3)]
Binormala=[subs(B(1),t,-2*pi/3),subs(B(2),t,-2*pi/3),subs(B(3),t,-2*pi/3)]
Curbura=subs(k,t,-2*pi/3)
Torsiunea=subs(tau,t,-2*pi/3)
%tangenta, normala si binormala in t2=pi/3
Tangenta=[subs(T(1),t,pi/3),subs(T(2),t,pi/3),subs(T(3),t,pi/3)]
Normala=[subs(N(1),t,pi/3),subs(N(2),t,pi/3),subs(N(3),t,pi/3)]
Binormala=[subs(B(1),t,pi/3),subs(B(2),t,pi/3),subs(B(3),t,pi/3)]
Curbura=subs(k,t,pi/3)
Torsiunea=subs(tau,t,pi/3)
%1.2. Sa se determine lungimea curbei intre punctele mentionate.
%Definim elemtul de arc ce ne va da lungimea integralei
u=[-2*pi/3:0.001:pi/3];
elemarc=sqrt(rprim(1).^2+rprim(2).^2+rprim(3).^2)
lungimea=trapz(u,subs(elemarc,t,u))
%2.1. Sa se reprezinte grafic elipsoidul:
% r(u,v):=[u;a/b*sqrt(b2-u2)*cos(v);a/b*sqrt(b2-u2)*sin(v)];
% Observatie!
% sqrt(b^2-u^2)=>0. atunci -b<=u<=b.
figure;
u=linspace(-5,5,30);
v=linspace(0,2*pi,30);
[u,v]=meshgrid(u,v);
x=u;
y= 25.5000/0.5000*sqrt(0.5000^2-u.^2).*cos(v);
z= 25.5000/0.5000*sqrt(0.5000^2-u.^2).*sin(v);
mesh(x,y,z)
hold
%2.2. Sa se precizeze planul tangent in punctul u:=0, v:=2*pi/3.
% Ecuatia planului tangent intr-un punct si doua directii date.
syms u v
ruv=[u;36.5/4.75*sqrt(4.75^2-u.^2).*cos(v);36.5/4.75*sqrt(4.75^2-u.^2).*sin(v);];
ru=diff(ruv,1,u)
rv=diff(ruv,1,v)
x=u;
y= 25.5000/0.5000*sqrt(5^2-u.^2).*cos(v);
z= 25.5000/0.5000*sqrt(5^2-u.^2).*sin(v);
syms x1 y1 z1
%Calculam determinantul urmatoarei matrici:
A=[(x1-subs(x,{u,v},{0,2*pi/3})) (y1-subs(y,{u,v},{0,2*pi/3})) (z1-subs(z,{u,v},{0,2*pi/3}))
(subs(ru(1),{u,v},{0,2*pi/3})) (subs(ru(2),{u,v},{0,2*pi/3})) (subs(ru(3),{u,v},{0,2*pi/3}))
(subs(rv(1),{u,v},{0,2*pi/3})) (subs(rv(2),{u,v},{0,2*pi/3})) (subs(rv(3),{u,v},{0,2*pi/3}))]
d=det(A)
%(73*y1)/4 - (73*3^(1/2)*z1)/4 + 5329/4=0
%2.3 Aria elipsoidului
% x^2/b^2+y^2/a^2+z^2/a^2=1
% Suprafata elipsoid:
% S=2*pi*(a^2+c^2/sin(ae)*log((1+sin(ae)/cos(ae))), unde ae=arccos(c/a)
ae=acos(0.5000/25.5000)
S=2*pi*(25.5000^2+0.5000^2/sin(0.5000/25.5000)*log((1+sin(0.5000/25.5000))/cos(0.5000/25.5000)))*
and when i run it it gives me this error:
*Error using mesh X, Y, Z, and C cannot be complex.*
can you help me? Thanks

Answers (2)

Beatrice Balaceanu
Beatrice Balaceanu on 14 Nov 2016
Try using the absolute value of the square root from the equation of the ellipsoid. Instead of typing sqrt(4.75^2-u.^2) , you could use abs(sqrt(4.75^2-u.^2)).

Steven Lord
Steven Lord on 14 Nov 2016
Some of the code you wrote includes:
u=linspace(-5,5,30);
v=linspace(0,2*pi,30);
[u,v]=meshgrid(u,v);
x=u;
y= 25.5000/0.5000*sqrt(0.5000^2-u.^2).*cos(v);
The maximum value u can take is 5. Is sqrt(0.5^2-5^2) real or complex? That will determine whether y is real or complex in that snippet of code.
Did you intend for u to range from -0.5 to 0.5 instead of from -5 to 5?

Categories

Find more on Computational Geometry in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!