Maxima is a free, open-source computer algebra system for Windows, Linux and macOS. It works with mathematical expressions to transform algebra, solve equations, calculate derivatives and integrals, and obtain numerical approximations. Its calculation engine runs in a terminal, while interfaces such as wxMaxima provide a document-based way to enter calculations and display results.
Working with expressions in Maxima
A calculation can retain variables and exact fractions instead of immediately turning everything into decimal numbers. Maxima returns expressions that can become the input to another operation. For example, an expanded polynomial can be differentiated and the resulting derivative factored without entering the original expression again.
Results have labels, and you can assign expressions to named variables for later use. The percent symbol refers to the most recent output. Ending a command with a semicolon displays its result; a dollar sign evaluates it without printing the output.
Expansion, factoring and rational expressions
Expansion multiplies out products and powers into sums of terms. Factoring works in the other direction, expressing a polynomial as a product of factors. Rational simplification handles fractions of polynomials and reduces common factors between the numerator and denominator.
Other operations extract a coefficient for a specified variable and power, or divide one polynomial by another to return the quotient and remainder. Coefficient extraction uses the expression’s existing form, so a factored expression may need to be expanded before the coefficient you want is visible to that operation.
Exact results and numerical precision
Maxima supports exact rational arithmetic and arbitrary-precision integers. When you need an approximation, float converts values to ordinary floating-point numbers, while bfloat uses variable-precision numbers. The latter also evaluates supported constants and mathematical functions numerically.
The fpprec setting controls the significant digits used in bigfloat arithmetic. It does not change ordinary floating-point calculations. A separate setting controls how many digits appear in printed output, allowing display precision and calculation precision to be handled independently.
Equation solving and calculus
Algebraic equations and numerical roots
You can supply a single equation and the variable to solve for, or lists of equations and unknowns for a simultaneous system. Maxima returns solution equations that can be substituted into later calculations. Linear systems have a dedicated solver, while polynomial systems can produce several sets of solutions.
Symbolic solving uses factoring and applicable algebraic methods. Numerical polynomial solvers instead return approximations of real and complex roots, with a bigfloat alternative available. Their input must be a polynomial; repeated roots can affect the accuracy of the numerical result.
For a numerical root of a more general function, you specify a search interval and optional error tolerances. The bracketed solver expects the function to have opposite signs at the endpoints and to produce numerical values within the interval. It searches that interval rather than returning every possible root.
Derivatives, integrals and assumptions
Differentiation accepts the expression, variable and derivative order. It can also calculate mixed partial derivatives across several variables. The output remains symbolic, so it can be simplified, evaluated at selected values or used in another expression.
Integration takes an expression and its variable, with optional endpoints for a definite integral. A successful symbolic calculation returns an antiderivative or definite value. If Maxima cannot evaluate an integral, it retains an integral expression in the result.
Some calculations depend on properties of a parameter, such as whether it is positive or negative. You can supply these assumptions in advance; otherwise, the integration routine may ask for them. Numerical integrators provide a separate route for approximating definite integrals over finite or infinite intervals.
Limits and series
Limits can approach a point from above, below or both sides, including limits at infinity. Taylor and Laurent expansions use a chosen expansion point and order. The returned series contains only the terms retained up to that order, with multivariable expansions available as well.
Differential equation solutions
Maxima’s analytic ordinary differential equation solver handles supported first- and second-order equation types. It can return an explicit or implicit solution with integration constants. Initial conditions or boundary values then determine those constants for a particular problem.
A numerical Runge–Kutta routine works with first-order equations or systems of them. You supply the derivative expressions, initial values, interval and fixed step. It returns sampled values in lists, which can be passed to the plotting functions to show how the solution changes.
Matrices and linear algebra
A matrix is built from row lists of equal length, and its entries can be numbers or symbolic expressions. Maxima can transpose matrices, calculate determinants and inverses, and obtain eigenvalues and eigenvectors. Symbolic entries let the results retain parameters rather than requiring numerical values at the outset.
The multiplication operator matters: an asterisk multiplies entries individually, while a dot performs matrix multiplication. The latter requires compatible row and column dimensions. Matrix inversion uses LU decomposition, and additional simplification can be applied to the resulting entries.
Eigenvalue calculations find roots of the matrix’s characteristic polynomial. When symbolic solving cannot obtain all those roots, the eigenvalue result can be incomplete. Assigning a matrix to another variable also shares the same object; the copy operation creates an independent matrix when one is needed.
Plotting functions and calculated data
Maxima computes points from an expression or takes supplied data and passes them to a plotting backend. Its two-dimensional plotting functions accept several kinds of input:
- Explicit functions plot the value of an expression across a chosen variable range.
- Implicit equations draw curves where the two sides of an equation agree.
- Parametric expressions supply the coordinates of a curve through a shared parameter.
- Discrete point lists display calculated or supplied measurements, with connecting segments available.
- Contour expressions show curves of equal values for a function of two variables.
You can show several curves together and control ranges, axis labels, legends, colors and grid settings. Three-dimensional plots display surfaces defined by two-variable functions or parametric coordinates. Interactive surface views can be rotated to inspect them from different sides.
Graph output can be saved as PNG, SVG, PDF or PostScript instead of displayed on screen. Gnuplot is a separate plotting program, while XMaxima can also act as a plotting interface. The selected ranges must allow numerical evaluation; undefined values and singularities affect the points available to draw.
Reusable calculations and saved output
User-defined functions apply an expression to different arguments, keeping a repeated calculation in one definition. Blocks allow several expressions and local variables within a function. Their result can be a number, symbolic expression, list or another object used by subsequent calculations.
Batch processing reads a text file of Maxima commands and evaluates them in sequence. It assigns labels to inputs and outputs just as an interactive session does. If a calculation needs information about a parameter, the batch can pause to obtain it.
The save operation stores selected variables, functions and results, or the current session state, as Lisp expressions. Loading the file restores those definitions and replaces existing bindings with matching names. Command text can also be kept separately for repeating the calculations that produced a result.
TeX and Fortran output
TeX output converts a mathematical expression into markup for inclusion in a larger document. It can be printed, written to a file or returned as a string. The output is a fragment rather than a complete standalone document.
Fortran output prints expressions or assignments in Fortran notation, including continuation lines for long statements. This transfers a calculated formula into another code workflow. It is statement output rather than a complete generated application.
wxMaxima documents
wxMaxima provides a separate document-based interface to the Maxima engine. Its menus and dialogs expose common commands, while autocompletion assists expression entry. Formatted mathematical results, inline plots and simple animations belong to that interface; the underlying algebraic and numerical calculations still come from Maxima.





