使用Mathematica实现Newton-Raphson收敛速度算法(简单高阶多项式)
在这篇报告中,将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]