超幾何級数を扱うhypergeoパッケージ

世の中には興奮することっていっぱいあるけども、
一番興奮するのはやっぱり超幾何級数を扱うときですよね。

超幾何級数についてのWikipediaはこちら
活用例などはこちらがおすすめです。
ちなみに僕は、非心ベータ分布の平均を計算するために用いました。

R言語で超幾何級数を扱うときは, hypergeoパッケージが簡単です。
使い方を軽くメモしておきます。

インストール

CRANにあります。

> install.packages("hypergeo")
> library(hypergeo)

使い方

 _2F_1 を求める。

超幾何級数の中で頻出なのは  _2F_1 でしょうか。

{ \displaystyle
{}_2F_1(a,b;c;z) = \sum_{n=0}^\infty \frac{(a)_n (b)_n}{(c)_n} \frac{z^n}{n!}.
}

ただし,  (a)_n はポッホハンマー(Pochhammer)記号です。

{ \displaystyle
(a)_n = \begin{cases} 1 & n = 0 \\
a(a+1) \cdots (a+n-1) & n > 0
\end{cases}
}

このような 2F1 は hypergeo 関数で求めることができます。
例えば、{a, b, c, z} = {2,3,4,5}のときは、

> hypergeo(2,3,4,5)
[1] 0.1565421+0.1507964i

となり、超幾何級数が計算できました。

一般化された超幾何級数 _pF_q

 _2F_1だけでなく、 _pF_qのように一般化された超幾何級数を求めましょう。

このとき、  _pF_q は次のように定義されます。

{ \displaystyle
{}_pF_q=\sum_{n=0}^{\infty}\frac{(a_1)_n(a_2)_n\dots(a_p)_n}{(b_1)_n(b_2)_n\dots(b_q)_n\;n!}z^n 
}

これを求めるためには、genhypergeo 関数を使いましょう。
genhypergeo 関数のパラメータUに  (a_1)_n(a_2)_n\dots(a_p)_n を、
パラメータLに  (b_1)_n(b_2)_n\dots(b_q)_n を代入します。
例えば、  a_1=1, a_2=2, b_1=3, b_2=3, b_3=3, z=2 のとき、超幾何級数  {}_2F_3 は、

> genhypergeo(U=c(1,1),L=c(3,3,3),z=2)
[1] 1.078934

となります。

便利ですね!

超幾何関数 (すうがくの風景)

超幾何関数 (すうがくの風景)

サンドウィッチマンライブツアー2014 [DVD]

サンドウィッチマンライブツアー2014 [DVD]