2.5.1 零点を求める

B.7 も参照せよ。

以前は、次のようにしていた (これ自体は不要になったが、 参考になるところが残っていると思うので、削除せずに残す)。
これは不要になった
以下のようにして零点を必要な精度だけ計算することもできる。
FindRoot[BesselJ[0,x]==0,{x,2},WorkingPrecision->50]
Table[FindRoot[BesselJ[0,x]==0,{x,m*Pi+2},WorkingPrecision->50],{m,0,20}]

たくさんの桁数が必要なときは、 AccuracyGoal->桁数 のような指定が必要かもしれない (通常は ``Automatic'')。 また $ n$ が大きくなると、 MaxIterations->200 のような指定が必要かもしれない (通常は ``100'')。

Version 6 以降の Mathematica では、 Bessel関数の零点を計算するために BesselJZero[n,k] ($ J_n$ $ k$ 番目の零点), BesselJZero[n,k,$ x_0$ ] ($ J_n$ $ x_0$ より大きい $ k$ 番目の零点), BesselYZero[n,k] ($ Y_n$ $ k$ 番目の零点), BesselYZero[n,k,$ x_0$ ] ($ Y_n$ $ x_0$ より大きい $ k$ 番目の零点) が用意されている。

数値計算するには、
  bjz[n_,m_]:=bjz[n,m]=N[BesselJZero[n,m],30]
のようにして、bjz[n][m] を使うと良いだろう (一度計算したら覚えておいて、それを再利用する)。

Version 5.2 まで、 NumericalMath`BesselZeros` というパッケージがあった (http://documents.wolfram.com/mathematica/Add-onsLinks/StandardPackages/NumericalMath/BesselZeros.html)。 この中には、 例えば BesselJZeros[], BesselJPrimeZeros[] が入っていて、 前者は今でこそ BesselJZero[] があるので不要になったが (N[BesselJZero[1,2],30] のようなことが出来るから)、 後者は今でも必要になる。 $ J_n'(z)$ ( $ n=0,1,\dots,10$ ) の正の零点を小さい方から $ 20$ 個集めた表が 欲しければ、
  <<NumericalMath`BesselZeros`
  For[n=0,n<=10,n++,bjpz[n]=BesselJPrimeZeros[n,20,WorkingPrecision->30]]
のようにする。bjpz[n][[m]]$ J_n'$ $ m$ 番目の零点の 30桁の数値となる。

桂田 祐史
2017-11-20