8.4 Jacobi楕円関数のグラフ

任意の $ k\in[0,1]$ に対して、 $ \mathrm{sn}(\cdot;k)\colon\mathbb{R}\to\mathbb{R}$ は奇関数、 $ \mathrm{cn}(\cdot;k)\colon\mathbb{R}\to\mathbb{R}$ $ \mathrm{dn}(\cdot;k)
\colon\mathbb{R}\to\mathbb{R}$ は偶関数である。 いずれも周期 $ 4K(k)$ の周期関数である ($ 2K(k)$ は周期ではない)。

$ [-2K(k),2K(k)]$ の範囲でグラフを描いてみよう。


boost には、

が用意されている。

Math/Special FunctionsJacobi Elliptic Functions

testjacobi.cpp

/*
 * testjacobi.cpp --- 与えられた k に対し sn(u;k), cn(u;k) (-K≦x≦K)の値を計算
 *                    dn(x;k) もやらないと。
 *   g++ -I/opt/local/include testjacobi.cpp
 */

#include <iostream>
#include <iomanip>
using namespace std;

#include <boost/math/special_functions.hpp>

int main(int argc, char **argv)
{
  int i, n;
  double pi, k, K, du, umin, umax;
  double *u, *y1, *y2, dummy;
  n = 400;
  u = new double [n+1];
  y1 = new double [n+1];
  y2 = new double [n+1];
  pi = 4 * atan(1.0);
  if (argc == 2)
    k = atof(argv[1]);
  else {
    cout << "k="; cin >> k;
  }
  cout << "# k=" << k << endl;
  // 周期の1/4を求める
  K = boost::math::ellint_1(k);
  // [-2K,2K] を400等分
  umin = - 2 * K; umax = 2 * K;
  du = (umax - umin) / n;
  for (i = 0; i <= n; i++) {
    u[i] = umin + i * du;
    // y1[i] = boost::math::jacobi_sn(k, u[i]);
    // y2[i] = boost::math::jacobi_cn(k, u[i]);
    y1[i] = boost::math::jacobi_elliptic(k, u[i], &y2[i], &dummy);
    cout << setiosflags(ios::fixed) << setprecision(15)
         << u[i] << " " << y1[i] << " " << y2[i] << endl;
  }
  return 0;
}

$ \mathrm{sn}(u;0)=\sin u$, $ \mathrm{cn}(u;0)=\cos u$ である。

図 25: $ k=0$
\includegraphics[width=0.9\textwidth]{jacobi_0.0.eps}
図 26: $ k=0.1$
\includegraphics[width=0.9\textwidth]{jacobi_0.1.eps}
図 27: $ k=0.2$
\includegraphics[width=0.9\textwidth]{jacobi_0.2.eps}
図 28: $ k=0.3$
\includegraphics[width=0.9\textwidth]{jacobi_0.3.eps}

図 29: $ k=0.4$
\includegraphics[width=0.9\textwidth]{jacobi_0.4.eps}
図 30: $ k=0.5$
\includegraphics[width=0.9\textwidth]{jacobi_0.5.eps}

図 31: $ k=0.6$
\includegraphics[width=0.9\textwidth]{jacobi_0.6.eps}
図 32: $ k=0.7$
\includegraphics[width=0.9\textwidth]{jacobi_0.7.eps}

図 33: $ k=0.8$
\includegraphics[width=0.9\textwidth]{jacobi_0.8.eps}
図 34: $ k=0.9$
\includegraphics[width=0.9\textwidth]{jacobi_0.9.eps}

図 35: $ k=0.99$
\includegraphics[width=0.9\textwidth]{jacobi_0.99.eps}
図 36: $ k=0.999$
\includegraphics[width=0.9\textwidth]{jacobi_0.999.eps}
図 37: $ k=0.9999$
\includegraphics[width=0.9\textwidth]{jacobi_0.9999.eps}

桂田 祐史