필터 지우기
필터 지우기

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

조회 수: 3 (최근 30일)
Mihai
Mihai 2014년 11월 14일
답변: Steven Lord 2016년 11월 14일
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

답변 (2개)

Beatrice Balaceanu
Beatrice Balaceanu 2016년 11월 14일
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 2016년 11월 14일
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?

카테고리

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

태그

Community Treasure Hunt

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

Start Hunting!

Translated by