manifested by many successive iterations on almost identical states.
**A third way to improve convergence is to adapt the default setting of the
-finite difference approximation, primarily for the observation operator**. The
-control of this property is done with the keyword "*DifferentialIncrement*"
-which sets the definition using the :ref:`section_ref_operator_one`. Its
-default value is 1%, and it can usually be adjusted between :math:`10^{-5}` and
-:math:`10^{-3}` (although it is wise to check carefully the relevance of its
-value, it is easy in ADAO to change this parameter). The convergence criterion
-must then be adjusted so that it does not exceed the order of magnitude of this
-approximation. In practice, it is sufficient to set the
-"*CostDecrementTolerance*" criterion to approximately the same precision (i.e.
-with an order of magnitude more or less) as the "*DifferentialIncrement*"
-criterion.
+finite difference approximation, primarily for the observation operator and a
+single-operator representation**. The control of this property is done with the
+keyword "*DifferentialIncrement*" which sets the definition using the
+:ref:`section_ref_operator_one`. Its default value is 1%, and it can usually be
+adjusted between :math:`10^{-5}` and :math:`10^{-3}` (although it is wise to
+check carefully the relevance of its value, it is easy in ADAO to change this
+parameter). The convergence criterion must then be adjusted so that it does not
+exceed the order of magnitude of this approximation. In practice, it is
+sufficient to set the "*CostDecrementTolerance*" criterion to approximately the
+same precision (i.e. with an order of magnitude more or less) as the
+"*DifferentialIncrement*" criterion. This way of improvement is also to be
+completed with analyses using the :ref:`section_ref_algorithm_LinearityTest`
+and :ref:`section_ref_algorithm_GradientTest`.
From experience, it is *a priori* not recommended to use other means to control
convergence, even if they exist. These parameter adjustments are simple to
v=numpy.array(var[-1], ndmin=1)
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
::
import numpy, re
- v=numpy.array(var[:], ndmin=1)
+ v=numpy.array(var[:], ndmin=1)
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
print(str(info)+" "+str(v))
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
print(str(info)+(" index %i:"%(len(var)-1))+" "+str(v))
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
::
import numpy, re
- v=numpy.array(var[:], ndmin=1)
+ v=numpy.array(var[:], ndmin=1)
print(str(info)+" "+str(v))
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
v=numpy.array(var[-1], ndmin=1)
global ifig, gp
try:
- ifig += 1
- gp(' set style data lines')
+ ifig+=1
+ gp('set style data lines')
except:
- ifig = 0
- gp = Gnuplot.Gnuplot(persist=1)
- gp(' set style data lines')
- gp('set title "%s (Figure %i)"'%(info,ifig))
+ ifig=0
+ gp=Gnuplot.Gnuplot(persist=1)
+ gp('set style data lines')
+ gp('set title "%s (Figure %i)"'%(info,ifig))
gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
.. index:: single: ValueSerieGnuPlotter (Observer)
::
import numpy, Gnuplot
- v=numpy.array(var[:], ndmin=1)
+ v=numpy.array(var[:], ndmin=1)
global ifig, gp
try:
- ifig += 1
- gp(' set style data lines')
+ ifig+=1
+ gp('set style data lines')
except:
- ifig = 0
- gp = Gnuplot.Gnuplot(persist=1)
- gp(' set style data lines')
- gp('set title "%s (Figure %i)"'%(info,ifig))
+ ifig=0
+ gp=Gnuplot.Gnuplot(persist=1)
+ gp('set style data lines')
+ gp('set title "%s (Figure %i)"'%(info,ifig))
gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
.. index:: single: ValuePrinterAndGnuPlotter (Observer)
::
- print(str(info)+" "+str(var[-1]))
+ print(str(info)+' '+str(var[-1]))
import numpy, Gnuplot
v=numpy.array(var[-1], ndmin=1)
global ifig,gp
try:
- ifig += 1
- gp(' set style data lines')
+ ifig+=1
+ gp('set style data lines')
except:
- ifig = 0
- gp = Gnuplot.Gnuplot(persist=1)
- gp(' set style data lines')
- gp('set title "%s (Figure %i)"'%(info,ifig))
+ ifig=0
+ gp=Gnuplot.Gnuplot(persist=1)
+ gp('set style data lines')
+ gp('set title "%s (Figure %i)"'%(info,ifig))
gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
.. index:: single: ValueSeriePrinterAndGnuPlotter (Observer)
::
- print(str(info)+" "+str(var[:]))
+ print(str(info)+' '+str(var[:]))
import numpy, Gnuplot
- v=numpy.array(var[:], ndmin=1)
+ v=numpy.array(var[:], ndmin=1)
global ifig,gp
try:
- ifig += 1
- gp(' set style data lines')
+ ifig+=1
+ gp('set style data lines')
except:
- ifig = 0
- gp = Gnuplot.Gnuplot(persist=1)
- gp(' set style data lines')
- gp('set title "%s (Figure %i)"'%(info,ifig))
+ ifig=0
+ gp=Gnuplot.Gnuplot(persist=1)
+ gp('set style data lines')
+ gp('set title "%s (Figure %i)"'%(info,ifig))
gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
.. index:: single: ValuePrinterSaverAndGnuPlotter (Observer)
::
- print(str(info)+" "+str(var[-1]))
+ print(str(info)+' '+str(var[-1]))
import numpy, re
v=numpy.array(var[-1], ndmin=1)
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
import Gnuplot
global ifig,gp
try:
- ifig += 1
- gp(' set style data lines')
+ ifig+=1
+ gp('set style data lines')
except:
- ifig = 0
- gp = Gnuplot.Gnuplot(persist=1)
- gp(' set style data lines')
- gp('set title "%s (Figure %i)"'%(info,ifig))
+ ifig=0
+ gp=Gnuplot.Gnuplot(persist=1)
+ gp('set style data lines')
+ gp('set title "%s (Figure %i)"'%(info,ifig))
gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
.. index:: single: ValueSeriePrinterSaverAndGnuPlotter (Observer)
::
- print(str(info)+" "+str(var[:]))
+ print(str(info)+' '+str(var[:]))
import numpy, re
- v=numpy.array(var[:], ndmin=1)
+ v=numpy.array(var[:], ndmin=1)
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
import Gnuplot
global ifig,gp
try:
- ifig += 1
- gp(' set style data lines')
+ ifig+=1
+ gp('set style data lines')
except:
- ifig = 0
- gp = Gnuplot.Gnuplot(persist=1)
- gp(' set style data lines')
- gp('set title "%s (Figure %i)"'%(info,ifig))
+ ifig=0
+ gp=Gnuplot.Gnuplot(persist=1)
+ gp('set style data lines')
+ gp('set title "%s (Figure %i)"'%(info,ifig))
gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
.. index:: single: ValueMean (Observer)
::
import numpy
- print(str(info)+" "+str(numpy.nanmean(var[-1])))
+ print(str(info)+' '+str(numpy.nanmean(var[-1])))
.. index:: single: ValueStandardError (Observer)
::
import numpy
- print(str(info)+" "+str(numpy.nanstd(var[-1])))
+ print(str(info)+' '+str(numpy.nanstd(var[-1])))
.. index:: single: ValueVariance (Observer)
::
import numpy
- print(str(info)+" "+str(numpy.nanvar(var[-1])))
+ print(str(info)+' '+str(numpy.nanvar(var[-1])))
.. index:: single: ValueL2Norm (Observer)
import numpy
v = numpy.ravel( var[-1] )
- print(str(info)+" "+str(float( numpy.linalg.norm(v) )))
+ print(str(info)+' '+str(float( numpy.linalg.norm(v) )))
.. index:: single: ValueRMS (Observer)
import numpy
v = numpy.ravel( var[-1] )
- print(str(info)+" "+str(float( numpy.sqrt((1./v.size)*numpy.dot(v,v)) )))
+ print(str(info)+' '+str(float( numpy.sqrt((1./v.size)*numpy.dot(v,v)) )))
Such a process is rarely enough to avoid all the numerical problems, but it
often improves a lot the numeric conditioning of the optimization.
+.. index:: single: InputFunctionAsMulti
+
Dealing explicitly with "multiple" functions
++++++++++++++++++++++++++++++++++++++++++++
already done by default in ADAO to increase performances. Only the very
experienced user, seeking to manage particularly difficult cases, can be
interested in this extension. Despite its simplicity, there is an explicit
- risk of significantly worsening performance.
+ risk of significantly worsening performance, or getting weird runtime errors.
It is possible, when defining operator's functions, to set them as functions
that treat not only one argument, but a series of arguments, to give back on
the length of the input (that is, the number of states for which one want to
calculate the value by the operator).
-This possibility is only available in the textual interface for ADAO. For this,
-when defining an operator's function, in the same time one usually define the
-function or the external script, it can be set using a boolean parameter
-"*InputFunctionAsMulti*" that the definition is one of a "multiple" function.
+This possibility is only available in the TUI textual interface for ADAO. For
+this, when defining an operator's function, in the same time one usually define
+the function or the external script, it can be set using an additional boolean
+parameter "*InputFunctionAsMulti*" that the definition is one of a "multiple"
+function. For example, if it is the observation operator that is defined in
+this way, one should write (knowing that all other optional commands remain
+unchanged):
+::
+
+ case.set( 'ObservationOperator',
+ OneFunction = MultiFunctionO,
+ ...
+ InputFunctionAsMulti = True,
+ )
*Real value*. This key indicates the relative numerical magnitude of the
perturbation used to estimate the tangent value of the operator at the
evaluation point, i.e. its directional derivative. The conservative default
- is 1.e-2, and it is strongly recommended to adapt it to the needs of real
- problems, by decreasing its value by several orders of magnitude.
+ is 1.e-2 i.e. 1%, and it is strongly recommended to adapt it to the needs of
+ real problems, by decreasing its value by several orders of magnitude.
Example :
``{"AmplitudeOfTangentPerturbation":1.e-2}``
**Un troisième moyen d'améliorer la convergence est d'adapter le réglage par
défaut de l'approximation par différences finies, essentiellement pour
-l'opérateur d'observation**. Le contrôle de cette propriété se fait à l'aide du
-mot-clé "*DifferentialIncrement*" qui paramètre la définition à l'aide de la
+l'opérateur d'observation et une représentation en mono-opérateur**. Le
+contrôle de cette propriété se fait à l'aide du mot-clé
+"*DifferentialIncrement*" qui paramètre la définition à l'aide de la
:ref:`section_ref_operator_one`. Sa valeur par défaut est de 1%, et il peut
généralement être ajusté entre :math:`10^{-5}` et :math:`10^{-3}` (même s'il
est sage de vérifier soigneusement la pertinence de sa valeur, il est aisé dans
approximation. En pratique, on peut se contenter de fixer le critère
"*CostDecrementTolerance*" à peu près à la même précision (c'est-à-dire avec un
ordre de grandeur de plus ou de moins) que le critère
-"*DifferentialIncrement*".
+"*DifferentialIncrement*". Ce moyen d'amélioration est aussi à compléter
+d'analyses à l'aide des :ref:`section_ref_algorithm_LinearityTest` et
+:ref:`section_ref_algorithm_GradientTest`.
Par expérience, il n'est *a priori* pas recommandé d'utiliser d'autres moyens
de contrôler la convergence, même s'il en existe. Ces ajustements de paramètres
background
C'est le terme anglais pour désigner l'ébauche.
- ébauche
+ ebauche
C'est une part (choisie pour être modifiable) de la représentation de
l'état du système, représentation connue *a priori* ou initiale, qui
n'est pas optimale, et qui est utilisée comme une estimation grossière ou
v=numpy.array(var[-1], ndmin=1)
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
::
import numpy, re
- v=numpy.array(var[:], ndmin=1)
+ v=numpy.array(var[:], ndmin=1)
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
print(str(info)+" "+str(v))
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
print(str(info)+(" index %i:"%(len(var)-1))+" "+str(v))
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
::
import numpy, re
- v=numpy.array(var[:], ndmin=1)
+ v=numpy.array(var[:], ndmin=1)
print(str(info)+" "+str(v))
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
v=numpy.array(var[-1], ndmin=1)
global ifig, gp
try:
- ifig += 1
- gp(' set style data lines')
+ ifig+=1
+ gp('set style data lines')
except:
- ifig = 0
- gp = Gnuplot.Gnuplot(persist=1)
- gp(' set style data lines')
- gp('set title "%s (Figure %i)"'%(info,ifig))
+ ifig=0
+ gp=Gnuplot.Gnuplot(persist=1)
+ gp('set style data lines')
+ gp('set title "%s (Figure %i)"'%(info,ifig))
gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
.. index:: single: ValueSerieGnuPlotter (Observer)
::
import numpy, Gnuplot
- v=numpy.array(var[:], ndmin=1)
+ v=numpy.array(var[:], ndmin=1)
global ifig, gp
try:
- ifig += 1
- gp(' set style data lines')
+ ifig+=1
+ gp('set style data lines')
except:
- ifig = 0
- gp = Gnuplot.Gnuplot(persist=1)
- gp(' set style data lines')
- gp('set title "%s (Figure %i)"'%(info,ifig))
+ ifig=0
+ gp=Gnuplot.Gnuplot(persist=1)
+ gp('set style data lines')
+ gp('set title "%s (Figure %i)"'%(info,ifig))
gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
.. index:: single: ValuePrinterAndGnuPlotter (Observer)
::
- print(str(info)+" "+str(var[-1]))
+ print(str(info)+' '+str(var[-1]))
import numpy, Gnuplot
v=numpy.array(var[-1], ndmin=1)
global ifig,gp
try:
- ifig += 1
- gp(' set style data lines')
+ ifig+=1
+ gp('set style data lines')
except:
- ifig = 0
- gp = Gnuplot.Gnuplot(persist=1)
- gp(' set style data lines')
- gp('set title "%s (Figure %i)"'%(info,ifig))
+ ifig=0
+ gp=Gnuplot.Gnuplot(persist=1)
+ gp('set style data lines')
+ gp('set title "%s (Figure %i)"'%(info,ifig))
gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
.. index:: single: ValueSeriePrinterAndGnuPlotter (Observer)
::
- print(str(info)+" "+str(var[:]))
+ print(str(info)+' '+str(var[:]))
import numpy, Gnuplot
- v=numpy.array(var[:], ndmin=1)
+ v=numpy.array(var[:], ndmin=1)
global ifig,gp
try:
- ifig += 1
- gp(' set style data lines')
+ ifig+=1
+ gp('set style data lines')
except:
- ifig = 0
- gp = Gnuplot.Gnuplot(persist=1)
- gp(' set style data lines')
- gp('set title "%s (Figure %i)"'%(info,ifig))
+ ifig=0
+ gp=Gnuplot.Gnuplot(persist=1)
+ gp('set style data lines')
+ gp('set title "%s (Figure %i)"'%(info,ifig))
gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
.. index:: single: ValuePrinterSaverAndGnuPlotter (Observer)
::
- print(str(info)+" "+str(var[-1]))
+ print(str(info)+' '+str(var[-1]))
import numpy, re
v=numpy.array(var[-1], ndmin=1)
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
import Gnuplot
global ifig,gp
try:
- ifig += 1
- gp(' set style data lines')
+ ifig+=1
+ gp('set style data lines')
except:
- ifig = 0
- gp = Gnuplot.Gnuplot(persist=1)
- gp(' set style data lines')
- gp('set title "%s (Figure %i)"'%(info,ifig))
+ ifig=0
+ gp=Gnuplot.Gnuplot(persist=1)
+ gp('set style data lines')
+ gp('set title "%s (Figure %i)"'%(info,ifig))
gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
.. index:: single: ValueSeriePrinterSaverAndGnuPlotter (Observer)
::
- print(str(info)+" "+str(var[:]))
+ print(str(info)+' '+str(var[:]))
import numpy, re
- v=numpy.array(var[:], ndmin=1)
+ v=numpy.array(var[:], ndmin=1)
global istep
try:
- istep += 1
+ istep+=1
except:
- istep = 0
+ istep=0
f='/tmp/value_%s_%05i.txt'%(info,istep)
f=re.sub('\s','_',f)
print('Value saved in "%s"'%f)
import Gnuplot
global ifig,gp
try:
- ifig += 1
- gp(' set style data lines')
+ ifig+=1
+ gp('set style data lines')
except:
- ifig = 0
- gp = Gnuplot.Gnuplot(persist=1)
- gp(' set style data lines')
- gp('set title "%s (Figure %i)"'%(info,ifig))
+ ifig=0
+ gp=Gnuplot.Gnuplot(persist=1)
+ gp('set style data lines')
+ gp('set title "%s (Figure %i)"'%(info,ifig))
gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
.. index:: single: ValueMean (Observer)
::
import numpy
- print(str(info)+" "+str(numpy.nanmean(var[-1])))
+ print(str(info)+' '+str(numpy.nanmean(var[-1])))
.. index:: single: ValueStandardError (Observer)
::
import numpy
- print(str(info)+" "+str(numpy.nanstd(var[-1])))
+ print(str(info)+' '+str(numpy.nanstd(var[-1])))
.. index:: single: ValueVariance (Observer)
::
import numpy
- print(str(info)+" "+str(numpy.nanvar(var[-1])))
+ print(str(info)+' '+str(numpy.nanvar(var[-1])))
.. index:: single: ValueL2Norm (Observer)
import numpy
v = numpy.ravel( var[-1] )
- print(str(info)+" "+str(float( numpy.linalg.norm(v) )))
+ print(str(info)+' '+str(float( numpy.linalg.norm(v) )))
.. index:: single: ValueRMS (Observer)
import numpy
v = numpy.ravel( var[-1] )
- print(str(info)+" "+str(float( numpy.sqrt((1./v.size)*numpy.dot(v,v)) )))
+ print(str(info)+' '+str(float( numpy.sqrt((1./v.size)*numpy.dot(v,v)) )))
permet souvent d'améliorer beaucoup le conditionnement numérique de
l'optimisation.
+.. index:: single: InputFunctionAsMulti
+
Gestion explicite de fonctions "multiples"
++++++++++++++++++++++++++++++++++++++++++
performances. Seul l'utilisateur très averti, cherchant à gérer des cas
particulièrement difficiles, peut s'intéresser à cette extension. En dépit de
sa simplicité, c'est au risque explicite de dégrader notablement les
- performances.
+ performances, ou d'avoir des erreurs d'exécution étranges.
Il est possible, lorsque l'on fournit des fonctions d'opérateurs, de les
définir comme des fonctions qui traitent non pas un seul argument, mais une
égale à la longueur de l'entrée (c'est-à-dire le nombre d'états dont on veut
calculer la valeur par l'opérateur).
-Cette possibilité n'est disponible que dans l'interface textuelle d'ADAO. Pour
-cela, lors de la définition d'une fonction d'opérateur, en même temps que l'on
-définit de manière habituelle la fonction ou le script externe, il suffit
-d'indiquer en plus en argument par un booléen "*InputFunctionAsMulti*" que la
-définition est celle d'une fonction "multiple".
+Cette possibilité n'est disponible que dans l'interface textuelle TUI d'ADAO.
+Pour cela, lors de la définition d'une fonction d'opérateur, en même temps que
+l'on définit de manière habituelle la fonction ou le script externe, il suffit
+d'indiquer en plus en argument par un booléen supplémentaire
+"*InputFunctionAsMulti*" que la définition est celle d'une fonction "multiple".
+Par exemple, si c'est l'opérateur d'observation que l'on définit de cette
+manière, il faut écrire (sachant que toutes les autres commandes optionnelles
+restent inchangées) :
+::
+
+ case.set( 'ObservationOperator',
+ OneFunction = MultiFunctionO,
+ ...
+ InputFunctionAsMulti = True,
+ )
*Valeur réelle*. Cette clé indique l'amplitude numérique relative de la
perturbation utilisée pour estimer la valeur tangente de l'opérateur au point
d'évaluation, i.e. sa dérivée directionnelle. Le défaut conservatif est de
- 1.e-2, et il est fortement recommandé de l'adapter aux besoins pour des
- problèmes réels, en diminuant sa valeur de plusieurs ordres de grandeur.
+ 1.e-2 i.e. 1%, et il est fortement recommandé de l'adapter aux besoins pour
+ des problèmes réels, en diminuant sa valeur de plusieurs ordres de grandeur.
Exemple :
``{"AmplitudeOfTangentPerturbation":1.e-2}``
.. index:: single: Data Assimilation
.. index:: single: assimilation de données
-.. index:: single: état vrai
+.. index:: single: etat vrai
.. index:: single: observation
.. index:: single: a priori
.. index:: single: EstimationOf
.. index:: single: interpolation de données
.. index:: single: interpolation de champs
.. index:: single: estimation d'état
-.. index:: single: ébauche
+.. index:: single: ebauche
La **reconstruction (ou l'interpolation) de champs** consiste à trouver, à
partir d'un nombre restreint de mesures réelles, le (ou les) champ(s)
.. index:: single: ajustement de modèles
.. index:: single: recalage
.. index:: single: calage
-.. index:: single: ébauche
+.. index:: single: ebauche
.. index:: single: régularisation
.. index:: single: problèmes inverses
.. index:: single: estimation de paramètres
Description simple du cadre méthodologique de l'assimilation de données
-----------------------------------------------------------------------
-.. index:: single: ébauche
+.. index:: single: ebauche
.. index:: single: covariances d'erreurs d'ébauche
.. index:: single: covariances d'erreurs d'observation
.. index:: single: covariances
.. index:: single: dynamique (système)
.. index:: single: système dynamique
-.. index:: single: évolution temporelle
+.. index:: single: evolution temporelle
.. index:: single: EDO (Équation Différentielle Ordinaire)
.. index:: single: ODE (Ordinary Differential Equation)
.. index:: single: EstimationOf