2014-10-10 85 views
2

3 d剧情,我想得出以下功能的MATLAB:
f(x,y) = sqrt(1-x^2-4y^2) ,(if (x^2+4*y^2) <=1)错误显示在MATLAB

 = 0     ,otherwise. 

我写在MATLAB下面的代码:

x=0:0.1:10; 
    y=0:0.1:10; 
    z=x.^2+4*y.^2; 
    if (z <=1) 
    surf(x,y,z); 

    else 
    surf(x,y,0); 
    end 

但显示以下错误:
surface: rows (Z) must be the same as length (Y) and columns (Z) must be the same as length (X)
我该如何避免此错误...

回答

5

我想你应该真的行

x = 0:0.1:10; % define x-array 1x101 
y = 0:0.1:10; % define y-array 1x101 
z = x.^2+4*y.^2; % define z-array 1x101 

然而,surf需要一个矩阵输入z因此语法,你使用它在这里是不正确检查你正在做什么...线。

相反,创建一个x栅格和y栅格:

[xx, yy] = meshgrid(x, y); % both being 101x101 matrices 

zCheck = xx.^2+4*yy.^2; % 101x101 
zz  = sqrt(1-xx.^2-4*y.^2) 

关于if语句,你最好绘制之前改变数值:

zz(zCheck > 1) = 0; % replace the values larger than 1 by zero (use logical indexing) 

figure(100); 
surf(x, y, zz); 
+0

作为新的MATLAB的,我真不不明白为什么我们在这里创建x-grid和y-grid ....我没有得到它...可以请这个帮忙.. – coool 2014-10-10 08:31:13

+1

@coool。它不是特定于Matlab的。 “表面”必须被定义为相对于坐标的2D平面的值Z.你不能在'line'上定义表面。查看['surf'](http://www.mathworks.co.uk/help/matlab/ref/surf.html)文档,还可以阅读[创建网格和曲面图](http ://www.mathworks.co.uk/help/matlab/learn_matlab/creating-mesh-and-surface-plots.html) – Hoki 2014-10-10 08:35:23

+1

@coool对于要计算每个(x,y)z值的曲面图)坐标。这意味着z将是矩阵。为了使用元素方式乘法运算''*',你需要有x,y的矩阵。 'meshgrid'为你的'x'和'y'向量创建矩阵。实际上,它只是在y方向重复x矢量,反之亦然。请看看评论中提到的@Hoki链接。 – Nick 2014-10-10 08:37:58