2016-06-01 3 views
1

私は粒子の楕円軌道をプロットしようとしていますが、私のMATLABコードが動いて、虚数値をプロットしようとしていることを警告してくれます。このエラーを取り除くにはどうしたらいいですか? 次のように私のMatlabのコードは次のとおりです。matlabの複素値の楕円をプロットする

% plot of trajectory of the particle in flexural gravity wave 
    U =5; 
    t=1; 
    y1=0; 
    h=50; 
    k=2*pi/100; 
    w=pi; 
    X= (-80*pi:pi:80*pi); 
    Y= (-80*pi:pi:80*pi); 
    H=1; 
    A= (H/2)*cosh(k*(h+y1))/sinh(k*h); 
    B= (H/2)*sinh(k*(h+y1))/sinh(k*h); 
    Y = B.* ((1-((X-U*t)./A).^2).^(1/2)); 
    plot(X,Y); 
    xlabel('X'); 
    ylabel('Y'); 

警告MathWorks社のMATLABショーは次のとおりです。 警告: を無視し、複雑なXおよび/またはY引数の虚部はこれで私を助けてください。

答えて

1

plot(X,Y);plot(X,imag(Y))と変更してください。

実際の値の場合は、plot(X,real(Y))です。

複素数の大きさに興味がある場合はplot(X,abs(Y))です。

+0

ありがとうございます!しかし、私は実際の価値をプロットしようとしています。 –

+0

その場合、plot(X、real(Y)) – KKS

+0

しかし、あなたの実際のYの値はすべてゼロであり、plot(X、Y)を使っていても、matlabは自動的に警告のみで実際の値をプロットします。 – KKS

0

私は私の質問に答えました。 x = a cos(t)とy = a sin(t)を使って、楕円の一般的な座標を使ってプロットすることができます。それは本当にうまくいった。

% plot of trajectory of the particle in flexural gravity wave 
U = 5; 
t = 1; 
y1 = 0; 
h = 50; 
k = 2*pi/100; 
w = pi; 
x0 = U*t; 
y0 = 0; 
H = 1; 
A = (H/2)*cosh(k*(h+y1))/sinh(k*h); 
B = (H/2)*sinh(k*(h+y1))/sinh(k*h); 
z = -2*pi:0.01:2*pi; 
X = x0 + A*cos(z); 
Y = y0 + B*sin(z); 
plot(X,Y); 
xlabel('X'); 
ylabel('Y');