# TomSym Interfaces

TomSym is most commonly used for setting up optimization problems for the TOMLAB suite of numeric solvers. However, it is also possible to use it by itself to generate m-code or to interface it with your own code.

## Connection to TOMLAB

When TOMLAB is used without tomSym, optimization problems are represented via a `Prob` structure, which typically contain function handles to the objective and constraint functions, and ideally also their derivatives. TOMSYM uses a symbolic representation of the objective and constraints to create this `Prob` structure, including the m-code needed, and pass it directly to the solver. This and enables the user to focus on the modelling task rather than tedious implementation details such as coding up the derivative for each nonlinear constraint.

Advanced users may extract the `Prob` structure from TomSym using the `sym2prob` function, and then manipulate this structure further before calling the solver. This makes it possible, for example, to optimize the autogenerated code, or set special solver flags.

When the same problem needs to be re-solved many times for varying values of a parameter, the fastest way is usually to create the `Prob` structure once, and then change the parameter value using `setparameter`

## Generating m-code with TOMSYM

It is possible to convert any TOMSYM object into MATLAB code via the `mcode` and `mfile` commands. This makes it possible, for example, to use derivatives computed by TOMSYM in your own applications outside of TOMLAB.

Because it is very inefficient to store large matrices as code, the `mcode`/`mfile` commands also return a cell array named `tempD` which contains the numeric data from the TOMSYM object. The `tempD` array must be provided whenever the code is executed.

## Connection to PROPT

PROPT is a solver for dynamic optimization problems which uses a collocation mehtod. PROPT is based on TOMSYM, and uses the same symbolic engine. The output of PROPT's `collocate` family of functions is ordinary TOMSYM arrays which means that PROPT and TOMSYM code can be mixed freely.