Symbolic algebraic expressions
1 Example
2 API Reference
parse-sexpr
parse-infix
symalg-expr?
simplify
differentiate
evaluate
infix
latex
sexpr
9.2.900

Symbolic algebraic expressions🔗ℹ

Johannes Tax

 (require symalg) package: symalg

This library provides functions to parse and manipulate symbolic algebraic expressions. These expression can be constants, variables, arithmetic operations and exponentiations. Additionally trigonometric functions and logarithms are supported.

1 Example🔗ℹ

> (define expr (parse-infix "3*x^2 - 4*x + cos(x)"))
> (define expr-deriv (simplify
                       (differentiate expr)))
> expr-deriv

(add

 (list

  (num -4)

  (mul (list (num 6) (sym 'x)))

  (mul (list (num -1) (sin_ (sym 'x))))))

> (infix expr-deriv)

"-4 + 6 * x + -1 * sin(x)"

> (sexpr expr-deriv)

'(+ -4 (* 6 x) (* -1 (sin x)))

> (latex expr-deriv)

"-4 + 6 x -\\sin(x)"

> (define f (evaluate expr-deriv))
> (f 3)

13.858879991940134

2 API Reference🔗ℹ

procedure

(parse-sexpr s) → symalg-expr?

  s : any/c
Parses an s-expression and returns a corresponding symbolic algebraic expression. s can be an expression expr of the following form:

expr :

 

number?

 

| symbol?

 

| e

 

| pi

 

| (+ expr ...+)

 

| (- expr ...+)

 

| (* expr ...+)

 

| (/ expr expr)

 

| (expt expr expr)

 

| (log expr expr)

 

| (sin expr)

 

| (cos expr)

 

| (tan expr)

procedure

(parse-infix s) → symalg-expr?

  s : string?
Parses a string containing an infix expression and returns a corresponding symbolic algebraic expression. An infix expression can be an expression expr of the following form:

expr :

 

number?

 

| symbol?

 

| e

 

| pi

 

| (expr)

 

| expr + expr

 

| expr - expr

 

| expr * expr

 

| expr / expr

 

| expr ^ expr

 

| log(expr, expr)

 

| sin(expr)

 

| cos(expr)

 

| tan(expr)

procedure

(symalg-expr? e) → boolean?

  e : any/c
This predicate checks, if the argument denotes a symbolic algebraic expression that can be processed by the functions below.

procedure

(simplify e) → symalg-expr?

  e : symalg-expr?
Returns a simplified form of e. Simplification is mostly based on Joel S. Cohen’s Computer Algebra and Symbolic Computation.

Some examples:

> (infix (simplify (parse-infix "x+x")))

"2 * x"

> (infix (simplify (parse-infix "x^0")))

"1"

> (infix (simplify (parse-infix "2*x^2 + 4*x^2 + 5 - 6")))

"-1 + 6 * (x)^(2)"

> (infix (simplify (parse-infix "2*x^2 / x")))

"2 * x"

> (infix (simplify (parse-infix "2^x^4")))

"(2)^(4 * x)"

procedure

(differentiate e) → symalg-expr?

  e : symalg-expr?
The function differentiate computes the first derivation of a given symbolic algebraic expression.

Take into account that the resulting expression is not simplified automatically, a further call to simplify is necessary to bring it into a canonical form:

> (define expr (parse-infix "2*x^2 - x"))
> (infix (differentiate expr))

"(x)^(2) * 1 * 2 * (x)^(-1) + 0 * log(x) * 2 + (x)^(2) * 0 + 1 * -1 + x * 0"

> (infix (simplify (differentiate expr)))

"-1 + 4 * x"

procedure

(evaluate e) → (f number? ...+)

  e : symalg-expr?
Returns a function that evaluates the given symbolic algebraic expression. Parameters of the returned function are bound to variables (unbound symbols) of the symbolic algebraic expression in alphabetical order.

procedure

(infix e) → string?

  e : symalg-expr?
Returns the infix representation of a symbolic algebraic expression.

procedure

(latex e) → string?

  e : symalg-expr?
Returns the LaTeX math mode representation of a symbolic algebraic expression.

procedure

(sexpr e) → any/c

  e : symalg-expr?
Returns the s-expression representation of a symbolic algebraic expression.