2016-01-17 6 views
1

Я хочу нарисовать контурный участок meshc, но контур не нарисован так, как я хочу.Проблемы сетки сетки в Matlab

x = linspace(P(1),P(2)); %// x axis 
y = linspace(P(3),P(4)); %// y axis 
[X1 Y1] = meshgrid(x,y); %// all combinations of x, y 
%[X1,Y1] = meshgrid(1:.125:3); 
Z1 = mvnpdf([X1(:) Y1(:)],mu,sigma); %// compute Gaussian pdf 
Z2 = reshape(Z1,size(X1)); %// put into same size as X, Y 
meshc(X1,Y1,Z2); 
%axis([1 3 1 3 -5 10]); 
axis([P(1) P(2) P(3) P(4) -5 10]) 

Код выше рисует это так:

meshc plot 1

Но я хочу, чтобы это было так:

enter image description here

Как я мог это сделать?

+1

Участок, показанный на вашем «желаемом» изображении, ничем не отличается от многомерного гауссова - больше похож на сумму нескольких взвешенных многомерных гауссиан. Вы не можете построить его, если вы вычисляете значения, используя только один вызов 'mvnpdf'. Я думаю, ваш вопрос не содержит каких-то важных подробностей о том, чего вы на самом деле хотите достичь. – mikkola

+0

Я изменил вторую картинку. Моя проблема заключается в положении контура. Я хочу, чтобы это было далеко от гаусса, как на втором рисунке –

ответ

0

Чтобы получить желаемое расстояние между участками, вы можете просто вычесть некоторое количество из матрицы Z2. Я не могу понять, почему Matlab делит участки таким образом, но это работает:

P = [1 3 1 3]; 
mu = [2 1.1]; 
sigma = [.09 .003; ... 
     .003 .002]; 

x = linspace(P(1),P(2)); %// x axis 
y = linspace(P(3),P(4)); %// y axis 
[X1 Y1] = meshgrid(x,y); %// all combinations of x, y 
Z1 = mvnpdf([X1(:) Y1(:)],mu,sigma); %// compute Gaussian pdf 
Z2 = reshape(Z1,size(X1)); %// put into same size as X1, Y1 

Z2 = Z2 - 0.01; 

meshc(X1,Y1,Z2); 

axis([P(1) P(2) P(3) P(4) -5 10]) 

Multivariate distribution and its contour plot

Может быть, вы должны играть с другими числами, чтобы получить желаемый результат. В моем примере я вычитал небольшое число, чтобы избежать изменения диапазона PDF-графики.

Смежные вопросы