<p>下面是Mathematica的一个方法,它似乎很有效:</p>
<pre><code>In[37]:= FindRoot[x + 1/10 Tan[x], {x, # + Abs[#]*10^-14, (# + Pi) (1. - 10^-14)}, Method -> "Brent"] & /@ Range[-Pi/2, 50 Pi, Pi]
Out[37]= {{x -> 0.}, {x -> 1.63199}, {x -> 4.73351}, {x -> 7.86669},
{x -> 11.0047}, {x -> 14.1442}, {x -> 17.2845}, {x -> 20.4252},
{x -> 23.5662}, {x -> 26.7073}, {x -> 29.8485}, {x -> 32.9898},
{x -> 36.1311}, {x -> 39.2725}, {x -> 42.4139}, {x -> 45.5553},
{x -> 48.6967}, {x -> 51.8382}, {x -> 54.9797}, {x -> 58.1212},
{x -> 61.2627}, {x -> 64.4042}, {x -> 67.5457}, {x -> 70.6872},
{x -> 73.8288}, {x -> 76.9703}, {x -> 80.1119}, {x -> 83.2534},
{x -> 86.395}, {x -> 89.5365}, {x -> 92.6781}, {x -> 95.8196},
{x -> 98.9612}, {x -> 102.103}, {x -> 105.244}, {x -> 108.386},
{x -> 111.527}, {x -> 114.669}, {x -> 117.811}, {x -> 120.952},
{x -> 124.094}, {x -> 127.235}, {x -> 130.377}, {x -> 133.518},
{x -> 136.66}, {x -> 139.802}, {x -> 142.943}, {x -> 146.085},
{x -> 149.226}, {x -> 152.368}, {x -> 155.509}}
</code></pre>
<p>本质上,通过替换<code>Sqrt[E] = x</code>,您只需要求解<code>x + M Tan[x] == 0</code>,而这就是正的<code>M</code>和<code>x</code>。您知道<code>Tan[x]</code>每乘以<code>Pi/2 + kPi</code>就改变一次符号。所以你知道每<code>]Pi/2 + k Pi, Pi/2 + (k+1) Pi[</code>总有一个根。我们在这里使用Brent的方法,因为这可以确保始终在正值和负值之间找到根,并且由于<code>Tan[x]</code>的性质,我们知道靠近相应区间边界的值具有相反的符号</p>
<p>我们也使用<code>FindRoot</code>代替<code>NSolve</code>,因为<code>NSolve</code>是为多项式设计的</p>