2012-12-16 123 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好點! –