Overview
In this section you will find documentation how to obtain and use the commercial program matlab resp.
its open source (clone) version octave in combination with McArtim result files to create
inversion algorithms. The code examples will be in the octave syntax, since this is the authors preferred
software.
- obtain octave/matlab, basics and references
- loading McArtim results or other text files
- building essential quantities
- linear inversion examples
How to obtain octave or matlab
matlab is a commercial program that can be obtained from mathworks.de.
There are both windows an linux versions. If you don't want to pay the licence fee or if you support the open source
movement you can alternatively use the open source (clone) version octave or any other software with the same
functionality. The syntax of matlab and octave is very similar but
there are some minor differences. A short introduction to matlab is kindly
provided by Iske and Behrens from the TU München. octave can be obtained for linux and windows platforms from
the octave homepage. Documentation can be found there too or at
Loading McArtim results or other text files
Usually the output of McArtimQuestion of McArtimScript is in table form. Such a table
can be loaded by the octave command
Result=load('tablefile.txt');
Result. Please be aware that one maybe
has to remove all comment lines in the McArtim output file. Assume that a single line of a question result is of the form:
absorber_derivative.conf).
Single characters in the string correspond to TAB-separated numbers. The 'u's are unteresting values, 'x' are the
quantities we are interested in and 'e' is the respective error (Monte Carlo noise). Thus, in the example above we are
interested in the columns 4,6,8,... and separately 5,7,9,... containing the errors.
The following octave script loadMcArtimResultMatrix.octave loads a
McArtim output file filename and extracts two matrices M and
Me with each n columns beginning with the column first_column:
the file loadMcArtimResultMatrix.octave must be located in the same folder as the calling
script. The calling script line could look like:
[M Me]=loadMcArtimResultMatrix('c:\McArtim\BoxSensitivities.txt', 4, 10);
Loading grid files and linearely interpolated profile files
A grid file (see section on grids) is simply a list of height values in rows. The command
h=load('grid/height_grid.txt');
h (in fact this is a N x 1 matrix). This grid vector h can then be
used to create (script: loadHeightGridVectors.octave) a vector hm containing layer middles:
With the layer middles one can write a octave script loadLIProfile.octave to obtain a profile vector by evaluating a linearely interpolated profile at the layer middle heights:
Building essential quantities
For optimal estimation or other inversion schemes (see thesis inversion chapter), some essential vectors and matrices (auch as the state and measurement vector or the covariance matrices) have to be built. In octave (script file: buildDiagonalCovarianceMatrix.octave) this can be done in very few lines:
Some people also use non diagonal a priori covariance matrix elements, which can be built (script file buildDampingStateCovarianceMatrix.octave) as follows:
The next example script buildRegularisationMatrix.octave shows how to build a regularisation matrix used for a first derivative constrained inversion:
DSCDs and DBoxAMFs
Many DOAS evaluations produce differential SCDs (DSCDs). The components of the measurement vector are then to be understood as
McArtimScript, the reference
geometry thus must be the first to be processed.
A helper function: write matrices to files
(script file: writeMatrixToFile.octave)
Linear inversion example
The "vanilla" linear inversion optionally with a priori and/or regularisation (due to insufficient information content, too few geometries) is as follows.
cost function
Jacobian or gradient
The cost function is to be minimised so we need the gradient:
Solution
Setting the gradient to zero yields:
here is the script (linear_inversion_vanilla.octave):