フィルターのクリア

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 Center および File ExchangeComputational Geometry についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by