Many years ago, when I was a grad student, I bought a student-discount copy of Mathematica, the symbolic computer algebra system. It was crucial to finishing my doctoral thesis: I pretty quickly got beyond the point where I could safely do the algebra involved in my research by hand without making a fatal mistake somewhere. I knew some people who had superhuman ability at manipulating page-long expressions without screwing up a minus sign, but I definitely couldn't.
Unfortunately, that old copy of Mathematica (for the Mac OS of the time) was soon orphaned by Apple's many major OS and hardware changes, and stopped working long ago. And Mathematica is a really expensive piece of software, especially if you're not buying the student edition. Even the stripped-down "Home Edition" costs hundreds of dollars! There are alternatives, but until recently, the most viable ones (Maple, Macsyma) were all costly commercial products too.
Wolfram improved matters greatly by providing a free public front end in
Wolfram Alpha. It's very nice for the purposes that many people will need, especially since it has a pretty good natural-language interface that means you don't really have to learn any special syntax to enter a problem. But it's limited to simple question/answer interactions rather than extended multi-stage calculations, and they often pull advanced features back behind the paywall (they clearly want you to buy a subscription).
In the past few years there have been several efforts at coming up with free alternatives: there's a free fork off an old version of Macsyma (the granddaddy of them all) called
Maxima, and a very cool Python library called
SymPy that you can use either interactively or scriptedly from within plain old Python, and a number of more specialized projects aimed at specific branches of mathematics.
I've been playing around with
Sage lately. It's an interesting system.
The idea behind it is to pull together as many of these systems as possible, including Maxima and SymPy and a bunch of other things, and give them a common front end, including a "notebook" interface similar to Mathematica's, in which you can record all the stages of an interactive calculation and modify and reevaluate them as needed. Since Sage tries not to reinvent the wheel, its notebook interface is not a specialized app, but a Web server that renders the notebooks in HTML; you interact with them in your Web browser. This also means they can be served remotely, and the Sage site even has a free server you can use to try it out. (There's also a crude browser that ships with Sage in case you don't want to use your regular browser for some reason; I haven't used it much, so don't know what its limits are.)
Like Mathematica, Sage can also translate its output into TeX format, and you can make it display the results in nicely formatted printing on the notebook page, I think using MathJax.
Sage also uses Python as its scripting language, but this is a modified version of Python that gets some infelicitous things out of the way: for instance, you can use ^ for exponentiation instead of bitwise xor, and the numbers default to Sage-native forms that lend themselves to arbitrary-precision math.
The main disadvantage of it is that it's a gigantic install, with a huge number of moving parts, and it may well be rough sledding installing it on some systems. SymPy might be a better choice if you want a more stripped-down option.
The other thing that bothers me a bit about most of these systems is that their graphics options, because they're designed to be cross-platform and made from highly portable bits, tend to be behind the times--though I can see the potential to remedy this. Sage's 3D plotting has to be done through something that can render in a Web browser. It's got several different "viewers" that can do this, either by rendering an image or with an interactive applet. But the default, and the only one that seems to combine a fairly full set of features and an interactive mode, is
Jmol, which is mainly intended as a viewer for chemical structures (but Sage uses it for function plotting).
There's nothing really wrong with Jmol, except that it depends on the Java browser plug-in. And Java in the browser is completely jacked up right now, especially on Macs, partly because of Oracle's behavior, partly because of the safeguards needed to avoid its security holes, and partly because Apple clearly wants Java to die, die, die. (I guess on Windows you have to endure the crapware that the installer dumps on you now, which the Mac version at least doesn't do.)
Java doesn't work at all in Chrome on the Mac, period. This is because Chrome has avoided going to 64-bit for fear of breaking 32-bit plugins, but Java is an oddball case that has dropped 32-bit support and now only runs in 64-bit browsers.
Java kind of sort of works in Safari, but its security controls are entirely broken half the time and wouldn't allow using Jmol at all until some kind of incomprehensible magic happened. If you try to use Jmol's option to open a separate resizable window for the interactive plot, it hangs Safari.
Curiously, the one browser in which the Jmol viewer seems to work completely OK is Firefox, but before you use it, you have to click through a stern warning from Sage telling you that it probably won't work right and you should use Chrome or Safari instead.
Aside from that, for sheer beauty and interactivity, Jmol's plotting pales by comparison with what you can get in the (now commercial) Graphing Calculator, or Grapher (the inferior replacement for Graphing Calculator that Apple now ships with Macs), or even the limited but very pretty 2D/3D plotting that Google's built-in calculator now supplies for free over the Web (try it: just type "x*y" or something into your browser's address or search bar; you'll need a very recent browser). It's frustrating that these souped-up power tools won't get you as nice a function plot as you can get just by typing a function into Google, though of course they'll graph a lot of things that Google can't.
The potential's there to make this better. One of the other options in Sage is a viewer that uses canvas3D/WebGL to render an interactive plot inline in the notebook with HTML5. But it's very bare-bones, and seems to only do unlabeled wireframe meshes, unless I'm missing something. It seems to me that it ought to be possible to make it at least as nice as Google's function plotter. I doubt I have the time to do this on my own, but I wouldn't be surprised if somebody is working on it.