What is symbolic computation?

Amumu picture Amumu · May 6, 2013 · Viewed 16.9k times · Source

According to wiki:

In mathematics and computer science, computer algebra, also called symbolic computation or algebraic computation is a scientific area that refers to the study and development of algorithms and software for manipulating mathematical expressions and other mathematical objects

Does symbolic computation focus on symbol manipulation and computation? Lisp program is written in the form of an AST with atoms as leaves. Lisp is said to be language for symbolic computing. Does it mean that in symbolic computation, it is:

  • all about symbols (symbols are atoms or non-atom expressions in Lisp)
  • every symbol is assigned a semantic
  • symbolic computation is a paradigm that orients programmers to focus on working with symbols and semantics (a semantic can be an atom or expression that does something) and the relationships between symbols, as opposed to think that data structure and code are two separated entities.
  • program design is language design, based on symbol composition/manipulation and semantic assignment.

According to this question, the opposite of symbolic computation is numeric computation. What's the primary difference between these two? When I work with Octave (I'm studying it), I have to work with numbers a lot and have to guess the meaning of those magic numbers many times. Is this a numerical computation focus?

Answer

Eli picture Eli · Aug 31, 2016

Symbolic computation is one that emphasizes term rewriting over evaluation (e-value-ation, extracting the value). Symbols (also called expressions) are rewritable terms, values imply a loss or an end to rewritability. In a way, symbols are more abstract, values more concrete.

What's the answer to 3/9? A symbolic answer would be (a representation of) 1/3. A value answer would be 0.333333333, to however many decimals you care. Notice there's a loss of precision (and thus rewritability) here, 0.333333333 * 3 isn't quite 1 as it should.

A calculator (evaluating machine) will likely choke trying to evaluate (2^(74,207,281) − 1)/(2^(74,207,281) − 1) even though the answer is trivially just 1. There's no need to evaluate here when a mere rewrite would suffice.

And of course there's also the opposite case of equations so intractable to term rewriting that they can only be approximately answered through numerical methods.