This project is a basic computer algebra system written in Javascript. I started work on it to implement numerical algorithms that I was learning. Most of the algorithms worked with polynomials and some matrices. Several methods lent themselves to implementing a graphical interface to work with. Then it occurred to me that I could build on both mathematics and software design to make an interesting project. The challenge of writing good, object-oriented, documented, tested, and useful code is what has been the secondary goal.
I realize I am reinventing the wheel somewhat but I feel like it is a good practice of knowledge and skill. The realm of math software is dominated mostly by native applications. There are exceptions like Wolfram Alpha but it is limited for non-paying customers. Javascript isn't the best language for scientific computation for a couple of reason but I don't think that means these capabilities should not be present on the web. This is still a learning project for me in a variety of ways but I hope to end with a useful application.
- Standard matrix operations (addition, subtraction, multiplication)
- Polynomial addition, subtraction, multiplication, division, exponentiation, evaluation (including multivariable polynomials)
- Piecewise Functions
- Naïve Gaussian Elimination
- Scaled Partial Pivot Gaussian Elimination
- LU Decomposition
- Basic Simpsons Rule
- Bisection method
- Romberg Extrapolation
- Trapezoid Rule
- Lagrange Interpolation
- First Degree Spline
- Second Degree Spline
- Natural Cubic Spline
- Orthogonal Polynomials
- Method of Least Squares
- 2D graphing
- Unit Tests for most Polynomial code
- Nearly complete JSDocs Documentation
- Web Workers assist graphing
- Export to SVG
- Function composition
- Add local storage (IndexedDB)
Fully generic algebraic expression parsing and representationdone- Implement a full suite of numeric algorithms
- Add remote storage (Riak or Mongo or similar)
3D graphing (with and without WebGl support)done- Differential equation support and graphing
- Console input and output
- Calculus support
- More unit tests