# 12.3. Requirements to describe covariance matrices¶

In general, a variance-covariance matrix, generally called a covariance matrix, has to be squared, symmetric and semi-definite positive. Each of its terms describes the covariance of the two random variables corresponding to its position in the matrix. The normalized form of the covariance is the linear correlation. One can express the following relation, between a covariance matrix and its corresponding correlation matrix (full matrix) and standard deviation matrix (diagonal matrix):

Various covariance matrices are required to implement the data assimilation or optimization procedures. The main ones are the background error covariance matrix, noted as , and the observation error covariance matrix, noted as .

In the graphical interface EFICAS of ADAO, there are 3 practical methods for
the user to provide a covariance matrix. The method is chosen by the
“*INPUT_TYPE*” keyword of each defined covariance matrix, as shown by the
following figure:

In the textual interface (TUI) of ADAO (see the part [DocR] Textual User Interface for ADAO (TUI/API)), the
same information can be given with the right command “*setBackgroundError*”,
“*setObservationError*” or “*setEvolutionError*” depending on the physical
quantity to define. The other arguments “*Matrix*”, “*ScalarSparseMatrix*” and
“*DiagonalSparseMatrix*” of the command allow to define it as described in the
following sub-parts. These information can also be given as a script in an
external file (argument “*Script*”).

## 12.3.1. First matrix form: using “*Matrix*” representation¶

This first form is the default and more general one. The covariance matrix has to be fully specified. Even if the matrix is symmetric by nature, the entire matrix has to be given.

It can be either a Python Numpy array or a matrix, or a list of lists of values (that is, a list of rows). For example, a simple diagonal unitary background error covariance matrix can be described in a Python script file as:

```
BackgroundError = [[1, 0 ... 0], [0, 1 ... 0] ... [0, 0 ... 1]]
```

or:

```
BackgroundError = numpy.eye(...)
```

## 12.3.2. Second matrix form: using “*ScalarSparseMatrix*” representation¶

On the opposite, this second form is a very simplified method to provide a matrix. The covariance matrix is supposed to be a positive multiple of the identity matrix. This matrix can then be specified in a unique way by the multiplier :

The multiplier has to be a floating point or integer positive value (if it is negative, which is impossible for a positive covariance matrix, it is converted to positive value). For example, a simple diagonal unitary background error covariance matrix can be described in a python script file as:

```
BackgroundError = 1.
```

or, better, by a “*String*” directly in the graphical or textual ADAO case.

## 12.3.3. Third matrix form: using “*DiagonalSparseMatrix*” representation¶

This third form is also a simplified method to provide a matrix, but a little more powerful than the second one. The covariance matrix is already supposed to be diagonal, but the user has to specify all the positive diagonal values. The matrix can then be specified only by a vector which will be set on a diagonal matrix:

It can be either a Python Numpy array or a matrix, or a list or a list of list of positive values (in all cases, if some are negative, which is impossible, they are converted to positive values). For example, a simple diagonal unitary background error covariance matrix can be described in a python script file as:

```
BackgroundError = [1, 1 ... 1]
```

or:

```
BackgroundError = numpy.ones(...)
```

As previously indicated, one can also define this matrix by a “*String*”
directly in the graphical or textual ADAO case.