2012-12-16 122 views
1

特定的功能我有这样的功能:如何绘制在Matlab

enter image description here ,我想绘制它,我想结果是一个周期函数...

我试过,但只拿到一个点:(

x1=-50:0.1:50; 
x2=-50:0.1:50; 
plot(cos(sqrt(power(x1,2)+power(x2,2)))/(power(x1,2)+power(x2,2))); 

这里是我的问题,什么是正确的方法是什么?
得到任何帮助。

回答

2
  1. 这是一个3D图,因为有两个输入x1x2。所以你必须使用plot3(或者@EitanT指出的surf,或任何3d绘图功能)。

  2. 你现在只绘制对(-50;-50)(-49.9;-49.9),...,(50;50),因为你从两个向量开始,你可能要覆盖所有的组合。因此,使用meshgrid(更高的层面,也有ndgrid):

    x1=-50:0.1:50; 
    x2=-50:0.1:50; 
    [X1, X2] = meshgrid(x1,x2); 
    
  3. 现在你可以使用矩阵运算,通过this link阅读,你会看到,你需要的elementwise操作:的a.*b代替a*b等。 power(a,b)已经是元素操作(与a.^b相同),矩阵等效项为mpower(a,b)a^b

    f = cos(sqrt(power(X1,2)+power(X2,2)))./(power(X1,2)+power(X2,2)+1); 
    plot3(X1,X2,f); 
    
+0

非常感谢 – zhilevan

4

您需要将其绘制为3-D曲面。例如,使用surf

[X1, X2] = meshgrid(-5:0.25:5, -5:0.25:5); 
F = cos(sqrt(X1 .^ 2 + X2 .^ 2)) ./ (X1 .^ 2 + X2 .^ 2 + 1); 
surf(X1, X2, F) 

注意两件事情:

  1. 您在分母忘了 “+1”。
  2. 我减少了x1和x2坐标的范围,以获得更好的可视化效果。

如果黑色边缘看起来讨厌,似乎杂乱的情节,你可以通过禁用EdgeColor属性中删除的边缘线(如用户夏嘉曦指出):

surf(X1, X2, F, 'EdgeColor', 'None') 

最终的结果应该是这样的:

enter image description here

+0

非常感谢你 – zhilevan

+2

@EitanT - 关于x1和x2的分辨率,可以关闭边缘的颜色避免了 “全黑” 面:'冲浪(X1,X2,F,“EdgeColor ','none')' – Shai

+0

@Shai好点! –