有两种方式观察多项式的根随着参数变化:(1)直接制作一个小的动态视频;(2)绘制所有根形成的痕迹(locus)。
制作动态视频:
(*Arg-plane plotting routine with plotting range and point size*)
CRPlot[z_List, range_List, size_] :=
Module[{r},
r = Map[{Re[#], Im[#]} &, z];
ListPlot[r, PlotStyle -> PointSize[size],
AspectRatio -> 1, PlotRange -> {range, range},
PlotRegion -> {{0.05, 0.95}, {0.05, 0.95}}
]
]
(* function, to extract complex roots of a polynomial equation*)
PolySolver[poly_] := z /. NSolve[poly == 0, z]
(*pylynomial: a simple quintic*)
mypoly[z_, \[Lambda]_] := z^5 + z^3 + z^2 + z + \[Lambda];
(*to create a movie*)
Manipulate[
CRPlot[PolySolver[mypoly[z, \[Lambda]]], {-2, 2}, 0.05],
{\[Lambda], 0, 4, 0.2}
]
这里有个好处:可以直接观察到根的分布随着参数改变是怎样变化的。
绘制Root Locus:将二维的复数点列延展成一维的复数点列,然后使用CRPLot进行绘制。
CRPlot[
Flatten[
Table[PolySolver[mypoly[z, \[Lambda]]], {\[Lambda], 0, 4, 0.2}]
],
{-2, 2}, 0.008
]