As a hobby, I have written a basic computer algebra system. My CAS handles expressions as trees. I have advanced it to the point where it can simplify expressions symbolically (i.e., sin(pi/2) returns 1), and all expressions can be reduced to a canonical form. The CAS can also differentiate expressions.

Using this paradigm, what kinds of algorithms are there for solving equations? An equation in my model would be represented as an (=) tree with two subtrees that are the left and right expressions. I know there is no "magic bullet" for solving all equations, but are there algorithms out there that are designed to symbolically solve an equation? If there aren't, what would be the general approach? What kind of classes can equations be split into (so that I might be able to implement an algorithm for each kind)? I don't want to use naive methods and then paint myself into a metaphorical corner.

  • $\begingroup$ This question is extremely broad. There is a whole field of computer algebra, producing new results continually. Perhaps a trip to the library is in order. $\endgroup$ – Dave Clarke Feb 6 '13 at 7:18
  • 1
    $\begingroup$ @DaveClarke Maybe gh403 could use some introductory pointers? A whole library can be daunting. $\endgroup$ – Raphael Feb 6 '13 at 7:57
  • 1
    $\begingroup$ You might find A=B by Petkovsek, Wilf and Zeilberger useful. $\endgroup$ – Raphael Feb 6 '13 at 7:58
  • $\begingroup$ @Raphael: I was thinking: Computer Algebra section. $\endgroup$ – Dave Clarke Feb 6 '13 at 8:57
  • $\begingroup$ @DaveClarke My library's searchy returns 430 hits for computer algebra. I have a feeling that "start at the top" is not going to be a fruitful strategy. $\endgroup$ – Raphael Feb 6 '13 at 9:20

The are some open source JAVA libraies with complete documentation for math/CAS like:

Jasymca, Java Algebra System and many more.

I think a good way is start with them and try to contribute more!

  • $\begingroup$ Hmmm. I will look into this. Any opinions on which documentation is clearest/best? I know that is rather subjective, but I have to start somewhere. $\endgroup$ – thirtythreeforty Feb 8 '13 at 7:58
  • $\begingroup$ @gh403: I recommend Jas! $\endgroup$ – Reza Feb 10 '13 at 0:20

Very long time ago I attempted to do symbolic differentiations. While my code sufficed to help me solve a particular problem, I got thereby the conviction that implementing a good efficient computer algebra system must be at least as hard as writing a good compiler for a programming language. (Think e.g. of doing integrations.)

I have no knowledge to answer your listed concrete questions, like on the other hand to point out that "solving equations" seems to be a too broad issue for getting answers for your questions, there being all sorts of equations (linear, non-linear, differential, integral, etc. etc.) that are to be handled differently.

As to literature references, I suggest that you at least take a look of the following books before proceeding further with your project:

K. O. Geddes et al., Algorithms for Computer Algebra.

J. Gathen and J. Gerhard, Modern Computer Algebra.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.