我想在MATLAB中得到这个,但是我没有成功!那里有MATLAB大师吗?
alt text http://www.freeimagehosting.net/uploads/94020b921d.gif
我想简单的命令应该可行,可能不需要程序。
错误,我得到的是;
>> t = -pi:0.1:pi;
>> r = ((sin(t)*sqrt(cos(t)))*(sin(t) + (7/5))^(-1)) - 2*sin(t) + 2 ;
??? Error using ==> mtimes
Inner matrix dimensions must agree.
更新
即使这样也行不通!
>> t = -pi:0.1:pi;
>> r = ((sin(t).*sqrt(cos(t))).*(sin(t) + (7/5)).^(-1)) - 2*sin(t) + 2 ;
>> plot(r,t)
??? Error using ==> plot
Vectors must be the same lengths.
答案 0 :(得分:5)
这是一个有效的解决方案:
t = -pi:0.1:pi;
r = ((sin(t).*sqrt(abs(cos(t))))./(sin(t) + (7/5))) - 2*sin(t) + 2 ;
polar(t,r)
修改强>
polar
和ezpolar
在剧情的可自定性方面非常有限。如果OP想要重现问题中的图片,他们应该转换为笛卡尔坐标并使用情节,如此
t = -pi:0.1:pi;
r = ((sin(t).*sqrt(abs(cos(t))))./(sin(t) + (7/5))) - 2*sin(t) + 2 ;
[x,y] = pol2cart(t,r);
plot(x,y)
答案 1 :(得分:3)
尝试将*
替换为.*
以进行分量乘法。也可以尝试plot(r,t)
而不是plot(s,t)
。
答案 2 :(得分:3)
我想知道plot
是否是正确的命令。我试过这个:
ezpolar('((sin(t).*sqrt(cos(t))).*(sin(t) + (7/5)).^(-1)) - 2*sin(t) + 2')
几乎得到了OP正在寻找的图表。我怀疑OP可能会在polar
时做得更好。尝试plot(r,t)
给了我一个(x,y)空格的波形和一个警告:
Warning: Imaginary parts of complex X and/or Y arguments ignored
答案 3 :(得分:2)
试试这个:
>> t = -pi:0.1:pi;
>> r = ((sin(t).*sqrt(cos(t))).*(sin(t) + (7/5)).^(-1)) - 2*sin(t) + 2 ;
您需要使用.*
和.^
告诉MATLAB进行分量乘法和取幂。否则,MATLAB将尝试进行矩阵乘法(对于.*
)或矩阵求逆(对于.^(-1)
)。
答案 4 :(得分:1)
如果要在矩阵中的每个项目上运行复杂的公式,则直接的方法是使用 arrayfun 函数。
% Define the formula that is applied to each element
f = @(t) ((sin(t)*sqrt(abs(cos(t))))*(sin(t) + (7/5))^(-1)) - 2*sin(t) + 2;
t = -pi:0.1:pi;
% Apply the formula
r = arrayfun(f, t);
plot(abs(t), r);
这给了你一个想法,尽管你可能需要修改公式。例如,不应该是sqrt( abs (cos(t)))?
答案 5 :(得分:1)
x1=linspace(-1,0,50);
y1=-x1+sqrt(3-3*x1.^2);
y2=-x1-sqrt(3-3*x1.^2);
plot(x1,y1,'r');hold on;
plot(-x1,y1,'r');
title ('MY HEART');
plot(-x1,y2,'r');
plot(x1,y2,'r');hold off;
答案 6 :(得分:0)
theta = 0:.1:2*pi;
r = (sin(theta).*sqrt(abs(cos(theta))))./(sin(theta) + (7/5))-2.*sin(theta)+2;
polar(theta, r,'-r');