2014-10-10 4 views
2

Я хотел сделать следующую функцию в MATLAB:
f(x,y) = sqrt(1-x^2-4y^2) ,(if (x^2+4*y^2) <=1)ошибка отображения 3-D Plot в 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 поэтому синтаксиса, как вы используете его здесь неправильно.

Вместо создания х-сетки и у-сетки:

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

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

Что касается, если заявление, то лучше изменить значения перед построением графика:

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

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

Будучи новым для MatLab, я действительно дон Не понимаю, почему мы создаем x-сетку и y-сетку здесь ... Я не понял ... не могли бы вы помочь с этим. – coool

+1

@coool. Это не Matlab конкретным. «Поверхность» должна определяться как значение Z по сравнению с двумерной плоскостью координат. Вы не можете определить поверхность на строке. Посмотрите документацию ['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

+1

@coool для поверхностного графика, который вы хотите вычислить для z на каждом (x, y). Это означает, что z будет матрицей. Чтобы сделать это, используя умножение по типу '. *', Вам нужно иметь матрицы для x, y. 'meshgrid' создает матрицы для ваших векторов' x' и 'y'. Фактически, он просто повторяет вектор x в направлении y и наоборот. Пожалуйста, посмотрите ссылку @Hoki, упомянутую в комментариях. – Nick