Как увеличить масштаб Мандеброта с помощью Matlab, рассчитав больше очков? - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь увеличить набор Мандеброта с помощью Matlab, который основан на сетке сетки.После первого графика вы можете выбрать две точки, которые определяют область масштабирования, и между этими двумя точками создается новая сетка.Эта новая сетка является источником для нового сюжета.Теперь проблема в том, что новый график довольно бесформенный.

Я попробовал эту концепцию (масштабирование путем вычисления итераций в более узкой сетке) для других наборов Джулии, но это тоже не сработало.Мне интересно, является ли это совершенно неправильным понятием сейчас.

a = 0;
func = @(x,c) x.^2 + c;
realAx = linspace(-2,1,1000);
imagAx = linspace(-1,1,1000);
[x,y] = meshgrid(realAx,imagAx);
complex = x + y*1i;

for n = 1:100
   a = func(a,complex);
end

a(abs(a) >= 2) = 0;
contour(abs(a));
[u,v] = ginput(2);

while true

while ~((u(1,1) < u(2,1)) && (v(1,1) < v(2,1)))
    [u,v] = ginput(2);
end

% Get zoom values
figure;

% Create new start coordinates
zoomX = linspace(x(round(u(1,1))),x(round(u(2,1)),1000));
zoomY = linspace(y(round(v(1,1))),y(round(v(2,1)),1000));

[x,y] = meshgrid(zoomX,zoomY);

complex = x + y*1i;
a = 0;

for n = 1:100
    a = func(a,complex);
end

a(abs(a) >= 2) = 0;   
contour(abs(a));
[u,v] = ginput(2);

end

Я ожидаю, что появится более подробная версия области масштабирования.Я был бы очень рад, если бы у кого-нибудь был совет или он предложил бы другую концепцию для увеличения набора Мандельброта.

1 Ответ

0 голосов
/ 19 мая 2019

Я не думаю, что вы на неправильном пути. Однако, как сказал @Cris Luengo, вы округлили не по назначению. Также вы дублируете код без необходимости. Попробуйте это

function Mandebrot

[x,y,a] = genSet([-2 1 -1 1]);

while true
    contour(x,y,abs(a));

    [x,y,a] = genSet(ginput(2));
end
end

function [x,y,a] = genSet(s)
% s is a 1x4 or 2x2 matrix

s = s(:)' ;

spanX = round( abs(diff(s(1:2))) , 1, 'significant' );
spanY = round( abs(diff(s(3:4))) , 1, 'significant' );

s(1:2) = sort(round( s(1:2) , -floor(log10(spanX)) ));
s(3:4) = sort(round( s(3:4) , -floor(log10(spanY)) ));

a = 0;
[x,y] = meshgrid( linspace( s(1) , s(2) , 1000) ,linspace( s(3) , s(4) , 1000) );
complex = x + y*1i;

for n = 1:100
    a = func(a,complex);
end

a(abs(a) >= 2) = 0;

end

function z = func(x,c)
    z = x.^2 + c;
end
...