## `solvers` -- an overview of MuPAD's solvers

#### Introduction

Besides the general `solve` command, MuPAD provides a variety of specialized solvers for special types of equations. The specialized solvers only handle a subclass of problems, but are more efficient than the general `solve`.

#### Call(s)

`detools::pdesolve(..)`
`linalg::matlinsolve(..)`
`linalg::matlinsolveLU(..)`
`linalg::vandermondeSolve(..)`
`linsolve(..)`
`numeric::linsolve(..)`
`numeric::matlinsolve(..)`
`numeric::fsolve(..)`
`numeric::odesolve(..)`
`numeric::odesolve2(..)`
`numeric::polyroots(..)`
`numeric::polysysroots(..)`
`numeric::realroot(..)`
`numeric::realroots(..)`
`numeric::solve(..)`
`numlib::mroots(..)`
`numlib::lincongruence(..)`
`numlib::msqrts(..)`
`polylib::realroots(..)`
`solve(..)`

#### Details

- The following types of equations can be solved:

  type of equation | available solvers
  systems of linear equations | `solve`
  | `linsolve`
  | `linalg::matlinsolve`
  | `linalg::matlinsolveLU`
  | `linalg::vandermondeSolve`
  | `numeric::linsolve`
  | `numeric::matlinsolve`
  univariate polynomial equations | `solve`
  | `polylib::realroots`
  | `numeric::solve`
  | `numeric::polyroots`
  systems of polynomial equations | `solve`
  | `numeric::solve`
  | `numeric::polysysroots`
  arbitrary univariate equations | `solve`
  | `numeric::solve`
  | `numeric::realroot`
  | `numeric::realroots`
  systems of arbitrary equations | `solve`
  | `numeric::solve`
  | `numeric::fsolve`
  inequalities | `solve`
  systems of ordinary differential | `solve`
  equations | `numeric::odesolve`
  | `numeric::odesolve2`
  systems of recurrence equations | `solve`
  partial differential equations | `detools::pdesolve`
  congruences | `numlib::lincongruence`
  | `numlib::mroots`
  | `numlib::msqrts`

- `detools::pdesolve` allows to solve partial differential equations. This first version of the solver is not yet very powerful; essentially only the method of characteristics has been implemented for quasi-linear first order equations.
- `linalg::vandermondeSolve` is the recommended solver for systems of linear equations with a coefficient matrix of Vandermonde type.
- `linalg::matlinsolve` solves systems of linear equations given by a coefficient matrix. The coefficient domain may be an arbitrary field.

  For coefficients of basic type such as expressions, integers, rationals, floating point numbers etc. we recommend to use `numeric::matlinsolve` instead.

- `linalg::matlinsolveLU` solves systems of linear equations over arbitrary fields with a coefficient matrix given by an LU-decomposition.
- `linsolve` is the recommended solver for systems of linear equations over arbitrary non-elementary coefficient domains. If the coefficients are of basic type such as expressions, integers, rationals, floating point numbers etc., then we recommend to use `numeric::linsolve` instead.
- `numeric::linsolve` is a fast numerical solver for systems of linear equations. It is also capable of computing exact symbolic solutions, if the coefficients are MuPAD expressions. If the solution is to be computed over some non-basic coefficient domain, then `linsolve` must be used.
- `numeric::matlinsolve` is a fast numerical solver for systems of linear equations given by a coefficient matrix. It is also capable of computing exact symbolic solutions, if the coefficients are MuPAD expressions. If the solution is to be computed over some non-basic coefficient domain, then `linalg::matlinsolve` must be used.
- `numeric::fsolve` is the general numerical solver for systems of arbitrary equations. It returns only one solution.
- `numeric::odesolve` is the numerical solver for initial value problems of systems of ordinary differential equations.
- `numeric::odesolve2` encapsulates `numeric::odesolve` in a function. This provides a convenient interface to `numeric::odesolve`.
- `numeric::polyroots` computes numerical approximations of all roots of a single univariate polynomial.
- `numeric::polysysroots` computes all roots of a system of multivariate polynomial equations. This is a hybrid algorithm using symbolic Gröbner techniques and numerical post-processing.
- `numeric::realroot` computes a single real root of an arbitrary real equation.
- `numeric::realroots` isolates all real roots of a single arbitrary real equation via interval arithmethic.
- `numeric::solve` combines the three functions `numeric::fsolve`, `numeric::polyroots`, and `numeric::polysysroots`. It determines the type of the input equation(s) and calls one of these routines.
- `numlib::lincongruence` solves linear congruences.
- `numlib::mroots` solves polynomial congruences.
- `numlib::msqrts` computes the modular square roots of a number.
- `polylib::realroots` provides exact isolation of all real roots of a single univariate real polynomial.
- `solve` is the general solver for equations and systems of equations as well as inequalities; it also provides an interface to solving ordinary differential equations (see `ode`) and recursion relations (see `rec`).

  The library `solvelib` provides various utilities for handling the output of `solve`.

Do you have questions or comments?
Copyright © SciFace Software GmbH & Co. KG 2000