如何获得吸引分形的牛顿法盆地的颜色梯度

How to get color gradient for Newton Method basin of attraction fractal

我正在使用 MATLAB 通过复平面中的 NxN 网格,x 是实部,y 是虚部。对于此网格上的每个点,我都将其用作牛顿法的起点。根据它收敛到哪个根,它被分配一个数字。该数字与 pcolor 一起用于绘制分形。

它绘制得很好,但是,我还想根据收敛到根所需的时间来绘制颜色暗度。我在使用 pcolor 时遇到了麻烦。我能够为 3 个根获得 3 种颜色,但我不太确定如何添加更多颜色以使其更具描述性。

这是我
之后获取剧情的代码 xp - x 点数组
yp - y 点数组
col - 具有 1、2、3(对应于哪个根)的 NxN 矩阵

% thresholds for color
caxis([1 3]); 

% sets colors Red, Green, Blue
mycolors = [1 0 0; 0 1 0; 0 0 1];
colormap(mycolors);

% real component on x and imaginary component on y
h=pcolor(xp, yp, col');
set(h, 'LineStyle', 'none' );

所以,我怎样才能在 pcolor 中有一个渐变,似乎 pcolor 本身就可以计算出所有的颜色。而 caxis 只允许 2 种颜色的边界。

如果您想查看此程序的完整代码,请告诉我。 谢谢

将达到收敛所需的迭代次数添加为一种颜色。在HSV中定义颜色,并使迭代次数映射到HSV的值S。这将为您提供漂亮且有意义的颜色渐变,而无需真正改变颜色。

伪代码为:

为此,像您一样生成 3 种颜色 mycolors。将它们的颜色 space 更改为 mycolorshsv=rgb2hsv(mycolors);

你现在想要的是为每种颜色生成一堆(你选择的)颜色。

mycolorshsv=repelem(mycolorshsv,N,1);

现在让我们为每种颜色生成 N 渐变。

mycolorshsv(    1:  N,2)=linspace(0,1,N);
mycolorshsv(  N+1:2*N,2)=linspace(0,1,N);
mycolorshsv(2*N+1:3*N,2)=linspace(0,1,N);

你想要例如您获得的最长迭代 maxiter 是最亮的。我们现在需要将您的 col 矩阵从 [1,2,3] 转换为我们当前的范围。为此,只需

col=(col-1)*N+1; % make 1=>1, 2=>N, 3=>2*N;
col=col+iteration_matrix; %max(iteration_matrix) must be maxiter. You may want to normalize so min(iteration_matrix) is 0

现在只需设置 colormap(mycolors);,我会使用 imagesc 而不是 pcolor,但它不太重要。

调整颜色值的范围和限制以获得更好的地图。通常还使用非线性映射,其中将函数 f 应用于迭代值,例如 sigmoid。

这是您可以在维基百科中找到的用于牛顿分形的技术,例如: