7.1

Symbolic algebraic expressions

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

1Example

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

2API Reference

 procedure 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 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 e : any/c
This predicate checks, if the argument denotes a symbolic algebraic expression that can be processed by the functions below.

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