2013-02-01 60 views
0

我试图绘制此功能:绘制MATLAB中的复杂函数(极坐标)?

t=linspace(0,2*pi,100); 
a=input('a= '); 
b=input('b= '); 
c=input('c= '); 
k = a*(1-(sin(3*t)).^(2*b))+c; 
polar(t,k) 

% a=2.6 
% b=0.4 
% c=5 

每一次,我得到以下信息:

警告:忽略复杂的X和/或Y参数的虚部。

我已经试过pol2cart方法,例如:

t=linspace(0,2*pi,100); 
a=input('a= '); 
b=input('b= '); 
c=input('c= '); 
k = a*(1-(sin(3*t)).^(2*b))+c; 
[x,y] = pol2cart(t,k); 
plot(x,y) 

我再次得到了同样的消息。 我试图将其转换为球形坐标,但没有奏效。我也尝试了在论坛答案中建议的arrayfun方法,但它没有起作用。 有人可以帮我吗? 谢谢!

回答

2

你的问题是在你的功能。 k包含虚数,因为这样:

sin(3*t).^(0.8) 

如果你想确保它不包含虚数,则需要增加b。底线是,修正你的公式。我只能假设你的意思是这样,但可能有其他解决方案。本质上,我认为你的意思是采取1罪的指数,而不是罪。

k=a*((1-sin(3*t)).^(2*b))+c; 

这给出了如下图(从八度,但它应该是相同的)

enter image description here

我想通了这一点通过`图(K)。如果k包含虚数,它将绘制真实与虚构分量。如果它纯粹是真实的,它将绘制线条与时间的关系。

+2

非常感谢,你说得对,问题出在我的公式上。我按照你的建议修复了它,并且它完美地工作。 –