Saturday, December 14, 2013

Symbolic Computation

      

      I have always been amazed by the development of calculators over time. Couple decades ago, a calculator could only solve simple numerical computation such as addition, subtraction, multiplication and division. Thanks to the fast growth of Computer Science, calculators have been improved a lot so that they can solve complex mathematical expressions. However, the explosion of mobile devices nowadays makes many people want to design a math library or system on mobile devices in order to replace regular calculators. Such a system has to be able to do symbolic computation. 


      What is symbolic computation? Symbolic computation allows us to express mathematical problems in symbols and solve them using variables, formulas and functions. Values do not need to be assigned to variables until we want to. Symbolic computations give us more accurate results since they reduce the inaccuracy of doing mathematical problems by hands.  
       
      
      A symbolic computational system can do a lot of things including numerical computing, derivatives, integrals, and many other complex expressions. There are two most popular systems which are Maple and Wolfram. They both have very complicated graphical and computational features, which are implemented very well to handle complex expressions that cannot be solved by humans.

      In order to build such systems on mobile devices, there are several considerations to be considered.

  1.  Space: consider a simple expression like (a + 5) ^ 10. It expands to 3 terms, however (a + 5) ^ 200000 can expand up to 2000 terms. This might take some space (probably more than 1 Mb). Therefore, simple things get bigger very fast when you begin to compute with them. 
  2.  Time: The above polynomial looks simple, but if we want to take the derivative or integrate it over some interval might take quite long, so how long a mobile user would want to wait for an answer?
  3. Format: Mobile users always want simple inputs but beautiful outputs.
  4. Built-in library: To make this system portable, we need to have a library.
  5. Extensibility: To make the system bigger and more useful, users can add more functionality to it. 

      In conclusion, symbolic computing/programming plays an important role in solving a lot of mathematical problems that were created many centuries ago. It also builds a much stronger platform for a new kind of computing.