Maxima - Using its symbolic math capabilities:
The following table develops progressively more sophisticated uses of Maxima as a symbolic math tool. Remember, you do not need to use or memorize all of this table at once - simply go up to the point that your current needs dictate, and return to this table when they become more extensive.
Note: in the third column some expressions have been typeset for greater ease of reading.
 Topic Discussion Maxima Input Maxima Output Basic typing Remember, use a semicolon and the enter key to terminate input. (2+5/6-sqrt(4))^2; 25 -- 36 Using the previous line The % symbol tells Maxima to use the result of the previous calculation. %+1; 61 -- 36 Using a line by name Alternatively, you can refer to a result you wish to use by the name of its output line. D2+1; 97 -- 36 Numeric evaluation To tell Maxima to calculate a floating point result, use the float function. float(%); 2.694444444444445 Defining a function To define a function: give it a name, followed by its independent variable in parentheses, followed by the symbols :=, followed by its definition. f1(x):=x^2-5*x+6; 2 f1(x) := x - 5 x + 6 Using a function Once defined, you can use a function in an intuitive way. f1(5); 6 Assigning a value to a variable The : sign assigns a value to a variable. a:5; 5 The variable assignment will now be used everywhere in place of the variable name. f1(a); 6 Defining an equation The = sign defines an equation. x=1-b*y; x = 1 - b y Solving an equation An equation can be readily solved for any of its variables, if a simple expression exists. solve(%,y); x - 1 [y = - -----]          b Another example, yielding both roots of a quadratic. solve(x^2+2*x-3=0,x); [x = - 3, x = 1] In order to use any of the results from a solve step, we need to "extract" them from the output list. %[2]; x = 1 Plotting a function Let's look at a plot of our function and see that the roots tally. The second argument used by the plot2d function is a list, and is indicated by square brackets ([]). This particular list specifies the x-range of interest. plot2d(x^2+2*x-3=0,[x,-4,2]); Systems of equations Maxima can also solve systems of equations, if the equations and variables of interest are presented to it as lists. solve([x+3*y=3,2*x+5*y=5],[x,y]); [[x = 0, y = 1]] Plotting multiple functions To plot multiple functions, we use a list of their names as the first argument in the plot2d function. Let's use this feature to check the previous result. plot2d([(3-x)/3,(5-2*x)/5],[x,-1,1]); Solving equations numerically Even when an analytic solution cannot be found, Maxima can in many cases solve the equation numerically. Let's first examine this seventh-order polynomial by plotting it. plot2d(x^7-5*x^6+4*x^4-5*x^2+x+2,[x,-1,1]); We see two roots between -1 and 1. To get their exact values, we load the newton routine, and use it with a guess to the right of the root we wish to get. load("newton"); /sw/share/maxima/5.9.0rc3/share/numeric/newton.mac newton(x^7-5*x^6+4*x^4-5*x^2+x+2,1); 8.194213634964119B-1 We repeat the process for the second root. newton(x^7-5*x^6+4*x^4-5*x^2+x+2,0); - 5.763042928902195B-1 Functions of multiple variables Multivariate functions are defined as before, but separating variables with commas in the definition. f2(x,y):=sin(x^2+y^2); 2   2 f2(x, y) := SIN(x + y ) f2(1,4); SIN(17) float(%); - .9613974918795568 3D Plots These are created as before, but using the plot3d command, and with separate lists for the ranges of the x and y axes. plot3d(f2(x,y),[x,-1,1],[y,-1,1]); Factoring Polynomials Maxima can factor some polynomials. factor(x^2+2*x+1); 2 (x + 1) Expanding Polynomials Or expand them expand(%); 2 x + 2 x + 1 Simplifying Trigonometric expressions Much the same can be accomplished for trigonometric expressions. trigsimp(sin(x)^2+cos(x)^2); 1 Expanding Trigonometric expressions As with their expansion. trigexpand(cos(x+3*y)); trigexpand(%); expand(%); Simplifying rational expressions In many cases, Maxima can simplify rational expressions fullratsimp((x^2+2*x+1)/(x+1)+1/(4*x+3)); Expanding rational expressions Or expand them. ratexpand((x^2-1)/(x+2)); Substituting the Results of One Calculation Into Another We can save ourselves quite a bit of typing by using substitutions. First, we isolate the result we wish to substitute. solve(x^2-1=0,x); [x = - 1, x = 1] %[2]; x = 1 Then, we perform our substitution subst(%,y=3*x-11); y = - 8 Calculating limits Let's create an interesting function, and calculate its limit as x approaches 0 f3(x):=sin(x)/x; SIN(x) f3(x) := ------            x limit(f3(x),x,0); 1 To calculate the limit from above, we simply add PLUS (or MINUS from below) to our entry. limit(tan(x),x,%PI/2,PLUS); MINF limit(tan(x),x,%PI/2,MINUS); INF Simple Differentiation We can differentiate any function with respect to a given variable diff(c*x^2-sin(d*x),x); 2 c x - d COS(d x) Higher Order Differentiation Higher order differentiation is also readily available. diff(x^3,x,3); 6 Simple Integration We can also perform indefinite integration on a function (assuming a simple closed form for the answer exists and is computable by Maxima). integrate(cos(3*x),x); SIN(3 x) --------    3 Definite Integration Or definite integration, if we enumerate the lower and upper limit. integrate(cos(3*x),x,0,%PI/2); 1 - -   3 Numeric Integration In cases where a closed form integral is unavailable, Maxima can compute the result numerically. integrate(sin(sin(x)),x,0,1); romberg(sin(sin(x)),x,0,1); .4306059236425572 Summation Summations can be written out. sum(1/(n^2),n,1,INF); If desired, they can be evaluated by setting SIMPSUM to TRUE. SIMPSUM:TRUE; TRUE sum(1/(n^2),n,1,INF); 2 %PI ----  6 Products Products work in much the same way. product(1/(n^2),n,1,10); 1 -------------- 13168189440000 Series Expansion Series expansions can also be computed. Let's calculate the series expansion of the sine function around x=0, up to the fifth power in x. taylor(sin(x),x,0,5); 3    5         x    x /T/ x - -- + --- + . . .         6    120 Since the output of taylor has special properties, we need to convert it into a polynomial. trunc(%); 3    5     x    x x - -- + --- + . . .     6    120 We can now compare our series approximation to the original function. plot2d([%,sin(x)],[x,0,%PI]);

We welcome your feedback on this workflow/tutorial - please email us at symmath@hippasus.com