2014-10-10 89 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