# Alternatives to Mathematica

looking to introduce a mathematics program in my work, I would have 2 uses:

• In a classroom (high school level), providing good visualisation of physics ideas, and making my lecture more interactive. An example is the Mathematica demonstrations project, or simple interactive plots.
• Symbolic computation, I work with noncommutative geometry, algebras, etc.

I have very limited experience with mathematics programs and zero with programming. I use Ubuntu at work and a Mac at home. I avoid the terminal most of the time, but I use it when it seems the only solution (with a lot of copy pasting). I use Latex to write mathematics.

Mathematica seems amazing and easy, but if the school license seems a bit expensive with the current exchange rate, the one for research is out of the question.

The Jupyter notebook and the Sagemath alternatives seems nice, but I don't know Python, not sure how complicated it's going to be implementing them, and how much time consuming could be producing simple presentations.

A few questions then:

• Are those my best alternatives?
• Are they good for my classroom like I explained?
• How difficult would be implementing them compared with Mathematica?
• Sagemath seems to have a bunch of different languages, should I focus in a specific one (like Maxima, or R)?
• Do you have the same license affordability issues with MAPLE? If not, consider that, – Mark L. Stone Jan 23 '17 at 1:10
• Sagemath is probably the best freeware available for symbolic manipulation. It is not difficult to program in general, and there are lots of tutorials on how to use it. The main thing you would need to get used to is declaring datatypes and working with arrays (like matrices, vectors, etc...). The only downside to it is no graphical user interface, but in the end, even with mathematica, you can't do everything via gui buttons alone. – Paul Jan 23 '17 at 18:24
• MAPLE seems to be just a bit less expensive for academic license, but still a lot. There's no high school teacher license from what I could see... – Ricardo Kullock Jan 23 '17 at 19:16

Having used Mathematica, then trying Sage, and now SymPy/SymEngine in Julia, the clear winner is SymEngine.jl. Sage was hard to get working, was very slow, and I found it very hard to develop my own algorithms (which would get decent performance. That's the key: you can write algorithms for it, but they won't necessary be speedy!). The syntax can be really hard to learn too.

While I still enjoy Mathematica's notebook, SymEngine.jl has a lot going for it. Even SymPy.jl used from Julia is a very good experience (better than using in Python). [SymEngine.jl is the C++ re-write of SymPy]. First of all, they're free. But most of all, it works as part of Julia, and works naturally through dispatch. If you have expressions a and b, then to make the expression a+b, the code is... a+b. Everything just works via proper dispatches. I mean, everything. You don't even need to really know much about the packages themselves. Julia provides a generic fallback for inv(A) which takes an inverse of a matrix. If you have a matrix of symbolic expressions, then because symbolic expressions has + and / defined, by extension inv(A) just works. You can even do absurd things with them like throw them in a numerical ODE solver and it'll just work like it's a number, and give out the symbolic expression for the solution after n steps. So if you know Julia and its Base library, then you already know all of the commands for SymEngine.jl/SymPy.jl. Also, every type-stable Julia function you write compiles down to something with C performance, so you don't have to worry there either. So you tend to just use them like normal Julia numbers with a few special functions (like differentiate) and everything is fast: makes it really easy to use.

The only thing that's missing is the beautiful notebook. You can use a Jupyter notebook, but it's still not the same because the Mathematica one where you code actually has fractions and all of that. But the performance and productivity increase definitely makes up for the lack of notebook.

• I didn't see this when I searched for free alternatives, I'll take a look, thanks! – Ricardo Kullock Jan 23 '17 at 19:19
• Julia is still very new, so older threads don't tend to mention it (quite yet). – Chris Rackauckas Jan 23 '17 at 19:31

Sage would be perfect for classroom use. I once assisted a professor with classroom demonstrations of Physics, and it worked out pretty well.

Working with Sage does not require advanced programming knowledge. Students would be able to do it without breaking their heads like in a usual programming class. You can get started with this tutorial or this book. The only thing in my opinion that makes it "harder" than Mathematica is the text-based input. In Mathematica you have a toolbox from which you can click integral signs and so on, and you can pretty much give input the way written equations look. In Sage, everything has to be done with text. $\int\limits_{-\infty}^\infty e^{-x^2} dx$ might be more intuitive than integral(e^(-x^2), x,-oo,oo). Otherwise programming with Sage is no more difficult than doing it in Mathematica.

Instead of focusing on Maxima or R or the other possible extensions, I suggest that you work with the Sage language itself. These extensions can only do one thing each, and you will only need to go for these extensions in advanced cases.

Finally, I don't know how good Sage is going to be for research level work. I made figures for my first paper in Sage, but have found that there are integrals that Mathematica can do but Sage cannot.

• Thanks! I wasn't hopping to use the toolbox anyway, I prefer using only the keybord, I was wandering if the code is more complicated. If you say it is no more difficult then Mathematica then perhaps I should give it a try. – Ricardo Kullock Jan 23 '17 at 19:18