I am a newbie using Mathematica. I wrote this code to plot the roots of Littlewood polynomials, based on the structure of other programming languages. But I'm sure Mathematica has tools to do it in a more condensed and efficient way. Could you guide me how to do it?
poly[exp_, var_] :=
Times @@@ Tuples[var^Range[0, exp]] //
Tuples[{1, -1}, Length@#].# &;
aux[num_] := lista[[num]];
pts = List[];
For[i = 1, i < 15, i++, lista = poly[{i}, {x}];
For[j = 1, j < Length[lista] + 1, j++,
pts = Join[pts, ({Re[#1], Im[#1]} &) /@ (x /.
NSolve[aux[j] == 0, x])];
]
];
graphi = ListPlot[puntos,
PlotRange -> {{-2.2, 2.2}, {-2.2, 2.2}},
AspectRatio -> Automatic,
PlotStyle -> {PointSize[0.0000001],
Opacity[0.05],
Yellow
},
Axes -> False,
Background -> Black,
ImageSize -> 1000,
GridLines -> {{-2, -1, 0, 1, 2}, {-2, -1, 0, 1, 2}}
];
Export["/Animaciones/Littlewood/14.png", graphi];
Use aux[num_]:=lista[[num]]; because ({Re[#1], Im[#1]} &) /@ (x /.NSolve[lista[[j]] == 0, x]) gave me an error, and pts=List[]; to have an empty list. As seen in the first For, this code generates the roots of the Littlewood polynomials with $n = 14$.
Also, is it normal for Mathematica on Linux (Ubuntu 20.04) to use only one thread at a time in its calculations? I think a lot of processing power is wasted.




ReIm@Values@NSolve[ lista[[j]] == 0, x]instead as no need for separateReandIm, andReImis listable. You should consider using a Table, orReap+Sow+Flattento achieve what's going on in the loops. – flinty Nov 16 '20 at 17:47