在这篇报告中,将Newton-Raphson的收敛算法应用于:
GenNewtonCounter = Compile[{{z, _Complex}, {n, _Integer}},
Module[{counter = 0, zold = N[z] + 1, znew = N[z], k, m},
If[Abs[znew] < 10^(-9), znew = 10^(-9) + 0.0*I, znew = znew];
For[counter = 0,
(Abs[zold - znew] > 10^(-6)) && (counter < 85), counter++,
(zold = znew; znew = zold*(1 - 1/n) + 1/(n*zold^(n - 1)))
];
For[k = 0,
(Abs[znew - Exp[2*Pi*I*k/n]] > 0.1) && (k < n), k++,
counter = counter + 85
];
counter
]
];
GenNewtonArray[{{remin_, remax_}, {immin_, immax_}}, steps_, n_] :=
Table[GenNewtonCounter[x + y I, n],
{y, immin, immax, (immax - immin)/(steps - 1)},
{x, remin, remax, (remax - remin)/(steps - 1)}
]
GenNewtonPlot[data_, n_, colorfunc_] :=
ListDensityPlot[data,
AspectRatio -> 1, Mesh -> False, Frame -> False,
PlotRange -> {0, 85*n}, ColorFunction -> (colorfunc[n, #] &)
]
tr[x_] = Which[x < 0, 0, x > 1, 1, True, x];
GenNewtonColorOne[n_, x_] :=
If[x < 1/n, Hue[2*n*x], RGBColor[0, 0, 0]];
GenNewtonColorSeven[n_, x_] :=
Which[x < 0.14285, RGBColor[tr[(3) 7 x], tr[(3) 7 x], tr[(3) 7 x]],
0.14286 < x < 0.28571,
RGBColor[tr[(3) (7 x - 1)], tr[(3) (7 x - 1)], 0],
0.28572 < x < 0.42857,
RGBColor[0, tr[(3) (7 x - 2)], tr[(3) (7 x - 2)]],
0.42858 < x < 0.57142,
RGBColor[tr[(3) (7 x - 3)], 0, tr[(3) (7 x - 3)]],
0.57143 < x < 0.71428, RGBColor[tr[(3) (7 x - 4)], 0, 0],
0.71529 < x < 0.85714, RGBColor[0, tr[(3) (7 x - 5)], 0],
0.85715 < x < 1, RGBColor[0, 0, tr[(3) (7 x - 6)]],
True, RGBColor[0, 0, 0]
]
genregion = GenNewtonArray[{{-2, 2}, {-2, 2}}, 1000, 7];
GenNewtonPlot[genregion, 7, GenNewtonColorOne]
GenNewtonPlot[genregion, 7, GenNewtonColorSeven]