2016-09-16 78 views
0

我想有一個2-d色圖的情節,用下面的代碼,但它一直回到我這個錯誤,任何人都可以幫我錯誤:衝浪情節位:Z必須是一個矩陣,而不是一個標量或矢量

x = 0:100:600; 

z = 0:100:600; 

[X,Z] = meshgrid(x,z); 

for z2 = 3:5; 

    for x2 = 3:5 
     E1 = Z(z2); 
     E2 = X(x2); 
     E = E1 +E2; 
    end 
end 



figure; 

surf(X,Z,E,'EdgeColor','None'); 

view(2); 

xlabel('x','fontsize',20); 

ylabel('z','fontsize',20); 

colormap jet; 
+0

你的變量'E'必須具有尺寸'X'和'Z'相同。你想如何計算'E'?它是'Z + X'嗎? – hbaderts

+1

我建議用['surf']的實際語法檢查你的語法(http://www.mathworks.com/help/matlab/ref/surf.html) – excaza

回答

1

對於每個XZ條目,您都需要一個E條目以擁有有效表面,因爲每個x/y位置都需要「高度」。

在你的例子中,E只是一個標量,而XZ包含很多值。好像你想要做的事,如:

E = Z + X; 

surf(X, Z, E, 'EdgeColor', 'none') 

相反,如果你想在一個給定的高度(E)一個平面上,然後讓Z一個矩陣,其中所有值都等於E

surf(X, Z, zeros(size(X)) + E, 'EdgeColor', 'none') 

如果你只是想繪製一個子集,你可以這樣做:

[X, Z] = meshgrid(x(3:5), z(3:5)); 
surf(X, Z, X + Z, 'EdgeColor', 'None') 
+0

非常感謝你回答我!所以我接受了你的建議並繪製了零(size(X))+ E,但問題是matlab只在for循環中取最後一個E值,並將其粘貼在矩陣「零(size(X))」中,因此我得到了一個在任何地方都有完全相同值的情節。因此,我如何用E循環返回的E的每個值繪製E? –

+0

@ LinQiao就像你有循環寫的那樣,每次循環都會覆蓋'E'。你嘗試了我提供的第一個選項嗎?這應該給你每次通過循環的'E'的值(沒有循環) – Suever

+0

是的,但我只想使用X和Z中的第三,第四和第五個元素,這意味着我想使用200,300和400僅用於繪製E.因此,如果我說E = Z(z2)+ X(x2),它仍會返回相同的錯誤?我該怎麼做?非常感謝! –

相關問題