Квадрати c поверхностное изображение в Октаве - PullRequest
0 голосов
/ 09 февраля 2020

Мне был назначен проект, который требует, чтобы я построил несколько квадратичных c поверхностей. Я старался быть усердным и загружал некоторые программы, чтобы мои графики выглядели лучше, чем на других бесплатных онлайн-ресурсах. Я решил попробовать Octave и посмотреть, смогу ли я заставить его работать, но столкнулся с проблемой. При попытке построить:

enter image description here

Я проверил некоторые учебные пособия, но до сих пор не смог точно определить свою ошибку. Это код, который я использовал:

clear;

x = [-3:1:3];
y = x;

[xx,yy] = meshgrid(x,y);

zz=sqrt(-9*xx.^2+9*yy.^2);

figure

mesh(xx,yy,zz);

Любые предложения приветствуются.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2020

Ошибка, выдаваемая в командное окно для вашего сценария:

   error: mesh: X, Y, Z, C arguments must be real
   error: called from
       mesh at line 61 column 5
       blah at line 15 column 1

Поскольку вы x и y действительны, воображаемые образы приходят из квадрата - root числа меньше 0. Глядя на ваше уравнение, это произойдет для любой пары (x, y), где x больше y.

Самое простое решение - установить все комплексные числа (значения от zz с ненулевой мнимой частью) до 0 (который будет отображать значение) или NaN (который не будет отображать значение. Рассмотрим этот сценарий (ваш плюс фильтрация):

clear;

x = -3:0.1:3;
y = x;

[xx,yy] = meshgrid(x,y);

zz=sqrt(-9*xx.^2+9*yy.^2);

figure

% Set all zz with nonzero imaginary part to NaN
zz(imag(zz)~=0) = NaN;

% % Set all zz with nonzero imaginary part to 0
% zz(imag(zz)~=0) = 0;

mesh(xx,yy,zz);

Mesh plot of the surface.

0 голосов
/ 10 февраля 2020

Я бы предпочел это:

x = -3:0.1:3;
y = x;    
[xx,yy] = meshgrid(x,y);  
zz=sqrt(-9*xx.^2+9*yy.^2);   % zz will have both + and - 

figure        
% zz = abs(zz) ; 

mesh(xx,yy,abs(zz));
hold on
mesh(xx,yy,-abs(zz));
...