PARI/GPについての情報

富山大学理工学研究部
木村 巌<iwao at sci.u-toyama.ac.jp>
最終更新日:2015年11月12日(更新箇所

PARI/GPとは

PARI/GPは、整数論への応用を念頭に置いて開発されているC言語用のlibrary Pariと、その機能を用いて対話的に数値計算が行えるgpという処理系からなります. 開発は主に、以下のCopyright noticeにある人達に依りますが、機能の追加、改良を広く受け入れています.
Copyright (C) 1989-1998 by C. Batut, K. Belabas, D. Bernardi, H. Cohen and M. Olivier.
入手先など詳細はPARI/GPのホームページをご覧下さい.

PARI libraryは、C言語のプログラムにlinkして用いることを想定して作成されています.他方、gpは、PARI libraryの機能を対話的に用いる為に作成されており、GNU readline libraryなどと組み合わせて、あるいはemacsから呼び出して、快適に用いることが出来ます.また、gpは簡単なscript言語のinterpreterでもあり、speedを追求しなければgp scriptのみで十分仕事になります.たとえば、マチンの公式(arctanの加法定理とTaylor展開とを組み合わせるもの)で円周率を計算するには、gpで以下のようなプログラムを書くことになります.


mypi(iter = 100)=
{
        my(a, b, x, y);

        x = 1/5; y = 1/239;
        a = 4 * sum(k = 0, iter, ((-1)^k / (2*k + 1)) * x^(2*k + 1));
        b = sum(k = 0, iter, ((-1)^k / (2*k + 1)) * y^(2*k + 1));
        4 * (a - b) + .0
}
別の,より効率の良いRamanujanによる公式をGPのスクリプトにしたものがこちらに(pi.gp

/*
 * Basing on Ramanujan's formula, this program compute
 * pi. a(n) -> 1/pi as n -> oo. 
 */
{
  print("a(n) gives an approx. of 1/pi. Please note that, before compute a(n),
  the real precision should be 4^n or greater.");
  print("For example, if you want to compute a(8), then");
  print("? \\p65536");
  print("? 1/a(8)");
  print("This may take a second.");
}

y(n) = {
  /*
   * y(0) = sqrt(2)-1,
   * y(n+1) = (1-(1-y(n)^4)^(1/4))/(1+(1-y(n)^4)^(1/4)), n>=1.
   */
  my(yn = 0, ynq = 0, ynqm = 0);
  if(n==0, return(sqrt(2) - 1),
     yn=y(n-1);
     ynq = yn^4;
     ynqm = (1-ynq)^(1/4);
     return((1-ynqm)/(1+ynqm)));
}

a(n) = {
  /*
   * a(0) = 6-4sqrt(2),
   * a(n+1) = (1+y(n+1))^4 * a(n) - 2^(2n+3) * y(n+1)*(1+y(n+1)+y(n+1)^2), n>=1.
   */
  my(yn = 0, ynp1 = 0, ynp1sq = 0, ynp1quart = 0);
  if(n == 0, return(6-4*sqrt(2)),
     yn=y(n);
     ynp1 = yn + 1;
     ynp1quart = ynp1^4;
     return(ynp1quart*a(n-1) - (2^(2*n+1))*yn*(1+yn+yn^2)));
}
さらに、同様の計算をするプログラムを、CでPARI libraryを使って書いたもの別バージョンです。PARI-libraryを使っているので、多倍長計算になっています。勿論、PARI-gpには、組み込みのPiという定数が用意されています.

PARI/GPで出来ること

PARIの関数群は、用途に応じて次のように分類されています.

  1. Standard monadic or dyadic OPERATORS
  2. CONVERSIONS and similar elementary functions
  3. TRANSCENDENTAL functions(超越関数の数値的な計算)
  4. NUMBER THEORETICAL functions(数論に関する関数)
  5. Functions related to ELLIPTIC CURVES(楕円曲線に関する関数)
  6. Functions related to general NUMBER FIELDS(一般の代数体に関する関数)
  7. POLYNOMIALS and power series(多項式、巾級数に関する関数)
  8. Vectors, matrices, LINEAR ALGEBRA and sets(ベクトル、線形代数に関する関数)
  9. SUMS, products, integrals and similar functions(和、積、積分など)
  10. GRAPHIC functions(グラフィック・プロッティングに関する関数)

PARI/GPの最近の動向

現在のpari-gp最新版は、(ダウンロードページへのリンク)version 2.7.5です('2015/11/12現在).PARI developpers MLのlogなども参照してください.

pari開発者のミーティングAtelier Pari/gp 2015が2015年1月に開催されたそうです.

Microsort Windows版のバイナリ(インストーラ付)もあります.ダウンロードして実行するだけで、インストール作業が開始します.64bit版のWindowsを使っている方は,64bit版のバイナリを強くお勧めします(ファイル名がPari64となっているもの.高速です).下記インストールについて,を参照.

インストールについて

Microsoft Windows

Windows Vista (Home Premium)へpari-gpをインストールする過程を,スクリーンショット込で解説した文書を作成しました(2007/8/23).

FreeBSD/Linuxなど各種Unix互換環境

開発版である2.8系列も随時進行中.git repositoryから最新版をcheck outし、自分でコンパイルする方法は,pari/gp本家のページに解説あり

  1. git(分散バージョン管理システム)を用意する.FreeBSD/Linuxなどでは然るべきバイナリパッケージがあるので、それを導入しておく.Microsoft Windows上でも、バイナリがあるので導入しておく(git for Windows).
  2. ktermなどの仮想端末で、bashやtcshなどのshellを立ち上げておく
  3. pari/gpのソースツリーを展開したいディレクトリに行って、
    git clone http://pari.math.u-bordeaux.fr/git/pari.git
  4. pariというディレクトリができているのでそのディレクトリへ移動し
    ./Configure
    なお、Configure時のオプションについては、./Configure --help参照.最近のバージョンでは、低レベルの多倍長演算エンジンとして、GMPがデフォルトになっています.
  5. GMPを多倍長演算に使う場合は、使用するパソコンに最適になるようコンパイルしたものを使うのがお薦め.バイナリパッケージから導入したものだとパフォーマンスが上がらないことがあります.また、MPIRのGMP互換APIもお薦めです(特に64bitマシンで).
  6. make gp
  7. rootになって、make install

その他メモ

リンク

日本語で読めるpari-gpに関する情報として(順不同・網羅的ではありません):

メモ

pari-gpで初等数論」というメモを公開します.OOo writerで書いた原稿はこちら

pari-gpの2.4系列はgpのパーサが全面的に書き換えられ、極めて高速になっています(2007/7/5記).但し、CVSの最新版には、最新版のbugが潜んでいる可能性があるので注意.

Math::Pariの動向

Ilya Zakharevichさんが公開しておられる、PARI-GPをPerlから使うためのmoduleは Math-Pari-2.001302.tar.gzが最新版です.PARI-GP 2.0.13.alphaに対応しています.


木村のtop pageに戻る
<iwao@sci.toyama-uac.jp >
$Id: pari-gp.html,v 1.35 2015/11/12 06:56:58 iwao Exp iwao $