The Eigenmath manual and additional support materials are available at eigenmath.org

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))
```
```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 x = 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(52,5)
```
```2598960
```

Note: binomial and choose are the same function.

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. Expression x can include the relational operators =, ==, <, <=, >, >=. Use the not function to test for inequality.

```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
```

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
```

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)
```

It is OK to use d as a variable name. It will not conflict with function d.

It is OK to redefine d as a different function. The function derivative, a synonym for d, can still be used to obtain a partial derivative.

Returns the definite integral of f with respect to x evaluated from a to b. The argument list can be extended for multiple integrals. For example, integral(f,x,a,b,y,c,d) is equivalent to integral(integral(f,x,a,b),y,c,d).

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

Returns the degree of polynomial p(x).

```p = (2x + 1)^3
deg(p,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 final argument.

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

Returns the dot product of vectors, matrices, and tensors. Also known as the matrix product.

```-- 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.

```e^x
```
```exp(x)
```

Note: It is OK to clear or redefine e and use the symbol for something else.

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 expression f evaluated at x equals a. The argument list can be extended for multivariate expressions. For example, eval(f,x,a,y,b) is equivalent to eval(eval(f,x,a),y,b).

```eval(x + y,x,a,y,b)
```
```a + b
```

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 numerical value n and returns the result.

```factor(12/35)
```
```  2
2  3
------
5 7
```

If n is a floating point value then a rational approximation of n is factored and returned.

```factor(float(pi))
```
``` 5 71
------
113
```

factor(p,x)

Factors polynomial p of x and returns the result. 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,y)
binding(q)
```
```(x + 1) (y + 2)
```

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

```20!
```
```2432902008176640000
```

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.

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

Note: The original value of i is restored after for completes. If symbol i is used for index variable i then the imaginary unit is overridden in the scope of for.

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.

```exp(i pi)
```
```-1
```

Note: It is OK to clear or redefine i and use the symbol for something else.

Returns the imaginary part of complex z.

```imag(2 - 3i)
```
```-3
```

Returns the inner product of vectors, matrices, and tensors. Also known as the matrix product.

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

c x + d y
```

Note: inner and dot are the same function.

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 associated Laguerre polynomial in x of order m. If m 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).

```leading(3x^2 + 1,x)
```
```3
```

Returns the nth associated Legendre polynomial in x of order m. 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 a divided by 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 vectors, matrices, and 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
```

Note: The original value of i is restored after product completes. If symbol i is used for index variable i then the imaginary unit is overridden in the scope of product.

Returns expression x without evaluating it first.

```quote((x + 1)^2)
```
```       2
(x + 1)
```

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

```p = x^2 + 1
q = x + 3
quotient(p,q,x)
```
```x - 3
```

Returns the number of indices that tensor a has.

```A = ((a,b),(c,d))
rank(A)
```
```2
```

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
```

Run script file. Useful for importing function libraries.

```run("Downloads/EVA.txt")
```

Note: file must be in the Downloads folder due to security requirements for apps distributed on the Mac App Store.

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
```

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
```

Note: The original value of i is restored after sum completes. If symbol i is used for index variable i then the imaginary unit is overridden in the scope of sum.

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 final argument is returned if all else fails. Expressions can include the relational operators =, ==, <, <=, >, >=. Use the not function to test for inequality. (The equality operator == is available for contexts in which = is the assignment operator.)

```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
```

Note: The argument list can be extended for multiple transpose operations. The arguments are evaluated from left to right. For example, transpose(A,1,2,2,3) is equivalent to transpose(transpose(A,1,2),2,3).

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
```