This little document hopes to convince you that spending a few minutes learning to use the Symbolic Toolbox might save you hours of time. For further information look at the References

## Introduction

Matlab has lots of adds-ons (called *toolboxes*). One of the most
useful that we have installed is called the *Symbolic Toolbox*
which performs symbolic maths commands (factorising, simplifying,
integrating, differentiating, etc) and also has some solving routines. For
common operations it's easy to use - e.g.

- Integration -
`int('1/(1+x^2)')` - Simultaneous Linear Equations -
`[a,b]= solve('a+3*b=7','7*a-b=1.5','a','b')` - Harder Equations -
`[a,b]=solve('a^2+cos(b)=7','cosh(a)-b=1')`

To make the most of the Symbolic Toolbox you need to be aware of
a few concepts, in particular *symbolic objects*

## sym

With the Symbolic Math Toolbox comes a new matlab datatype - *symbolic
object*. Things of this type are created using the `sym` and
`syms`. *symbolic
object*s are essentially strings, but even if those strings contain
only digits, arithmetic operations will be different to those in
ordinary matlab. The following, for example, produces the result `5/6`
rather than `0.8333`.

a=sym(1)/sym(2) |

b=sym(1)/sym(3) |

a+b |

To convert a *symbolic object* into a number use `double` - e.g.

double(a+b) |

The command `x=sym('x')` creates a *symbolic object* called `x` which has the corresponding string representation `x` (i.e. in future `x` will be treated as a symbol entity). When (as in this case)
the symbol name matches the symbol's value it's easier to use the equivalent "`syms x`".
To evaluate a *symbolic object* for a particular value of a variable,
use `subs` - e.g.

syms x |

f=x^2-7*x+3 |

subs(f,x,5) |

Here `f` will automatically be a *symbolic object* so you can do

diff(f) |

## Using the symbolic toolbox from Matlab

The most common problem that
people have is with how Matlab and the symbolic toolbox interact.
If for instance you haven't made `x` a symbol and you try

int(1/(1+x^2)) |

matlab will say "`??? Undefined function or variable 'x'`" because
matlab's unhappy that `x` doesn't have a value. To get round this
you can quote the expression as a string (`int('1/(1+x^2)')`, or
define `x` to be a symbol as in the following

x=sym('x'); |

int(1/(1+x^2)) |

The following also works

[a,b]= solve('a+b=7','a-b=1','a','b') |

Note that the symbolic toolbox doesn't automatically know the values of variables you've set in matlab. So for example, if you try something similar to the simultaneous equations example above

seven=7; |

[a,b]= solve('a+b=seven','a-b=1','a','b') |

you'll find that `a` and `b` are given in terms of the symbol
`seven`. The answers are right, but not in a very useful form. By using matlab's
`eval` command you can make `seven` be evaluated, getting the
numerical answers, so adding the 2 lines below will print out '4' and '3'.

eval(a) |

eval(b) |

## assumptions

Sometimes the symbolic toolbox seems to struggle with a simple-seeming task. For example you might expect

simplify('(a^(1/n))^n)') |

to give you 'a'. In fact it doesn't simplify the expression at all, because of the possibility of variables being 0. You can get round this by forcing the variables to be positive when you make them symbolic - e.g.

syms a n positive |

simplify((a^(1/n))^n) |

## Useful Routines

`diff`differentiates. You can multiply differentiate. differentiates 3 times.diff('sin(x^2)',3) `int`- Indefinite or definite integration. For example integrates between x=2 and x=3. To get the final numerical answer (4.0111), useint('tan(x)+x^3',2,3) eval(int('tan(x)+x^3',2,3)) `dsolve`- Matlab's`ode23`and`ode45`functions can find numeric solutions to ODEs. The Symbolic toolbox's`dsolve`solves ODEs symbolically. For example, returnsdsolve('D2y = -a^2*y', 'y(0) = 1', 'Dy(pi/a) = 0') Here 'D' denotes differentiation with respect to the independent variable (by default 't'), and a number after 'D' denotes repeated differentiation.cos(a*t) `factor`works with expression or integers. Tryfactor(sym('12345678901234567890')) `collect`- collects terms. You can choose which term you want to focus on. For instance, collects in terms ofsyms x y collect((x+y)*(x^2+y^2+1), y)) `y`, outputtingy^3 + x*y^2 + (x^2 + 1)*y + x*(x^2 + 1) `simplify`simplifies expressions, evaluating numerically where possible. returnssyms a b c simplify(exp(c*log(sqrt(a+b)))) (a + b)^(c/2) `limit`finds limits. If you wanted to find the derivative of`x*x`the hard way you could do to get the answersyms x dx limit( ((x+dx)*(x+dx) - x*x)/dx, dx, 0) `2*x`as`dx`tends to 0.- latex -
If you want an expression to be expressed as LaTeX code, use the
`latex`command. For example, You can also represent expressions in Fortran and C usingsyms x f = taylor(log(1+x)); latex(f) `fortran`and`ccode`respectively.

## Using MuPad directly

The toolbox is based on MuPad. You can start MuPad from inside matlab by
typing `mupad`. It might take 30 seconds or so to start, but eventually
you'll see a menu-driven interface (see right) which makes common operations easy. Here's a
sample session

diff(x^2, x)

factor(x^3-y^3)/(x^4-y^4)

int(1/(x^2 + a), x)

This HTML output is produced by mupad's `export` option. It can also
produce PDF.

## References

- Mathworks' MuPAD page has links to tutorials (some over 500 pages long)
- Mathworks' Symbolic Math Toolbox page shows how to use MuPAD from within Matlab.

See Matlab - the Symbolic Toolbox based on Maple if your Matlab release is older than 2008b