绘制整系数多项式复数根的分布

我在百度贴吧Mathematica吧的这个帖子看到有人在研究如下问题:

求解所有系数为1或-1的n次多项式的根,然后把所有这样的根绘制到复平面上。

我想起以前在Matrix67的博客上也看到过这个问题,里面介绍了Sam Derbyshire用Mathematica跑了四天四夜(也有说法是三天三夜)生成了n=24的所有根,然后用Java程序绘图,得到了下图:

roots1

贴吧中的“三分钟复现”是算到n=17的情况。由于n增加1导致需要求解方程的数量翻倍,每个方程中根的个数也增加1,所以我估计了一下,n=24时大约需要求出24*2^24=402M个解。(24次多项式包括常数项有25个系数,但是由于对称性可以省去一半计算。)这些计算显然不需要以天为数量级的时间。

我决定用C语言解决这个问题,同时改善一下显示的效果,并尝试绘制分辨率更高的图。

解决这个问题有两个比较麻烦的事:

  • 如何求解多项式的根
  • 图上的颜色按照什么绘制

继续阅读“绘制整系数多项式复数根的分布”

用Mathematica拟合自定义函数

最近在处理大物实验的数据时经常会遇到各种线性和非线性的拟合问题。对于线性回归的计算,用Excel电子表格,甚至卡西欧计算器,都很容易完成。但是对于复杂函数的拟合,简单的软件却无能为力。大物实验这门课推荐的Origin软件,拟合自定义函数很麻烦(据说需要编译成dll动态链接库),而且我不是很喜欢它的操作方式和界面。所以我选择用Mathematica来拟合自定义函数。

Mathematica的帮助文档是个好东西,不需要联网就可以根据你想要做的事情搜索相应的函数。

继续阅读“用Mathematica拟合自定义函数”

用Mathematica计算物理题

昨天在做电磁学题目的时候遇到几个手算比较麻烦的式子,于是改用Mathematica软件完成了计算。

在这里总结两个解决方法:

1、做近似计算,略去高阶小量

有一道题要计算 \(r \gg l\) 时的电势分布,原始的式子是(去掉了常数部分)

$$\frac{1}{{\sqrt {{l^2} + 2lr\cos (\theta ) + {r^2}} }} + \frac{1}{{\sqrt {{l^2} – 2lr\cos (\theta ) + {r^2}} }} – \frac{2}{r}$$

在Mathematica中可以用Series函数计算这个函数在 \(l=0\) 处的泰勒展开,展开到第二项就可以了。

Mathematica输入如下:

Assuming[r>0,Simplify[Series[-2/r+1/Sqrt[r^2+l^2-2r l Cos[\[Theta]]]+1/Sqrt[r^2+l^2+2 r l Cos[\[Theta]]],{l,0,2}]]]

得到的结果是:

$$\frac{{\left( {1 + 3\cos \left[ {2 \theta} \right]} \right){l^2}}}{{2{r^3}}} + O{\left[ l \right]^3}$$

第一项就是所求。

2、在极坐标系中求梯度

根据刚才算出来的电势求电场强度矢量,需要在极坐标系中求梯度。

用Mathematica的Grad函数,输入如下:

Assuming[r>0,Simplify[-Grad[((1+3 Cos[2 \[Theta]]) l^2)/(2 r^3),{r,\[Theta],\[Phi]},"Spherical"]]]

得到的结果是:

$$\left\{ {\frac{{3{l^2}\left( {1 + 3\cos \left[ {2\theta } \right]} \right)}}{{2{r^4}}},\frac{{3{l^2}\sin \left[ {2\theta } \right]}}{{{r^4}}},0} \right\}$$

这里用的是球面坐标系,所以结果的第三个分量是0,可以略去。前两个分量分别代表\(r\)方向和\(\theta\)方向的结果。

不同“距离”概念下的单位圆

昨天数学分析课上讲了“距离”概念的推广。

广义的“距离”(明可夫斯基距离)定义为

$${P_\alpha }\left( {\left( {{x_1},{y_1}} \right),\left( {{x_2},{y_2}} \right)} \right) = {\left( {{{\left| {{x_1} – {x_2}} \right|}^\alpha } + {{\left| {{y_1} – {y_2}} \right|}^\alpha }} \right)^{\frac{1}{\alpha }}}$$

其中\(\alpha =1\)时为曼哈顿距离,\(\alpha =2\)时为欧氏距离。

对于不同的“距离”可以画出对应的单位圆(即到原点“距离”为1的点的集合)

当\(\alpha\)从0变化到4时,单位圆的形状的变化很有趣,我做了下面的动态图:

circle

注:\(\)\alpha <1[/latex]时不满足“距离”的定义,但是也可以画出对应的单位圆。 如果把这种“单位圆”推广到三维空间,也可以作出很有趣的图,例如下面是[latex]x^4+y^4+z^4=1[/latex]的图像: 3Dfunc