使用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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值