Maxima is a computer algebra system that can be used to perform many computation, i did not know that it exists until recently, it is simply amazing.
I never used maple, because it is a “closed to control users” software, and even when i wanted to just try it, the version provided at my university for free for students did not work under my archlinux, it was freezing up after 2,3 seconds.
Maxima can do a lot, the nice thing also is that it has emacs support, just install maxima+emacs, open emacs then M-x imaxima for latex style or maxima for normal style: you need to add it to the load path of emacs, you can do that by adding the following lines to your $HOME/.emacs
(add-to-list 'load-path "/usr/share/maxima/5.23.2/emacs/")
(autoload 'maxima-mode "maxima" "Maxima mode" t)
(autoload 'imaxima "imaxima" "Frontend for maxima with Image support" t)
(autoload 'maxima "maxima" "Maxima interaction" t)
(autoload 'imath-mode "imath" "Imath mode for math formula input" t)
(setq imaxima-use-maxima-mode-flag t)
Replace “/usr/share/maxima/5.23.2/emacs/” with the correct path of your installation
Here is a screenshot of the latex style (imaxima):

You can write function, macros, … and put them in $HOME/.maxima/, the you can load a specific file by calling load (“filename”).
In octave, resolution of linear system define by matrices can be done by doing A\b, where A is the matrix of the variables coefficient, and b is the rvalue (A.X=b), there is no such thing in maxima, however writing this is very easy, here is what i did:
msolve(M,X,b):=block([R],
s: M.X,
list: makelist(s[i, 1] = b[i, 1], i, 1, length(s)),
listX: makelist(X[i, 1], i, 1, length(X)),
R: solve(list,listX),
return(R))$
Also one very important feature is that at any point you can call tex() on a specific variable and you will get the latex code that you can use directly in a latex document, you can use these lines in your latex document:
\documentclass[leqno]{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{setspace}
\usepackage{verbatim}
\usepackage[cmbase]{flexisym}
\usepackage{breqn}
\setkeys{breqn}{compact}
\setlength{\textheight}{200cm}
%%%%%%%%%% IMAXIMA %%%%%%%%
\setlength{\textwidth}{180mm}
\setlength{\oddsidemargin}{15mm}
\addtolength{\oddsidemargin}{-1in}
\setlength{\evensidemargin}{15mm}
\addtolength{\evensidemargin}{-1in}
\newcommand{\ifrac}[2]{\frac{#1}{#2}}
\newcommand{\ifracd}[2]{\frac{#1}{#2}}
\newcommand{\ifracn}[2]{\frac{#1}{#2}}
\newcommand{\isubscript}[2]{{#1}_{#2}}
\newcommand{\iexpt}[2]{{#1}^{#2}}
\newcommand{\isqrt}[1]{\sqrt{#1}}
\begin{document}
....
\end{document}
Note that, imaxima might use an old style latex code (like \pmatrix instead of \begin{pmatrix}) but these you can replace easily, once you get the tex code from maxima with tex() call.