Linux 上的 Pari 软件包

作者:Klaus-Peter Nischke

pari 软件包(以法国首都巴黎命名,该软件包的想法起源于巴黎)是一个计算机代数系统,旨在在多个 Unix 衍生系统下工作,当然 Linux 也是其中之一。它在数学家小团体中广为人知,并且很可能对任何想要执行符号或数值计算或只是喜欢拥有功能强大的计算器的人有用。其功能包括任意精度数值计算、符号计算、矩阵/向量运算、绘图功能(文本模式或 X11)以及大量的数论函数。Pari 提供了一个交互式界面(GP 计算器)以及其自己的编程工具和一个库,用于在其自己的 C/C++ 程序中使用内核。该软件包中包含一个用于在 emacs 缓冲区中使用 GP 计算器的 emacs lisp 文件 (pari.el)。Pari 不像商业软件包 Maple、Mathematica 或 Axiom 那样广泛,但其主要优势在于速度。Pari 声称比商业同类产品快 5 到 100 倍。我个人喜欢它非常经济的内存使用。它在我的“低端” 386/40 8 兆内存上表现非常出色。

Pari 可以通过匿名 ftp 从 megrez.math.u-bordeaux.fr 获取,文件名为 pari-1.39a.tar.gz, साथ ही उदाहरण, बेंचमार्क और एक मैनुअल (160 पृष्ठ) जिसमें एक फ़ंक्शन संदर्भ और एक ट्यूटोरियल शामिल है। लेखक C. Batut, D. Bernardi, H. Cohen और M. Olivier हैं, जो जाने-माने संख्या सिद्धांतकार हैं। आप उनसे pari@math.u-bordeaux.fr पर संपर्क कर सकते हैं।

解包和编译

在 megrez.math.u-bordeaux.fr 上,您会找到预编译的 Linux 二进制文件 (gplinux.tar.gz) 以及源代码包 pari-1.39a.tar.gz。因为它包含文档和示例,所以我建议您获取源代码包,即使您获取二进制文件也是如此。pari-1.39a.tar.gz 解包到三个子目录中:doc、examples 和 src。如果您安装了 gcc,重新编译非常简单。在运行 configure i386 并在 Makefile 中执行一个小小的 hack(阅读 src/INSTALL 文件)之后,您就可以运行 make 了。您可以选择使用 readline 支持编译 gp 计算器,这意味着您拥有命令历史记录、可编程的击键以及与 GNU bash 中相同的其他功能。bash 的源代码也包含必要的 readline 库。

通过以 root 身份发出 make install,可以轻松安装 pari 库和 gp 计算器。安装 emacs 支持有点棘手,需要您编辑 pari.el 中定义的一些路径名和常量以匹配您的配置。一旦 pari.el 安装完成,您就可以通过发出 M-x gp 启动 gp,并通过 M-x describe-mode 获取概述,就像大多数 emacs 模式一样。

首次会话

成功编译和安装后,让我们启动 gp 并尝试在“?”提示符下输入一些表达式

? 2*3
%1 = 6
? 4/3*5/14
%2 = 10/21
? 4.0/3*5/14
%3 = 0.4761904761904761904761904761

正如您所看到的,pari 尝试尽可能使用精确的整数和有理数。一旦您引入一个实数(浮点数),结果将是实数。您可以请求(几乎)任意精度

? \precision=50
    precision = 50 significant digits
? pi
%4 = 3.1415926535897932384626433832795028841971693993751

您可以输入带有不定元的表达式

? (x+2)*(x^2+1)
%5 = x^3 + 2*x^2 + x + 2

赋值变量

? x=2
%6 = 2

并评估,例如,我们的 (x+2)*(x2+1)

? eval(%5)
%7 = 20

或在几毫秒内计算一些阶乘

? 1000!
%8 =
4023872600770937735437024339230039857193748642107146
3254379991042993851239862902059204420848696940480047
998861019719605863166687299480855890132382966994459...

在几毫秒内。

数字类型

在 pari 的基本类型中,到目前为止您已经看到了整数、有理数和实数以及带有不定元的有理表达式(多项式/有理函数)。整数可以存储最多 315,623 位十进制数字的值。实数的精度由

\precision=n 设置控制,其中 n 被限制为不大于 315623。此外,您可以使用复数、幂级数、行或列向量、矩阵等。您可以组合这些类型(即矩阵向量);pari 使用递归技术处理这些类型。

Pari 中的一些函数

除了标准的数学运算 +、-、* 和 / 之外,您还会找到超越函数和数论函数、处理椭圆曲线的函数、数域、多项式、幂级数、线性代数、求和与乘积,以及用于绘图的函数。

例如,您可以分解数字和多项式

? factor(249458089531)
%9 =
[7 2]
[48611 1]
[104729 1]

意思是 249458089531=72*48611*104729,或者

? factor(t^3+t^2-2*t-2)
%10 =
[t + 1 1]
[t^2 - 2 1]

意思是 t3+t2-2*t-2=(t+1)*(t2-2),其中 t2-2 在使用有理系数时无法进一步分解。只能分解一个不定元中的多项式。

要解线性方程 x=3*y, y=2*x-1(使用高斯方法),您可以将其重写为 x-3*y=0-2*x+y=-1,取系数矩阵 A,右侧 b 并计算

? A=[1,-3;-2,1]
%11 =
[1 -3]
[-2 1]
? b=[0;-1]
%12 =
[0]
[-1]
? gauss(A,b)
%13 =
[3/5]
[1/5]

为您提供结果 x=3/5, y=1/5。

要确定多项式的根,您只需输入 roots

? \precision=4
precision = 4 significant digits
:? roots(t^3+t^2-2*t-2)
%14 = [-1.414 + 0.0000*i, -1.000 + 0.0000*i,
1.414 + 0.0000*i]~

绘图使您可以快速了解函数的概况,即使在文本模式下也是如此;请参见图 1。要绘制到单独的 X11 窗口,请输入

? ploth(x=-pi,pi,sin(x))

图 1. 文本模式下的函数图

相反,要获得图 2 中的图形,请输入

? plot(x=-pi,pi,sin(x))

图 2. X 窗口系统模式下的函数图

GP 计算器

gp 命令可以分为表达式(立即评估)、函数定义、元命令和帮助。通过 ? 键,您可以获得控制 gp 的元命令以及每个内置函数的帮助。元命令允许您控制打印 pari 结果的方式以及从文件读取或写入文件。\w <filename> 将您的完整会话(从启动 gp 到发出此命令)保存到文件,\r <filename> 执行相反的工作,读取会话,将您带到(或返回到)您先前保存的确切状态。其他有用的功能包括以 TeX/LaTeX 格式编写表达式(通过 texprint)以及通过 # 命令切换定时信息的打印。您当然也可以使用标准 I/O 重定向将 gp 作为批处理作业运行。您可以使用 \ 继续字符跨越多行输入。

GP 编程

在 gp 中定义您自己的函数非常简单。例如,cube 返回其参数的三次方

? cube(x)=x*x*x
? cube(3)
%15 = 27
? cube(t+1)
%16 = t^3 + 3*t^2 + 3*t + 1

您可以使用控制结构,如 if、while、until、for(有一些特殊变体)、gotolabel 以及用于打印或清除变量的函数。虽然 pari 已经提供了一个函数 fibo,但让我们尝试为斐波那契数列编写一个函数。此序列由 f0=1, f1=1, fn=fn-1+fn-2 定义,对于 n>=2,产生 f2=1+1=2, f3=2+1=3, f4=5,..。最短的此类函数(可能)使用递归。在这里,您需要 if 表达式来测试特殊情况 f0=1f1=1if(a,seq1,seq2) 在 a 非零时评估 seq1,否则评估 seq2

?fib(n)=if(n==0,1,\
if(n==1,1,fib(n-1)+fib(n-2)))
? fib(5)
%17 = 8

对于小 n,这没问题。一种更快的方法是通过迭代计算斐波那契数。在每个步骤中,新值 h=fn 被计算为最后两个值 g=fn-1f=fn-2 的总和,然后交换这些值。为此,您需要变量 f、g、hm(计数器)。为了避免与函数外部定义的变量冲突,这四个变量在参数列表的末尾声明为局部变量。for(x=a,b,seq) 表达式评估从 ab 运行的每个 x 值的 seq。用分号 ; 分隔的表达式形成一个序列,序列的值始终是其最后一个表达式的值

? fib2(n, m,f,g,h)= f=1; g=1; \
for(m=2, n, h=f+g; f=g; g=h); g
? fib2(5)
%18 = 8
结论

本文只能涵盖 pari 的一些基本方面和亮点。有关更完整的描述以及在您自己的程序中使用 pari 库的信息,手册为您提供了出色的参考。

? \q
Goodbye!

Klaus-Peter Nischke 自 0.99pl13 (1993) 以来一直是热情的 Linux 用户。他在一家小型软件公司工作,曾在当地大学担任数学家。他将 pari 用于个人用途和数学研究。可以通过 klaus@nischke.do.eunet.de 与他联系。

加载 Disqus 评论