Symbolic computation vs. numerical computation

I am curious as to what the current status is for symbolic computation, and future outlooks as well. Here are some questions I would like to pose :

1. What is the current outlook for symbolic computation ?
2. Will it replace numerical computation in the near future (is that even a possibility) ?
3. Can symbolic computation outperform numerical computation ?
4. What are advantages of symbolic computation over numerical, and vice versa ?
5. Is symbolic computation being used in any significant computational projects (with regards to size and importance)?

I don't think I can answer all of these, but I can give you some thoughts from what I have seen.

I think symbolic computation is a great tool, but it obviously most useful for problems that have analytical solutions and forms. Not every problem is really represented this way, however. So this is where numeric computation would probably prove a better option.

I am also not sure what you would define as outperforming numeric computation. But symbolic arithmetic should be slower than numeric, so it doesn't outperform with respect to efficiency. It is possible it could be better accuracy-wise, though, when you go and substitute values into the symbolic result versus the numeric result.

In terms of using symbolic math, we use it at work (I work on missile algorithms, simulations, machine learning, etc). We usually use it to precompute some intense algebraic quantity, like the eigenvectors and eigenvalues of a 4x4 matrix, and directly code the result to make the computation faster (it helps since our code is running on an embedded system). We use it a lot for that sort of thing. But outside of the embedded code, we don't use it much.

• I second this. Depending on what kind of work you do, there can be a lot of room for algebraic errors. So one pattern I follow is doing a bunch of work in something like Mathematica to be sure the algebra is correct, simplify it with the computer algebra system, and then get it to export to Matlab (e.g. library.wolfram.com/infocenter/MathSource/577 which is old and imperfect, but works). You can get the best of both worlds. If the generated matlab is too slow, at least you have a baseline to test against. Jan 11 '16 at 18:31
• "But symbolic arithmetic should be slower than numeric" how much slower? I have a question about this in SO, would you like to answer? stackoverflow.com/questions/45102633/… Jul 16 '17 at 13:33

Before answering much, I want to point out something very important that this question sounds like it should touch on: the fact that numeric computation is kind of meaningless without a symbolic part.

You don't just dump your problem onto a numeric solver and let it chug unless it's a very, very simple one (even then, someone spent a lot of time at the chalkboard designing that part of your CPU that adds two numbers). Normally, you have to pose your problem in as clear terms as possible, often using a pencil, and let it ferment. Can you simplify it? What's important? Anything that will hurt accuracy? Is it even posed right? If this is for work, is it worth your time? Has someone done it? Can you do better?

Then you pick a method to solve it. Maybe your first go you'll use a canned algorithm. Maybe it leaves something to be desired, and you start to specialize. Maybe your problem works much better with something slightly awkward, like a constraint, and then you have to extend your canned solution.

Often, almost all of the hard work is done by a guy with a pencil, paper, and keyboard; the labor of the computer actually making it real is worth peanuts in comparison. If not, then either the computation is very successful, the work was botched, or it was something that there's just really not a lot of space to do much symbolic work on (like machine learning).

You might think that as computers progress this becomes less true, but I disagree. As computers get more powerful we throw harder problems at them, these harder problems require more manual effort to even try to approach. That manual effort is a mix of programming and, yes, symbolic manipulation.