]>
Book Contents Next Section 0.2 A Technical Introduction Book Index

## 0.1 Introduction to Axiom

Welcome to the world of Axiom. We call Axiom a scientific computation system: a self-contained toolbox designed to meet your scientific programming needs, from symbolics, to numerics, to graphics.

This introduction is a quick overview of what Axiom offers.

### 0.1.1 Symbolic Computation

Axiom provides a wide range of simple commands for symbolic mathematical problem solving. Do you need to solve an equation, to expand a series, or to obtain an integral? If so, just ask Axiom to do it.

Given ∫(1(x 3(a+b x)1/3))dx we would enter this into Axiom as:

integrate(1/(x**3 * (a+b*x)**(1/3)),x)

which would give the result: (-2 b 2 x 2 3 log(a 3 b x+a 3 2+a 3 2 b x+a 3+a)+4 b 2 x 2 3 log(a 3 2 b x+a 3-a)+12 b 2 x 2 arctan(2 3 a 3 2 b x+a 3+a 3 3 a)+(12 b x-9 a)3 a 3 b x+a 3 2)18 a 2 x 2 3 a 3

Type: Union(Expression Integer,...)

Axiom provides state-of-the-art algebraic machinery to handle your most advanced symbolic problems. For example, Axiom's integrator gives you the answer when an answer exists. If one does not, it provides a proof that there is no answer. Integration is just one of a multitude of symbolic operations that Axiom provides.

### 0.1.2 Numeric Computation

Axiom has a numerical library that includes operations for linear algebra, solution of equations, and special functions. For many of these operations, you can select any number of floating point digits to be carried out in the computation.

Solve x 49-49 x 4+9 to 49 digits of accuracy. First we need to change the default output length of numbers:

digits(49)

and then we execute the command:

solve(x**49-49*x**4+9 = 0,1.e-49)

[x=-0.6546536706904271136718122105095984761851224331 556,x=1.086921395653859508493939035954893289009213388763,x=0.654653670725527173969468606613676483536148760766 1]

Type: List Equation Polynomial Float

The output of a computation can be converted to FORTRAN to be used in a later numerical computation. Besides floating point numbers, Axiom provides literally dozens of kinds of numbers to compute with. These range from various kinds of integers, to fractions, complex numbers, quaternions, continued fractions, and to numbers represented with an arbitrary base.

What is 10 to the 90-th power in base 32?

radix(10**90,32)

returns:

FMM3O955CSEIV0ILKH820CN3I7PICQU0OQMDOFV6TP000000000000000000

Type: RadixExpansion 32

The AXIOM numerical library can be enhanced with a substantial number of functions from the NAG library of numerical and statistical algorithms. These functions will provide coverage of a wide range of areas including roots of functions, Fourier transforms, quadrature, differential equations, data approximation, non-linear optimization, linear algebra, basic statistics, step-wise regression, analysis of variance, time series analysis, mathematical programming, and special functions. Contact the Numerical Algorithms Group Limited, Oxford, England.

### 0.1.3 Graphics

You may often want to visualize a symbolic formula or draw a graph from a set of numerical values. To do this, you can call upon the Axiom graphics capability.

Draw J 0(x 2+y 2) for -20≤x,y≤20.

draw(5*besselJ(0,sqrt(x**2+y**2)), x=-20..20, y=-20..20)
J 0(x 2+y 2) for -20≤x,y≤20

Graphs in Axiom are interactive objects you can manipulate with your mouse. Just click on the graph, and a control panel pops up. Using this mouse and the control panel, you can translate, rotate, zoom, change the coloring, lighting, shading, and perspective on the picture. You can also generate a PostScript copy of your graph to produce hard-copy output.

### 0.1.4 HyperDoc

Hyperdoc opening menu

HyperDoc presents you windows on the world of Axiom, offering on-line help, examples, tutorials, a browser, and reference material. HyperDoc gives you on-line access to this document in a ``hypertext'' format. Words that appear in a different font (for example, Matrix, factor, and category) are generally mouse-active; if you click on one with your mouse, HyperDoc shows you a new window for that word.

As another example of a HyperDoc facility, suppose that you want to compute the roots of x 49-49 x 4+9 to 49 digits (as in our previous example) and you don't know how to tell Axiom to do this. The ``basic command'' facility of HyperDoc leads the way. Through the series of HyperDoc windows shown in Figure fig-intro-br and the specified mouse clicks, you and HyperDoc generate the correct command to issue to compute the answer.

### 0.1.5 Interactive Programming

Axiom's interactive programming language lets you define your own functions. A simple example of a user-defined function is one that computes the successive Legendre polynomials. Axiom lets you define these polynomials in a piece-wise way.

The first Legendre polynomial.

p(0) == 1
Type: Void

The second Legendre polynomial.

p(1) == x
Type: Void

The n-th Legendre polynomial for (n>1).

p(n) == ((2*n-1)*x*p(n-1) - (n-1) * p(n-2))/n
Type: Void

In addition to letting you define simple functions like this, the interactive language can be used to create entire application packages. All the graphs in the Axiom images section were created by programs written in the interactive language.

The above definitions for p do no computation---they simply tell Axiom how to compute p(k) for some positive integer k.

To actually get a value of a Legendre polynomial, you ask for it. Legendre polynomials

What is the tenth Legendre polynomial?

p(10)
Compiling function p with type Integer -> Polynomial Fraction
Integer
Compiling function p as a recurrence relation.

46189 256 x 10-109395 256 x 8+45045 128 x 6-15015 128 x 4+3465 256 x 2-63 256

Type: Polynomial Fraction Integer

Axiom applies the above pieces for p to obtain the value of p(10). But it does more: it creates an optimized, compiled function for p. The function is formed by putting the pieces together into a single piece of code. By compiled, we mean that the function is translated into basic machine-code. By optimized, we mean that certain transformations are performed on that code to make it run faster. For p, Axiom actually translates the original definition that is recursive (one that calls itself) to one that is iterative (one that consists of a simple loop).

What is the coefficient of x 90 in p(90)?

coefficient(p(90),x,90)

5688265542052017822223458237426581853561497449095175 77371252455336267181195264

Type: Polynomial Fraction Integer

In general, a user function is type-analyzed and compiled on first use. Later, if you use it with a different kind of object, the function is recompiled if necessary.

### 0.1.6 Data Structures

A variety of data structures are available for interactive use. These include strings, lists, vectors, sets, multisets, and hash tables. A particularly useful structure for interactive use is the infinite stream:

Create the infinite stream of derivatives of Legendre polynomials.

[D(p(i),x) for i in 1..]

[1,3 x,15 2 x 2-3 2,35 2 x 3-15 2 x,315 8 x 4-105 4 x 2+15 8,693 8 x 5-315 4 x 3+105 8 x,3003 16 x 6-3465 16 x 4+945 16 x 2-35 16,6435 16 x 7-9009 16 x 5+3465 16 x 3-315 16 x,109395 128 x 8-45045 32 x 6+45045 64 x 4-3465 32 x 2+3 15 128,230945 128 x 9-109395 32 x 7+135135 64 x 5-15015 32 x 3+3465 128 x,…]

Type: Stream Polynomial Fraction Integer

Streams display only a few of their initial elements. Otherwise, they are ``lazy'': they only compute elements when you ask for them.

Data structures are an important component for building application software. Advanced users can represent data for applications in optimal fashion. In all, Axiom offers over forty kinds of aggregate data structures, ranging from mutable structures (such as cyclic lists and flexible arrays) to storage efficient structures (such as bit vectors). As an example, streams are used as the internal data structure for power series.

What is the series expansion of log(cot(x)) about x=π/2?

series(log(cot(x)),x = %pi/2)

log(-2 x+π 2)+1 3(x-π 2)2+7 90(x-π 2)4+62 2835(x-π 2)6+127 18900(x-π 2)8+146 66825(x-π 2)10+O((x-π 2)11)

Type: GeneralUnivariatePowerSeries(Expression Integer,x,pi/2)

Series and streams make no attempt to compute all their elements! Rather, they stand ready to deliver elements on demand.

What is the coefficient of the 50-th term of this series?

coefficient(%,50)

44590788901016030052447242300856550965644 7131469286438669111584090881309360354581359130859375

Type: Expression Integer

### 0.1.7 Mathematical Structures

Axiom also has many kinds of mathematical structures. These range from simple ones (like polynomials and matrices) to more esoteric ones (like ideals and Clifford algebras). Most structures allow the construction of arbitrarily complicated ``types.''

Even a simple input expression can result in a type with several levels.

matrix [ [x + %i,0], [1,-2] ]

[x+%i 0 1-2]

Type: Matrix Polynomial Complex Integer

The Axiom interpreter builds types in response to user input. Often, the type of the result is changed in order to be applicable to an operation.

The inverse operation requires that elements of the above matrices are fractions.

inverse(%)

[1 x+%i 0 1 2 x+2%i-1 2]

Type: Union(Matrix Fraction Polynomial Complex Integer,...)

### 0.1.8 Pattern Matching

A convenient facility for symbolic computation is ``pattern matching.'' Suppose you have a trigonometric expression and you want to transform it to some equivalent form. Use a rule command to describe the transformation rules you rule need. Then give the rules a name and apply that name as a function to your trigonometric expression.

Introduce two rewrite rules.

sinCosExpandRules := rule
sin(x+y) == sin(x)*cos(y) + sin(y)*cos(x)
cos(x+y) == cos(x)*cos(y) - sin(x)*sin(y)
sin(2*x) == 2*sin(x)*cos(x)
cos(2*x) == cos(x)**2 - sin(x)**2
{sin(y + x) == cos(x)sin(y) + cos(y)sin(x),
cos(y + x) == - sin(x)sin(y) + cos(x)cos(y),
sin(2x) == 2cos(x)sin(x),
2 2
cos(2x) == - sin(x) + cos(x) }
Type: Ruleset(Integer,Integer,Expression Integer)

Apply the rules to a simple trigonometric expression.

sinCosExpandRules(sin(a+2*b+c))

(-cos(a)sin(b)2-2 cos(b)sin(a)sin(b)+cos(a)cos(b)2)sin(c)-cos(c)sin(a)sin(b)2+2 cos(a)cos(b)cos(c)sin(b)+cos(b)2 cos(c)sin(a)

Type: Expression Integer

Using input files, you can create your own library of transformation rules relevant to your applications, then selectively apply the rules you need.

### 0.1.9 Polymorphic Algorithms

All components of the Axiom algebra library are written in the Axiom library language. This language is similar to the interactive language except for protocols that authors are obliged to follow. The library language permits you to write ``polymorphic algorithms,'' algorithms defined to work in their most natural settings and over a variety of types.

Define a system of polynomial equations S.

S := [3*x**3 + y + 1 = 0,y**2 = 4]

[y+3 x 3+1=0,y 2=4]

Type: List Equation Polynomial Integer

Solve the system S using rational number arithmetic and 30 digits of accuracy.

solve(S,1/10**30)

[[y=-2,x=1757879671211184245283070414507 2535301200456458802993406410752],[y=2,x=-1]]

Type: List List Equation Polynomial Fraction Integer

Solve S with the solutions expressed in radicals.

radicalSolve(S)

[[y=2,x=-1],[y=2,x=--3+1 2],[y=2,x=-3+1 2],[y=-2,x=1 3 3],[y=-2,x=-1 3-1 2 3 3],[y=-2,x=--1 3-1 2 3 3]]

Type: List List Equation Expression Integer

While these solutions look very different, the results were produced by the same internal algorithm! The internal algorithm actually works with equations over any ``field.'' Examples of fields are the rational numbers, floating point numbers, rational functions, power series, and general expressions involving radicals.

### 0.1.10 Extensibility

Users and system developers alike can augment the Axiom library, all using one common language. Library code, like interpreter code, is compiled into machine binary code for run-time efficiency.

Using this language, you can create new computational types and new algorithmic packages. All library code is polymorphic, described in terms of a database of algebraic properties. By following the language protocols, there is an automatic, guaranteed interaction between your code and that of colleagues and system implementers.

Book Contents Next Section 0.2 A Technical Introduction Book Index