MATLAB心脏曲线

时间:2010-04-27 09:53:42

标签: matlab

我想在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.

7 个答案:

答案 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)

修改

polarezpolar在剧情的可自定性方面非常有限。如果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');