数学の具体的な計算にMaximaを使って、数学もMaximaも同時に学んでしまいましょう。
今回はMaximaを使って、
ある関数のTaylor(テイラー)展開の展開係数として定義されるBernoulli数とEuler数を求めてみます。
Bernoulli数とEuler数は互いに関係しているのですが、それもMaximaを使って確かめてみます。
Maximaのごく基本的な使い方については以下の記事を参照してください:
Bernoulli数
Bernoulli数は関数
を のまわりでTaylor展開した
の展開係数として求められます:
つまり
です。
Bernoulli数をMaximaで求める
まずMaximaで関数 を定義します:
f(x):=x/(exp(x)-1);
関数 を のまわりで 次までTaylor展開したものを
f[k]:=taylor(f(x), x, 0, k)$
とします。
Taylor展開の 次の係数は
F[k]:=ratcoeff(f[k], x, k)$
によって取り出すことができます。
Beroulli数はTaylor展開の 次の係数に を掛けたものなので
B[k]:=k!*F[k]$
としておきます。
最後に、この数を30個並べたリストを作成してみます:
Ber:makelist(B[k], k, 0, 29);
このリスト Ber の k 番目の要素は Ber[k] によって参照することができます。たとえば
Ber[5];
などです。リスト化したことで、要素の番号付けと展開の次数がずれたことに注意してください。
また、リストの個数は
length(Ber);
によって知ることができます。いま30個の要素を並べたので、30という値が出力されたと思います。
実は、わざわざ上のようにして求めなくても、
MaximaにはBernoulli数がすでに組み込まれています bern(k):たとえば
bern(4);
などです。
そこでリスト Ber の各要素に対して、
それが組み込みのBernoulli数に等しいか?という真偽判定をさせてみます:
makelist( is(Ber[k]=bern(k-1)), k, 1, length(Ber));
30個すべての要素について一致することが確認できたと思います。
Euler数
次にEuler数を求めてみます。Euler数は関数
を のまわりでTaylor展開した展開係数として求められます:
Euler数をMaximaで求める
Euler数を求めるには、Bernoulli数を求めるMaximaの入力で、
入力する関数を から に置き換えればよいでしょう:
g(x):=2/(exp(x)+exp(-x)); g[k]:=taylor(g(x), x, 0, k)$ G[k]:=ratcoeff(g[k], x, k)$ E[k]:=k!*G[k]$ Eul:makelist(E[k], k, 0, 29);
Euler数もMaximaにはすでに組み込まれています: euler(k)
これが上で求めた数と一致するか確認してみましょう:
makelist( is(Eul[k]=euler(k-1)), k, 1, length(Eul));
30個すべての要素について一致が確認できたと思います。
Euler数とBernoulli数の関係
Euler数とBernoulli数の間には
の関係が成り立ちます。これをMaximaで確かめてみます:
Eu(n):=1+sum(binomial(2*n,2*k-1)*(2^(2*k)-2^(4*k))/(2*k)*bern(2*k), k, 1, n)$ makelist( is(Eu(n)=euler(2*n)), n, 0, 20); Be(n):=(2*n/(2^(4*n)-2^(2*n)))*sum(binomial(2*n-1,2*k)*euler(2*k), k, 0, n-1)$ makelist( is(Be(n)=bern(2*n)), n, 1, 21);
確かに成り立っていることがわかります。
キーワード:Maxima、Bernoulli数、Euler数