Returns the absolute value or vector length of x.

X = (x,y,z)
abs(X)
1/2
2    2    2
(x  + y  + z )

Returns the adjunct of matrix m. Adjunct is equal to determinant times inverse.

A = ((a,b),(c,d))
adj(A) == det(A) inv(A)
1

Returns 1 if all arguments are true (nonzero). Returns 0 otherwise.

and(1=1,2=2)
1

Returns the arc cosine of x.

arccos(1/2)
1
--- pi
3

Returns the arc hyperbolic cosine of x.

Returns the arc sine of x.

arcsin(1/2)
1
--- pi
6

Returns the arc hyperbolic sine of x.

Returns the arc tangent of y over x. If x is omitted then 1 is used.

arctan(1,0)
1
--- pi
2

Returns the arc hyperbolic tangent of x.

Returns the angle of complex z.

arg(2 - 3i)
arctan(-3,2)

Returns a solution to the Bessel differential equation.

besselj(x,1/2)
1/2
2    sin(x)
-------------
1/2  1/2
pi    x

The result of evaluating a symbol can differ from the symbol's binding. For example, the result may be expanded. The binding function returns the actual binding of a symbol.

p = quote((x + 1)^2)
p
2
p = x  + 2 x + 1
binding(p)
2
(x + 1)

Returns the coefficient of xk yn-k in (x + y)n. Binomial and choose are the same function.

binomial(52,5)
2598960

Returns the smallest integer greater than or equal to x.

ceiling(1/2)
1

If x is true (nonzero) then continue in a script, else stop. Use A=B or A==B to test for A equals B.

A = 1
B = 1
check(A=B) -- script stops here if A not equal to B

Returns the number of combinations of n items taken k at a time. The following example computes the number of poker hands.

choose(52,5)
2598960

Returns expression x with circular and hyperbolic functions converted to exponentials.

circexp(cos(x) + i sin(x))
exp(i x)

Clears all symbol definitions.

Returns complex z in polar form with base of negative 1 instead of e.

clock(2 - 3i)
1/2     arctan(-3,2)/pi
13    (-1)

Returns the coefficient of xn in polynomial p.

p = x^3 + 6x^2 + 12x + 8
coeff(p,x,2)
6

Returns a cofactor of matrix m. The cofactor matrix is the transpose of the adjunct of m. This function returns the cofactor component at row i and column j.

A = ((a,b),(c,d))
1

Returns the complex conjugate of z.

conj(2 - 3i)
2 + 3 i

Returns tensor a summed over indices i and j. If i and j are omitted then 1 and 2 are used. The expression contract(m) computes the trace of matrix m.

A = ((a,b),(c,d))
contract(A)
a + d

Returns the cosine of x.

cos(pi/4)
1
------
1/2
2
cos(arctan(y,x))
x
--------------
1/2
2    2
(x  + y )

Returns the hyperbolic cosine of x.

circexp(cosh(x))
1             1
--- exp(-x) + --- exp(x)
2             2

Returns the cross product of vectors u and v. It is OK to redefine cross. This is the default definition.

cross(u,v) = (u v - u v,
u v - u v,
u v - u v)

Returns the curl of vector u. It is OK to redefine curl. This is the default definition.

curl(u) = (d(u,y) - d(u,z),
d(u,z) - d(u,x),
d(u,x) - d(u,y))

Returns the partial derivative of f with respect to x.

d(x^2,x)
2 x

Note: Argument f can be a tensor of any rank. Argument x can be a vector. When x is a vector the result is the gradient of f.

F = (f(),g(),h())
X = (x,y,z)
d(F,X)
d(f(),x)   d(f(),y)   d(f(),z)

d(g(),x)   d(g(),y)   d(g(),z)

d(h(),x)   d(h(),y)   d(h(),z)

Returns the definite integral of f with respect to x evaluated from a to b. The argument list can be extended for multiple integrals as shown in the following example.

f = (1 + cos(theta)^2) sin(theta)
defint(f, theta, 0, pi, phi, 0, 2pi) -- integrate over theta then over phi
16
---- pi
3

Returns the degree of polynomial p(x).

deg(x^3,x)
3

Returns the denominator of expression x.

denominator(a/b)
b

Returns the determinant of matrix m.

A = ((a,b),(c,d))
det(A)
a d - b c

Returns the dimension of the nth index of tensor a. Index numbering starts with 1.

A = ((1,2),(3,4),(5,6))
dim(A,1)
3

Returns the divergence of vector u. It is OK to redefine div. This is the default definition.

div(u) = d(u,x) + d(u,y) + d(u,z)

Evaluates each argument from left to right. Returns the result of the last argument.

do(A=1,B=2,A+B)
3

Returns the dot or matrix product of vectors, matrices, and tensors.

-- solve for X in AX=B
A = ((1,2),(3,4))
B = (5,6)
X = dot(inv(A),B)
X
-4

X =
9
---
2

Draws a graph of f(x). Drawing ranges can be set with xrange and yrange.

xrange = (0,1)
yrange = (0,1)
draw(x^2,x)

Symbol e is initialized to the natural number e. It is OK to clear or redefine e and use the symbol for something else.

e^x
exp(x)

Computes eigenvalues and eigenvectors numerically. Matrix m is required to be both numerical and symmetric. Eigenvectors are returned in Q and eigenvalues are returned in D. Each row of Q is an eigenvector. Each diagonal element of D is an eigenvalue.

A = ((1,2),(2,1))
eigen(A)
dot(transpose(Q),D,Q)
1.0   2.0

2.0   1.0

Error function of x.

Complementary error function of x.

Returns f evaluated at x equals a.

eval(x^2 + 3,x,0)
3

Returns the exponential of x.

exp(i pi)
-1

Returns the partial fraction expansion of the ratio of polynomials r in x.

p = (x + 1)^2
q = (x + 2)^2
expand(p/q,x)
2            1
- ------- + -------------- + 1
x + 2      2
x  + 4 x + 4

Returns the cosine of z in exponential form.

expcos(z)
1              1
--- exp(i z) + --- exp(-i z)
2              2

Returns the hyperbolic cosine of z in exponential form.

expcosh(z)
1             1
--- exp(-z) + --- exp(z)
2             2

Returns the sine of z in exponential form.

expsin(z)
1                1
- --- i exp(i z) + --- i exp(-i z)
2                2

Returns the hyperbolic sine of z in exponential form.

expsinh(z)
1             1
- --- exp(-z) + --- exp(z)
2             2

Returns the tangent of z in exponential form.

exptan(z)
i             i exp(2 i z)
---------------- - ----------------
exp(2 i z) + 1     exp(2 i z) + 1

Returns the hyperbolic tangent of z in exponential form.

exptanh(z)
1             exp(2 z)
- -------------- + --------------
exp(2 z) + 1     exp(2 z) + 1

Factors integer n.

factor(10!)
8  4  2  1
2  3  5  7

factor(p,x)

Factors polynomial p(x). The polynomial should be factorable over integers. The argument list can be extended for multivariate polynomials.

p = 2x + x y + y + 2
factor(p,x,y)
(x + 1) (y + 2)

Note: Factor returns an unexpanded expression. If the result is assigned to a symbol, evaluating the symbol will expand the result. Use binding to retrieve the unexpanded expression.

q = factor(p,x)
binding(q)
(x + 1) (y + 2)

Returns the factorial of n. The expression n! can also be used.

100!
93326215443944152681699238856266700490715968264381621468592963895217599993229915
608941463976156518286253697920827223758251185210916864000000000000000000000000

Returns f excluding any terms containing a, b, etc.

p = x^2 + 3x + 2
filter(p,x^2)
3 x + 2

Returns expression x with rational numbers and integers converted to floating point values. The symbol pi and the natural number are also converted.

float(212^17)
39
3.52947 10

Returns the largest integer less than or equal to x.

floor(1/2)
0

For i equals j through k evaluate a, b, etc. The previous value of symbol i is restored after for completes.

for(k,1,3,A=k,print(A))
A = 1
A = 2
A = 3

Returns the greatest common divisor of expressions.

gcd(x,x y)
x

Returns the nth Hermite polynomial in x.

hermite(x,3)
3
8 x  - 12 x

Returns an n by n Hilbert matrix.

hilbert(3)
1     1
1    ---   ---
2     3

1     1     1
---   ---   ---
2     3     4

1     1     1
---   ---   ---
3     4     5

Symbol i is initialized to the imaginary unit (−1)1/2. It is OK to clear or redefine i and use the symbol for something else.

exp(i pi)
-1

Returns the imaginary part of complex z.

imag(2 - 3i)
-3

Returns the inner product of tensors. Inner and dot are the same function.

A = ((a,b),(c,d))
B = (x,y)
inner(A,B)
a x + b y

c x + d y

Note: Inner product is equivalent to an outer product followed by contraction.

contract(outer(A,B),2,3)
a x + b y

c x + d y

Returns the integral of f with respect to x.

integral(x^2,x)
1   3
--- x
3

Returns the inverse of matrix m.

A = ((1,2),(3,4))
inv(A)
-2       1

3        1
---    - ---
2        2

Returns 1 if n is a prime number. Returns zero otherwise.

isprime(2^31 - 1)
1

Set j=sqrt(-1) to use j for the imaginary unit instead of i.

j = sqrt(-1)
1/sqrt(-1)
-j

Returns the nth Laguerre polynomial in x. If argument a is omitted then zero is used.

laguerre(x,3)
1   3    3   2
- --- x  + --- x  - 3 x + 1
6        2

The result of the previous calculation is stored in last.

212^17
3529471145760275132301897342055866171392
last^(1/17)
212

Note: Symbol last is an implied argument when a function has no argument list.

212^17
3529471145760275132301897342055866171392
float
39
3.52947 10

Returns the least common multiple of expressions.

lcm(x,x y)
x y

Returns the leading coefficient of polynomial p(x).

3

Returns the nth Legendre polynomial in x. If m is omitted then zero is used.

legendre(x,3)
5   3    3
--- x  - --- x
2        2

Evaluates expression x and returns the result as a string in prefix notation. Useful for debugging scripts.

lisp(x^2 + 1)
(+ (^ x 2) 1)

Returns the natural logarithm of x.

log(x^y)
y log(x)

Returns the magnitude of complex z. Mag treats undefined symbols as real while abs does not.

mag(x + i y)
1/2
2    2
(x  + y )

Returns the remainder of integer a divided by integer b.

mod(10,7)
3

Returns 0 if x is true (nonzero). Returns 1 otherwise.

not(1=1)
0

Returns all roots, both real and complex, of polynomial p(x). The roots are computed numerically. The coefficients of p can be real or complex.

Returns 1 if x is a rational or floating point number. Returns 0 otherwise.

number(1/2)
1

Returns the numerator of expression x.

numerator(a/b)
a

Returns 1 if at least one argument is true (nonzero). Returns 0 otherwise.

or(1=1,2=2)
1

Returns the outer product of tensors. Also known as the tensor product.

A = (a,b,c)
B = (x,y,z)
outer(A,B)
a x   a y   a z

b x   b y   b z

c x   c y   c z

Symbol for π.

exp(i pi)
-1

Returns complex z in polar form.

polar(x - i y)
1/2
2    2
(x  + y )    exp(i arctan(-y,x))

Use ^ to raise something to a power. Use parentheses for negative powers.

x^(-2)
1
----
2
x

Returns the nth prime number. The domain of n is 1 to 10000.

prime(100)
541

Evaluate expressions and print the results. Useful for printing from inside a for loop.

for(j,1,3,print(j))
j = 1
j = 2
j = 3

For i equals j through k evaluate f. Returns the product of all f.

product(j,1,3,x + j)
3      2
x  + 6 x  + 11 x + 6

Returns expression x without evaluating it first.

p = quote((x + 1)^2)
binding(p)
2
(x + 1)
p = quote(p) -- clear symbol p
binding(p)
p

Returns the quotient of polynomial p(x) over q(x).

p = x^2 + 1
q = x + 3
quotient(p,q,x)
x - 3
p - q quotient(p,q,x) -- remainder of p/q
10

Returns the number of indices that tensor a has.

A = ((1,0),(0,1))
rank(outer(A,A,A))
6

Returns expression x with everything over a common denominator.

rationalize(1/a + 1/b + 1/2)
2 a + a b + 2 b
-----------------
2 a b

Note: Rationalize returns an unexpanded expression. If the result is assigned to a symbol, evaluating the symbol will expand the result. Use binding to retrieve the unexpanded expression.

f = rationalize(1/a + 1/b + 1/2)
binding(f)
2 a + a b + 2 b
-----------------
2 a b

Returns the real part of complex z.

real(2 - 3i)
2

Returns complex z in rectangular form.

rect(exp(i x))
cos(x) + i sin(x)

Returns the values of x such that polynomial p(x) equals zero. The polynomial should be factorable over integers. Returns a vector for multiple roots.

roots(x^2 + 3x + 2,x)
-2

-1

Returns expression x in a simpler form.

simplify(sin(x)^2 + cos(x)^2)
1

Returns the sine of x.

sin(pi/4)
1
------
1/2
2
sin(arctan(y,x))
y
--------------
1/2
2    2
(x  + y )

Returns the hyperbolic sine of x.

circexp(sinh(x))
1             1
- --- exp(-x) + --- exp(x)
2             2

Returns the square root of x.

sqrt(10!)
1/2
720 7

Prints memory statistics.

status
block_count 1
free_count 99258
gc_count 1
bignum_count 370
string_count 0
tensor_count 5

In a script, it does what it says.

Evaluates expression x and returns the result as a string. Useful for testing scripts.

string((x + 1)^2) == "x^2 + 2 x + 1"
1

Substitutes a for b in c and returns the result.

subst(x,y,y^2)
2
x

For i equals j through k evaluate f. Returns the sum of all f.

sum(j,1,5,x^j)
5    4    3    2
x  + x  + x  + x  + x

Returns the tangent of x.

simplify(tan(x) - sin(x)/cos(x))
0

Returns the hyperbolic tangent of x.

circexp(tanh(x))
1             exp(2 x)
- -------------- + --------------
exp(2 x) + 1     exp(2 x) + 1

Returns the Taylor expansion of f(x) near x equals a. If argument a is omitted then zero is used. Argument n is the degree of the expansion.

taylor(sin(x),x,5)
1    5    1   3
----- x  - --- x  + x
120        6

If argument a is true (nonzero) then b is returned, else if c is true then d is returned, etc. If the number of arguments is odd then the last argument is returned if all else fails. Use A=B or A==B to test for A equals B.

A = 1
B = 1
test(A=B,"yes","no")
yes

Set trace=1 in a script to print the script as it is evaluated. Useful for debugging.

trace = 1

Note: The contract function is used to obtain the trace of a matrix.

Returns the transpose of tensor a with respect to indices i and j. If i and j are omitted then 1 and 2 are used. Hence a matrix can be transposed with a single argument.

A = ((a,b),(c,d))
transpose(A)
a   c

b   d

Set tty=1 to print results in a flat format.

tty = 1
(x + 1/2)^2
x^2 + x + 1/4

Returns an n by n identity matrix.

unit(3)
1   0   0

0   1   0

0   0   1

Returns a null tensor with dimensions i, j, etc. Useful for creating a tensor and then setting the component values.

A = zero(3,3)
for(k,1,3,A[k,k]=k)
A
1   0   0

A = 0   2   0

0   0   3