2016-08-24 1 views
0

Я пытаюсь сделать график с плотностью нулей случайных квадратичных мононых многочленов в комплексной плоскости. На самом деле, я замышляю! Но есть лишь небольшая деталь, которая меня подслушивает: значения осей не совпадают с точками графика. Вот мой код.Отображение правильных значений осей при построении графика с плотностью в Matlab

n=2; 
p = [1 random('Uniform', -1, 1, [1,n])] 
roots(p) 
z = zeros(0); 
n = 2; 
for j=1:10000 
    p = [1 random('Uniform', -1, 1, [1,n])]; 
    R = roots(p); 
    z = [ z, R.' ]; 
end 
Re = real(z); 
Im = imag(z); 
[values, centers] = hist3([Im(:) Re(:)],[1000 1000]); 
imagesc(centers{:}, values,[0,10]); 
colorbar 
axis equal 
axis xy 
cmap = summer(max(values(:))); 
cmap(1:1,:) = 0; 
colormap(cmap); 

Теперь вот сюжет, сгенерированный этим кодом.

plot

Вы можете попробовать этот код и проверить макс (Re) и макс (Im), которые соответствуют максимальным значениям действительной части (ось х) и мнимой части (ось у). У меня max (Re) = 1.6076 (всегда что-то близкое к 1.5) и max (Im) = 0.9993 (это всегда что-то близкое к 1). Эти значения не соответствуют сюжету, который выглядит как обратное.

Если я попробую функцию рассеяния (потеря плотности и все приятное изображение), у меня есть правильные значения. Следующая команда генерирует рисунок ниже.

scatter(Re(1,:), Im(1,:),'.') 

scatter

Это ясно показывает, что первый участок на самом деле (не поворачивается, как я думал первый) правильно, для значений осей, за исключением. Мне нужна помощь, чтобы исправить это. Благодарю.

PS: Команды, чтобы сделать этот участок, я получил в ответ here. Обратите внимание на комментарии там. Я явно попросил решение этой проблемы и получил ее. Данное решение действительно работало в некоторых случаях, но не удалось в этом, я не знаю, почему.

ответ

1

Я считаю, что вы ищете должны быть:

imagesc(centers{[2,1]}, values,[0,10]); 

Incidently, вы не заметили проблему в другом посте, потому что примеры изображений, все случается быть более или менее квадратным.

+0

Благодарим вас за ответ. Я сделал поиск и команду ** imagesc (min (Re) :. 00001: max (Re), min (Im) :. 00001: max (Im), значения, [0,10]); ** работал просто отлично. Вы знаете, в чем разница между этой командой и вашей? – Integral

+0

В image/imagesc будут использоваться только x (1)/y (1) и x (end)/y (end), остальные из этих векторов совершенно не имеют значения. то есть x может быть просто [min (Re) max (Re)], и вы все равно получите тот же результат. Пока вы ставите Re как x и Im как y, вам хорошо идти. Использование центров - это всего лишь способ гарантировать, что вы получите ту же самую нижнюю/верхнюю границу, что и использование hist3, не беспокоясь о том, как они фактически вычисляются по hist3. –

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