Maxima で綴る数学の旅

紙と鉛筆の代わりに、数式処理システムMaxima / Macsyma を使って、数学を楽しみましょう

-数学- ゴスパーさんとMaxima

f:id:jurupapa:20200325150240j:plain

100ft
 

maxima.hatenablog.jp

上記の記事で、円周率\(\pi\)の多桁計算の世界記録について触れました。そこで登場したBill Gosper、数学者兼ハッカーとして紹介されていました。この人の名前、数式処理に興味のある方ならきっと知っている、あの「ゴスパーのアルゴリズム」のゴスパーさんです。 そしてゴスパーさんはMaximaととても深い関係があります。

ゴスパーのアルゴリズムMaximaではnusum()関数に実装されており、総和記号に関するこんな計算が出来てしまします。

(%i68) G:k/((k+1)*(k+2)*(k+3));
$$ \tag{%o68} \frac{k}{\left(k+1\right)\,\left(k+2\right)\,\left(k+3\right)} $$
(%i69) sum(G,k,1,n);
$$ \tag{%o69} \sum_{k=1}^{n}{\frac{k}{\left(k+1\right)\,\left(k+2\right)\,\left(k+3\right)}} $$
(%i70) nusum(G,k,1,n);
$$ \tag{%o70} \frac{n\,\left(n+1\right)}{4\,\left(n+2\right)\,\left(n+3\right)} $$
(%i71) G2:binomial(n+p,q)/binomial(n+r,q+2);
$$ \tag{%o71} \frac{{{p+n}\choose{q}}}{{{r+n}\choose{q+2}}} $$
(%i72) sum(G2,n,1,m);
$$ \tag{%o72} \sum_{n=1}^{m}{\frac{{{p+n}\choose{q}}}{{{r+n}\choose{q+2}}}} $$
(%i73) nusum(G2,n,1,m);
$$ \tag{%o73} \frac{{{p+1}\choose{q}}\,\left(q-p-1\right)\,\left(r+1\right)}{\left(q+1\right)\,\left(r-p-1\right)\,{{r+1}\choose{q+2}}}-\frac{{{p+m+1}\choose{q}}\,\left(q-p-m-1\right)\,\left(r-q+m-1\right)}{\left(q+1\right)\,\left(r-p-1\right)\,{{r+m}\choose{q+2}}} $$

nusum()関数とは別にGosperのアルゴリズムの見通しの良い実装及びそれを拡張したZeilbergerのアルゴリズムが付属パッケージzeilbergerに実装されています。このアルゴリズムについて知りたければ、ゴスパーさんの論文:

https://www.pnas.org/content/pnas/75/1/40.full.pdf

を読むと良いです。二項係数の比の和である%o72の例はこの論文から取りました。

ゴスパーさんは元々MIT AIラボでMac Lispの実装などに関わっていたそうです。その後西海岸に移り、スタンフォード大学のAIラボや(上記論文時の所属でもありますが)ゼロックスパロアルト研究所などでコンピュータプログラミングと数学の研究をしていたようです。

上記論文の最後にMacsymaの利用についてMIT AIラボに謝辞を述べています。

現在も開発が続くMaximaソースコードを調べてみるとshare/numeric/bffac.macというコードの著者はゴスパーさんのようです。この中には階乗、ゼータ関数などの数値計算の高速コードが記載されています。