The main focus of BBTools is to handle inverse ill-posed problems. These are problems where a set of "wanted data" is scrambled However, the routines are general and can be used for a number of purposes, including:

- Inverse problems, regularized solutions of ill-posed problems
- Data mining, dimensionality reduction of large data sets
- Iterative methods, research in algorithms based on Krylov subspaces

The main reason the toolbox exists is that it can handle problems that are too large to be coped with by most other software packages. It has been designed to utilize the available memory as much as possible.

In the context of BBTools, a "black-box operator" (or simply "black-box") is
a set of functions that implements the matrix-vector products `A*x`

and `A'*x`

. Here `A`

is the operator and `x`

is
a normal Matlab vector (or matrix).

It can be useful to think of a black-box as an extension of sparse matrices. However, instead of being a "matrix with a lot of zero elements", a black-box is "any matrix where matrix-vector products can be computed efficiently". This class of operators is much broader than sparse matrices.

The operator is a "black-box" because the algorithms used to compute the products are known only to the implementation. The internal representation of the operator may have little resemblance with the elements of the matrix with the same linear transform.

Example: the function `bbconvn`

creates an operator whose internal representation consists of a Fourier transform
of the convolution kernel. Fortunately, neither you nor BBTools need to know this
fact. (Except, of course, for `bbconvn`

, which is part of BBTools).

In BBTools, the set of functions is encapsulated in an object that can be
treated like a Matlab matrix in many cases. In most other packages (including
functions shipped with Matlab such as `lsqr`

), a black-box operator
must be given as a function (or set of functions).

Since a black-box can be manipulated like an ordinary Matlab matrix, it is usually much easier to create and/or change an operator. Instead of reinventing the wheel, things such as Kronecker products and concatenations are available at the fingertips using the normal Matlab syntax.

Furhermore, BBTools provides a set of standard black-boxes to use as a starting point. This includes convolutions, Hadamard matrices, and basic operators such as zeros, diagonal matrices, and identity operators. Anyone familiar with Matlab knows how even simple operators can simplify a complex task.

Black-box operators are only useful if they can be used to solve a problem. Although a matrix-vector product may be a useful operation in itself, there are many important iterative algorithms that are based solely on this operation.

From a practical point of view, the most useful procedures involves so called
*Krylov subspaces*. BBTools is focused on the following problems:

- Solving large-scale SVD-problems,
- Computing regularized solutions to large-scale linear problems.

Please see central features for a more comprehensive description.

Theoretically, any operation performed on a matrix could be performed on a black-box operator. This is possible because the matrix corresponding to the linear transform can be computed using the matrix-vector product. From a pragmatic point of view, this would defeat the purpose of using black-box operators.