PARI/GP

PARI/GP
作者 仏ボルドー第一大学 の Henri Cohen, Karim Belabas ら
最新版
2.15.4[1]
リポジトリ ウィキデータを編集
プログラミング
言語
C
対応OS クロスプラットフォーム(Windows・MacOS・Android)
種別 計算機代数
ライセンス GNU General Public License
公式サイト PARI/GP Development Headquarters
テンプレートを表示

PARI/GP計算機代数アプリケーションであり、数論に関する様々な演算を行うために開発された。バージョン2.1.0からはフリーソフトウェアとしてGNU General Public Licenseにしたがって米フリーソフトウェア財団から公開、配布されている。PARI/GPはマルチプラットフォームであり、多くのプラットフォームで実行することができる。

特に、整数論 (因数分解、 代数的数理論、楕円曲線等) 、行列、多項式、冪級数、代数的数を扱う分野においては有用になるようにできている。

開発の経緯

PARI/GPはもともと1985年に仏ボルドー大学 Laboratoire A2X のアンリ・コーエンのチームで開発され、現在は同大学のカリム・ベラバス(en)が多くのボランティア開発者とともに管理、開発している。コーエンと仏ボルドー第一大学のフランソワ・ドレス(en)が高度な代数計算を行うために開発したISABELLEというプログラムが元になっている。

概要

PARI/GPは再帰的な数式処理を高速に行うことのできるプログラムのパッケージである。当初は数論の研究者の利用を想定して開発された。演算が高速である、数学者になじみの深いデータ型を直接操作できる、数論における演算を行うための優れたモジュールを備えている、と言う特徴がある。

PARI/GPは標準で、以下の二つのプログラムを備えている。

  • PARI - C言語ライブラリで、高速な演算を行う関数を提供する。C言語以外にもC++PascalFortranPerlPythonからも使うことができる。
  • gp - 対話型に動作するコマンドラインインタフェイスのプログラム。これを実行することでPARIの機能を使うことができる。C言語のような制御構文を備えた高度な電卓プログラムとしても使うことができる。gp プログラムが理解して実行するスクリプト言語をGP と呼ぶ。

またgp2cと呼ばれるプログラムもパッケージに含まれている。これは GP 言語で書かれたスクリプトをC言語に変換するプログラムである。これにより、gp でスクリプトを実行するよりも3〜4倍高速に実行することができるようになる。しかし現時点では GP 言語のすべてをサポートしてはいない。

PARI/GPは任意の精度で多倍長演算を行うことができる。百万桁、64bitの計算機なら10億桁の精度を扱うことができる。また素因数分解楕円曲線、各種の代数演算を行うことができる。行列多項式冪級数代数的数の演算ができ、特殊関数も多数実装されている。

PARI/GPは独自のプロット機能を備えている。また多項式の操作や積分などにおいて記号計算を行うこともできるが、その機能はたとえばMathematicaのような計算機代数プログラムに比べるとまだ限定的である。

PARI/GPのコンパイル時にGMP (GNU Multiple Precision Arithmetic Library) を使うと、より高速に演算を行うことができる。

PARI/GPの名前の由来

PARIという名前は、開発が始まった当時に開発者たちがPascalで実装したライブラリ"Pascal ARIthmetic" (早期にC言語に移行したが)に、また"pari de Pascal" (パスカルの賭け).[2] に由来している。

gp の最初のバージョンは Great Programmable Calculator、GPC と呼ばれていた。なにかの理由で C がとれて今の名前になった。[2]

実行例

gp の実行例をいくつか以下に示す。

? \p 212
realprecision = 221 significant digits (212 digits displayed)
? 148.7^0.3721
time = 0 ms.
%1 = 6.4315686761687428232463963595991663095614617461851330959022336592679249
83664424375749173149713566544671777981026987042189396584904780584382369995989
2470992868949783084618518182456887849078305105083627437215091767
? 123456! + 0.
time = 1,656 ms.
%2 = 2.6040699049291378729513930560926568818273270409503019584610185579952057
37967683415793560716617127908735520017061666000857261271456698589373086528293
4317244121152865814030204645985573419251305342231135573491050756 E574964
? sin(x)
time = 0 ms.
%3 = x - 1/6*x^3 + 1/120*x^5 - 1/5040*x^7 + 1/362880*x^9 - 1/39916800*x^11
+ 1/6227020800*x^13 - 1/1307674368000*x^15 + O(x^17)
? for(z=25,30, print (factor(2^z-1)))
[31, 1; 601, 1; 1801, 1]
[3, 1; 2731, 1; 8191, 1]
[7, 1; 73, 1; 262657, 1]
[3, 1; 5, 1; 29, 1; 43, 1; 113, 1; 127, 1]
[233, 1; 1103, 1; 2089, 1]
[3, 2; 7, 1; 11, 1; 31, 1; 151, 1; 331, 1]
time = 5 ms.
? e = ellinit([0,0,1,-7,6]); ellidentify(e)
time = 28 ms.
%4 = [["5077a1", [0, 0, 1, -7, 6], [[-2, 3], [-1, 3], [0, 2]]], [1, 0, 0, 0]]

/* A famous rank 3 elliptic curve of conductor 5077. */
? K = bnfinit(x^2 + 23); K.cyc
time = 1ms.
%5 = [3]

/* This number field has class number 3. */

関連項目

脚注・出典

  1. ^ http://pari.math.u-bordeaux.fr/pub/pari/unix/pari-2.15.4.changelog
  2. ^ a b "TRIVIA" section of "Manpage of GP," August 10, 2004

外部リンク