2016-09-16 29 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),它仍会返回相同的错误?我该怎么做?非常感谢! –

相关问题