我在百度贴吧Mathematica吧的这个帖子看到有人在研究如下问题:
求解所有系数为1或-1的n次多项式的根,然后把所有这样的根绘制到复平面上。
我想起以前在Matrix67的博客上也看到过这个问题,里面介绍了Sam Derbyshire用Mathematica跑了四天四夜(也有说法是三天三夜)生成了n=24的所有根,然后用Java程序绘图,得到了下图:
贴吧中的“三分钟复现”是算到n=17的情况。由于n增加1导致需要求解方程的数量翻倍,每个方程中根的个数也增加1,所以我估计了一下,n=24时大约需要求出24*2^24=402M个解。(24次多项式包括常数项有25个系数,但是由于对称性可以省去一半计算。)这些计算显然不需要以天为数量级的时间。
我决定用C语言解决这个问题,同时改善一下显示的效果,并尝试绘制分辨率更高的图。
解决这个问题有两个比较麻烦的事:
- 如何求解多项式的根
- 图上的颜色按照什么绘制