# Introduction to Maxima

Start Maxima with the command "maxima". Maxima will display version information and a prompt. End each Maxima command with a semicolon. End the session with the command "quit();". Here's a sample session:

```[wfs@chromium]\$ maxima
Maxima 5.9.1 http://maxima.sourceforge.net
Using Lisp CMU Common Lisp 19a
Dedicated to the memory of William Schelter.
This is a development version of Maxima. The function bug_report()
provides bug reporting information.
(%i1) factor(10!);
8  4  2
(%o1)                      2  3  5  7
(%i2) expand ((x + y)^6);
6        5       2  4       3  3       4  2      5      6
(%o2) y  + 6 x y  + 15 x  y  + 20 x  y  + 15 x  y  + 6 x  y + x
(%i3) factor (x^6 - 1);
2            2
(%o3)       (x - 1) (x + 1) (x  - x + 1) (x  + x + 1)
(%i4) quit();
[wfs@chromium]\$
```

Maxima can search the info pages. Use the describe command to show all the commands and variables containing a string, and optionally their documentation. The question mark `?` is an abbreviation for `describe`:

```(%i1) ? integ

0: (maxima.info)Introduction to Elliptic Functions and Integrals.
1: Definitions for Elliptic Integrals.
2: Integration.
3: Introduction to Integration.
4: Definitions for Integration.
6: integerp :Definitions for Miscellaneous Options.
7: integrate :Definitions for Integration.
8: integrate_use_rootsof :Definitions for Integration.
9: integration_constant_counter :Definitions for Integration.
Enter space-separated numbers, `all' or `none': 6 5

Info from file /usr/local/info/maxima.info:
- Function: integerp (<expr>)
Returns `true' if <expr> is an integer, otherwise `false'.

`askinteger (expr, integer)' attempts to determine from the
`assume' database whether `expr' is an integer.  `askinteger' will
ask the user if it cannot tell otherwise, and attempt to install
the information in the database if possible.  `askinteger (expr)'
is equivalent to `askinteger (expr, integer)'.

attempt to determine if `expr' is an even integer or odd integer,
respectively.

(%o1)                         false
```

To use a result in later calculations, you can assign it to a variable or refer to it by its automatically supplied label. In addition, % refers to the most recent calculated result:

```(%i1) u: expand ((x + y)^6);
6        5       2  4       3  3       4  2      5      6
(%o1) y  + 6 x y  + 15 x  y  + 20 x  y  + 15 x  y  + 6 x  y + x
(%i2) diff (u, x);
5         4       2  3       3  2       4        5
(%o2) 6 y  + 30 x y  + 60 x  y  + 60 x  y  + 30 x  y + 6 x
(%i3) factor (%o2);
5
(%o3)                      6 (y + x)
```

Maxima knows about complex numbers and numerical constants:

```(%i1) cos(%pi);
(%o1)                          - 1
(%i2) exp(%i*%pi);
(%o2)                          - 1
```

Maxima can do differential and integral calculus:

```(%i1) u: expand ((x + y)^6);
6        5       2  4       3  3       4  2      5      6
(%o1) y  + 6 x y  + 15 x  y  + 20 x  y  + 15 x  y  + 6 x  y + x
(%i2) diff (%, x);
5         4       2  3       3  2       4        5
(%o2) 6 y  + 30 x y  + 60 x  y  + 60 x  y  + 30 x  y + 6 x
(%i3) integrate (1/(1 + x^3), x);
2 x - 1
2            atan(-------)
log(x  - x + 1)        sqrt(3)    log(x + 1)
(%o3)    - --------------- + ------------- + ----------
6             sqrt(3)          3
```

Maxima can solve linear systems and cubic equations:

```(%i1) linsolve ([3*x + 4*y = 7, 2*x + a*y = 13], [x, y]);
7 a - 52        25
(%o1)              [x = --------, y = -------]
3 a - 8       3 a - 8
(%i2) solve (x^3 - 3*x^2 + 5*x = 15, x);
(%o2)       [x = - sqrt(5) %i, x = sqrt(5) %i, x = 3]
```

Maxima can solve nonlinear sets of equations. Note that if you don't want a result printed, you can finish your command with \$ instead of ;.

```(%i1) eq_1: x^2 + 3*x*y + y^2 = 0\$
(%i2) eq_2: 3*x + y = 1\$
(%i3) solve ([eq_1, eq_2]);
3 sqrt(5) + 7      sqrt(5) + 3
(%o3) [[y = - -------------, x = -----------],
2                 2

3 sqrt(5) - 7        sqrt(5) - 3
[y = -------------, x = - -----------]]
2                   2
```

Maxima can generate plots of one or more functions:

```(%i1) eq_1: x^2 + 3*x*y + y^2 = 0\$
(%i2) eq_2: 3*x + y = 1\$
(%i3) solve ([eq_1, eq_2]);
3 sqrt(5) + 7      sqrt(5) + 3
(%o3) [[y = - -------------, x = -----------],
2                 2

3 sqrt(5) - 7        sqrt(5) - 3
[y = -------------, x = - -----------]]
2                   2
(%i4) kill(labels);
(%o0)                         done
(%i1) plot2d (sin(x)/x, [x, -20, 20]);
(%o1)
(%i2) plot2d ([atan(x), erf(x), tanh(x)], [x, -5, 5]);
(%o2)
(%i3) plot3d (sin(sqrt(x^2 + y^2))/sqrt(x^2 + y^2), [x, -12, 12], [y, -12, 12]);
(%o3)
```