The Pari Package On Linux

Fast math is Pari's claim to fame. Klaus-Peter Nischke introduces us to a small, fast, flexible calculator with symbolic and numerical theoretic abilities.
Some Functions Within Pari

In addition to the standard mathematical operations +, -, *, and /, you find transcendental and number theoretical functions, functions dealing with elliptic curves, number fields, polynomials, power series, linear algebra, sums, and products, as well as functions for plotting.

For example, you can factor numbers and polynomials:


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

meaning 249458089531=72*48611*104729, or


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

meaning t3+t2-2*t-2=(t+1)*(t2-2), where t2-2 cannot be factored further using rational coefficients. It is only possible to factor polynomials in one indeterminate.

To solve a linear equation x=3*y, y=2*x-1 (using the gauss method), you rewrite it as x-3*y=0, -2*x+y=-1, take the coefficient matrix A, the right side b and compute


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

giving you the result x=3/5, y=1/5.

To determine the roots of a polynomial you may just enter 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]~

Plotting gives you a quick overview of a function even in text-mode; see Figure 1. For plotting to a separate X11-window, enter:


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

Figure 1. A Function Plot in Text Mode

Instead, to get the graph in Figure 2, enter:


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

Figure 2. A Function Plot in X Window System Mode

The GP Calculator

The gp commands may be classified into expressions (which are evaluated immediately), function definitions, meta-commands, and help. Via the ? key, you obtain help for the meta-commands controlling gp as well as for each of the built-in functions. The meta-commands allow you to control the way of printing pari results as well as reading and writing from or to a file. \w <filename> saves your complete session (from starting gp up to issuing this command) to a file, \r <filename> does the reverse job, reading the session, bringing you to (or returning you to) the exact state that you previously saved. Other useful features include the writing of expressions in TeX/LaTeX format (via texprint) and switching the printing of timing information by the # command. You may also of course run gp as a batch job using standard I/O redirection. You span input over several lines by using the \ continuation character.

Programming in GP

Defining your own functions in gp is quite simple. As an example, cube returns the third power of its argument:


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

You can use control structures as if, while, until, for (there are some special variants), goto and label as well as functions for printing or clearing variables. Though pari already provides a function fibo, let us try to program a function for the Fibonacci sequence. This sequence is defined by f0=1, f1=1, fn=fn-1+fn-2 for n>=2, yielding f2=1+1=2, f3=2+1=3, f4=5,... The (probably) shortest such function uses recursion. Here you need the if expression to test for the special cases f0=1 and f1=1. if(a,seq1,seq2) evaluates seq1 if a is nonzero and seq2 otherwise:


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

For small n this is okay. A faster way is to compute the Fibonacci numbers by iteration. In each step the new value h=fn is computed as the sum of the last two values g=fn-1 and f=fn-2, and afterwards these values are exchanged. For this you need variables f, g, h, and m (counter). To avoid conflicts with variables defined outside the function, these four are declared as local by writing them at the end of the parameter list. The for(x=a,b,seq) expression evaluates seq for each value of x running from a to b. Expressions separated by a semicolon ; form a sequence, and a sequence's value is always that of its last expression:


? 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
______________________

Webinar
One Click, Universal Protection: Implementing Centralized Security Policies on Linux Systems

As Linux continues to play an ever increasing role in corporate data centers and institutions, ensuring the integrity and protection of these systems must be a priority. With 60% of the world's websites and an increasing share of organization's mission-critical workloads running on Linux, failing to stop malware and other advanced threats on Linux can increasingly impact an organization's reputation and bottom line.

Learn More

Sponsored by Bit9

Webinar
Linux Backup and Recovery Webinar

Most companies incorporate backup procedures for critical data, which can be restored quickly if a loss occurs. However, fewer companies are prepared for catastrophic system failures, in which they lose all data, the entire operating system, applications, settings, patches and more, reducing their system(s) to “bare metal.” After all, before data can be restored to a system, there must be a system to restore it to.

In this one hour webinar, learn how to enhance your existing backup strategies for better disaster recovery preparedness using Storix System Backup Administrator (SBAdmin), a highly flexible bare-metal recovery solution for UNIX and Linux systems.

Learn More

Sponsored by Storix