dapper.mods.Lorenz96.spectral_obs

Settings for a "spectral" obs operator.

Lorenz-96 is highly sensitive to large gradients. Therefore, if we only observe every 4th (e.g.) state component, the members might "blow up" during the forecast, because the assimilation created large gradients. (Of course, this will depend on R and dto). Therefore, the HMM below instead uses "global obs", where each observation captures information about the entire state vector. The idea is that we can then remove observations, (rows of H) one-by-one, to a much larger degree than for H = Identity.

Ideally, we want the observations to be independent, and possibly of the same magnitude (i.e. we that the rows of H be orthonormal). Furthermore, we want that each observation gives equal weight ("consideration") to each state component. This can be shown to be equivalent to requiring that the state component is equally resolved by each observation, and moreover, that the magnitude (abs) of each element of H be a constant (1/sqrt(Nx)).

Can such an H be constructed/found? In the 2d case: H = [1, 1; 1, -1] / sqrt(2). In the 3d case: no, as can be shown by enumeration. (note, however, how easy my geometric intuition was fooled. Try rotating the 3-dim stensil. Intuitively I thought that it would yield the 3d H of +/- 1's). ... In fact, only in the 2^n - dimensional case is it possible (our conjecture: Madleine/Patrick, based on analogy with the FFT).

Another idea is then to evaluate the value of 40 orthogonal basis functions at 40 equidistant locations (corresponding to the indices of Lorenz-96). This will not yield a matrix of +/- 1's, but should nevertheless give nicely distributed weights.

Note that the legendre polynomials are not orthogonal when (the inner product is) evaluated on discrete, equidistant points. Moreover, the actual orthogonal polynomial basis (which I think goes under the name of Gram polynomials, and can be constructed by qr-decomp (gram-schmidt) of a 40-dim Vandermonde matrix). would in fact not be a good idea: it is well-known that not only will the qr-decomp be numerically unstable, the exact polynomial interpolant of 40 equidistant points is subject to the "horrible" Runge phenomenon.

Another basis is the harmonic (sine/cosine) functions. Advantages:

  • will be orthogonal when evaluated on 40 discrete equidistant points.
  • the domain of Lorenz-96 is periodic: as are sine/cosine.
  • (conjecture) in the 2^n dim. case, it yields a matrix of +/- 1's.
  • nice "spectral/frequency" interpretation of each observation. Disadvatages:
  • 40 is not 2^n for any n
  • Too obvious (not very original).

In conclusion, we will use the harmonic functions.

Update: It appears that we were wrong concerning the 2^n case. That is, sine/cosine functions do not yield only +/- 1's for n>2 The question then remains (to be proven combinatorically?) if the +/- 1 matrices exist for dim>4 Furthermore, experiments do not seem to indicate that I can push Ny much lower than for the case H = Identity, even though the rmse is a lot lower with spectral H. Am I missing something?

  1"""Settings for a "spectral" obs operator.
  2
  3Lorenz-96 is highly sensitive to large gradients.
  4Therefore, if we only observe every 4th (e.g.) state component,
  5the members might "blow up" during the forecast,
  6because the assimilation created large gradients.
  7(Of course, this will depend on R and dto).
  8Therefore, the HMM below instead uses "global obs",
  9where each observation captures information about the entire state vector.
 10The idea is that we can then remove observations, (rows of H)
 11one-by-one, to a much larger degree than for H = Identity.
 12
 13Ideally, we want the observations to be independent,
 14and possibly of the same magnitude
 15(i.e. we that the rows of H be orthonormal).
 16Furthermore, we want that each observation gives equal weight
 17("consideration") to each state component.
 18This can be shown to be equivalent to requiring that the state
 19component is equally resolved by each observation,
 20and moreover, that the magnitude (abs) of each element of H
 21be a constant (1/sqrt(Nx)).
 22
 23Can such an H be constructed/found?
 24In the 2d case: H = [1, 1; 1, -1] / sqrt(2).
 25In the 3d case: no, as can be shown by enumeration.
 26(note, however, how easy my geometric intuition was fooled.
 27Try rotating the 3-dim stensil.
 28Intuitively I thought that it would yield the 3d H of +/- 1's).
 29...
 30In fact, only in the 2^n - dimensional case is it possible
 31(our conjecture: Madleine/Patrick, based on analogy with the FFT).
 32
 33Another idea is then to evaluate the value of 40 orthogonal basis
 34functions at 40 equidistant locations
 35(corresponding to the indices of Lorenz-96).
 36This will not yield a matrix of +/- 1's,
 37but should nevertheless give nicely distributed weights.
 38
 39Note that the legendre polynomials are not orthogonal when
 40(the inner product is) evaluated on discrete, equidistant points.
 41Moreover, the actual orthogonal polynomial basis
 42(which I think goes under the name of Gram polynomials, and can be
 43constructed by qr-decomp (gram-schmidt) of a 40-dim Vandermonde matrix).
 44would in fact not be a good idea:
 45it is well-known that not only will the qr-decomp be numerically unstable,
 46the exact polynomial interpolant of 40 equidistant points
 47is subject to the "horrible" Runge phenomenon.
 48
 49Another basis is the harmonic (sine/cosine) functions. Advantages:
 50 - will be orthogonal when evaluated on 40 discrete equidistant points.
 51 - the domain of Lorenz-96 is periodic: as are sine/cosine.
 52 - (conjecture) in the 2^n dim. case, it yields a matrix of +/- 1's.
 53 - nice "spectral/frequency" interpretation of each observation.
 54Disadvatages:
 55 - 40 is not 2^n for any n
 56 - Too obvious (not very original).
 57
 58In conclusion, we will use the harmonic functions.
 59
 60
 61Update: It appears that we were wrong concerning the 2^n case.
 62That is, sine/cosine functions do not yield only +/- 1's for n>2
 63The question then remains (to be proven combinatorically?)
 64if the +/- 1 matrices exist for dim>4
 65Furthermore, experiments do not seem to indicate that I can push
 66Ny much lower than for the case H = Identity,
 67even though the rmse is a lot lower with spectral H.
 68Am I missing something?
 69"""
 70
 71import numpy as np
 72
 73import dapper.mods as modelling
 74from dapper.mods.Lorenz96.sakov2008 import Dyn, Nx, tseq
 75
 76# The (Nx-Ny) highest frequency observation modes are left out of H below.
 77# If Ny>Nx, then H no longer has independent (let alone orthogonal) columns,
 78# yet more information is gained, since the observations are noisy.
 79Ny = 12
 80
 81X0 = modelling.GaussRV(M=Nx, C=0.001)
 82
 83
 84def make_H(Ny, Nx):
 85    xx = np.linspace(-1, 1, Nx + 1)[1:]
 86    H = np.zeros((Ny, Nx))
 87    H[0] = 1 / np.sqrt(2)
 88    for k in range(-(Ny // 2), (Ny + 1) // 2):
 89        ind = 2 * abs(k) - (k < 0)
 90        H[ind] = np.sin(np.pi * k * xx + np.pi / 4)
 91    H /= np.sqrt(Nx / 2)
 92    return H
 93
 94
 95H = make_H(Ny, Nx)
 96# plt.figure(1).gca().matshow(H)
 97# plt.figure(2).gca().matshow(H @ H.T)
 98
 99Obs = {
100    "M": Ny,
101    "model": lambda x: x @ H.T,
102    "noise": modelling.GaussRV(C=0.01 * np.eye(Ny)),
103}
104
105HMM = modelling.HiddenMarkovModel(Dyn, Obs, tseq, X0)
106
107####################
108# Obs plotting -- needs updating
109####################
110# "raw" obs plotting
111# if Ny<=Nx:
112#     Hinv = H.T
113# else:
114#     Hinv = sla.pinv2(H)
115# def yplot(y):
116#     lh = plt.plot(y @ Hinv.T,'g')[0]
117#     return lh
118
119# "implicit" (interpolated sine/cosine) obs plotting
120# Hplot = make_H(Ny,max(Ny,201))
121# Hplot_inv = Hplot.T
122# def yplot(y):
123#     x = y @ Hplot_inv.T
124#     ii = np.linspace(0,Nx-1,len(x))
125#     lh = plt.plot(ii,x,'g')[0]
126#     return lh
127
128
129####################
130# Suggested tuning
131####################
132# xps += EnKF ('Sqrt',N=40, infl=1.01)
Ny = 12
X0 = GaussRV({ 'C': <CovMat> M: 40 kind: 'diag' trunc: 1.0 rk: 40 full: (only computing/printing corners) [[0.001 0. 0. ... 0. 0. 0. ] [0. 0.001 0. ... 0. 0. 0. ] [0. 0. 0.001 ... 0. 0. 0. ] ... [0. 0. 0. ... 0.001 0. 0. ] [0. 0. 0. ... 0. 0.001 0. ] [0. 0. 0. ... 0. 0. 0.001]] diag: [0.001 0.001 0.001 ... 0.001 0.001 0.001], 'mu': array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]), 'M': 40 })
def make_H(Ny, Nx):
85def make_H(Ny, Nx):
86    xx = np.linspace(-1, 1, Nx + 1)[1:]
87    H = np.zeros((Ny, Nx))
88    H[0] = 1 / np.sqrt(2)
89    for k in range(-(Ny // 2), (Ny + 1) // 2):
90        ind = 2 * abs(k) - (k < 0)
91        H[ind] = np.sin(np.pi * k * xx + np.pi / 4)
92    H /= np.sqrt(Nx / 2)
93    return H
H = array([[ 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01, 1.58113883e-01], [-1.31432778e-01, -1.01515362e-01, -6.90983006e-02, -3.49798098e-02, 2.73839349e-17, 3.49798098e-02, 6.90983006e-02, 1.01515362e-01, 1.31432778e-01, 1.58113883e-01, 1.80901699e-01, 1.99235116e-01, 2.12662702e-01, 2.20853827e-01, 2.23606798e-01, 2.20853827e-01, 2.12662702e-01, 1.99235116e-01, 1.80901699e-01, 1.58113883e-01, 1.31432778e-01, 1.01515362e-01, 6.90983006e-02, 3.49798098e-02, 0.00000000e+00, -3.49798098e-02, -6.90983006e-02, -1.01515362e-01, -1.31432778e-01, -1.58113883e-01, -1.80901699e-01, -1.99235116e-01, -2.12662702e-01, -2.20853827e-01, -2.23606798e-01, -2.20853827e-01, -2.12662702e-01, -1.99235116e-01, -1.80901699e-01, -1.58113883e-01], [-1.80901699e-01, -1.99235116e-01, -2.12662702e-01, -2.20853827e-01, -2.23606798e-01, -2.20853827e-01, -2.12662702e-01, -1.99235116e-01, -1.80901699e-01, -1.58113883e-01, -1.31432778e-01, -1.01515362e-01, -6.90983006e-02, -3.49798098e-02, 0.00000000e+00, 3.49798098e-02, 6.90983006e-02, 1.01515362e-01, 1.31432778e-01, 1.58113883e-01, 1.80901699e-01, 1.99235116e-01, 2.12662702e-01, 2.20853827e-01, 2.23606798e-01, 2.20853827e-01, 2.12662702e-01, 1.99235116e-01, 1.80901699e-01, 1.58113883e-01, 1.31432778e-01, 1.01515362e-01, 6.90983006e-02, 3.49798098e-02, 2.73839349e-17, -3.49798098e-02, -6.90983006e-02, -1.01515362e-01, -1.31432778e-01, -1.58113883e-01], [ 1.01515362e-01, 3.49798098e-02, -3.49798098e-02, -1.01515362e-01, -1.58113883e-01, -1.99235116e-01, -2.20853827e-01, -2.20853827e-01, -1.99235116e-01, -1.58113883e-01, -1.01515362e-01, -3.49798098e-02, 3.49798098e-02, 1.01515362e-01, 1.58113883e-01, 1.99235116e-01, 2.20853827e-01, 2.20853827e-01, 1.99235116e-01, 1.58113883e-01, 1.01515362e-01, 3.49798098e-02, -3.49798098e-02, -1.01515362e-01, -1.58113883e-01, -1.99235116e-01, -2.20853827e-01, -2.20853827e-01, -1.99235116e-01, -1.58113883e-01, -1.01515362e-01, -3.49798098e-02, 3.49798098e-02, 1.01515362e-01, 1.58113883e-01, 1.99235116e-01, 2.20853827e-01, 2.20853827e-01, 1.99235116e-01, 1.58113883e-01], [ 1.99235116e-01, 2.20853827e-01, 2.20853827e-01, 1.99235116e-01, 1.58113883e-01, 1.01515362e-01, 3.49798098e-02, -3.49798098e-02, -1.01515362e-01, -1.58113883e-01, -1.99235116e-01, -2.20853827e-01, -2.20853827e-01, -1.99235116e-01, -1.58113883e-01, -1.01515362e-01, -3.49798098e-02, 3.49798098e-02, 1.01515362e-01, 1.58113883e-01, 1.99235116e-01, 2.20853827e-01, 2.20853827e-01, 1.99235116e-01, 1.58113883e-01, 1.01515362e-01, 3.49798098e-02, -3.49798098e-02, -1.01515362e-01, -1.58113883e-01, -1.99235116e-01, -2.20853827e-01, -2.20853827e-01, -1.99235116e-01, -1.58113883e-01, -1.01515362e-01, -3.49798098e-02, 3.49798098e-02, 1.01515362e-01, 1.58113883e-01], [-6.90983006e-02, 3.49798098e-02, 1.31432778e-01, 1.99235116e-01, 2.23606798e-01, 1.99235116e-01, 1.31432778e-01, 3.49798098e-02, -6.90983006e-02, -1.58113883e-01, -2.12662702e-01, -2.20853827e-01, -1.80901699e-01, -1.01515362e-01, 2.73839349e-17, 1.01515362e-01, 1.80901699e-01, 2.20853827e-01, 2.12662702e-01, 1.58113883e-01, 6.90983006e-02, -3.49798098e-02, -1.31432778e-01, -1.99235116e-01, -2.23606798e-01, -1.99235116e-01, -1.31432778e-01, -3.49798098e-02, 6.90983006e-02, 1.58113883e-01, 2.12662702e-01, 2.20853827e-01, 1.80901699e-01, 1.01515362e-01, 5.47678698e-17, -1.01515362e-01, -1.80901699e-01, -2.20853827e-01, -2.12662702e-01, -1.58113883e-01], [-2.12662702e-01, -2.20853827e-01, -1.80901699e-01, -1.01515362e-01, 5.47678698e-17, 1.01515362e-01, 1.80901699e-01, 2.20853827e-01, 2.12662702e-01, 1.58113883e-01, 6.90983006e-02, -3.49798098e-02, -1.31432778e-01, -1.99235116e-01, -2.23606798e-01, -1.99235116e-01, -1.31432778e-01, -3.49798098e-02, 6.90983006e-02, 1.58113883e-01, 2.12662702e-01, 2.20853827e-01, 1.80901699e-01, 1.01515362e-01, 2.73839349e-17, -1.01515362e-01, -1.80901699e-01, -2.20853827e-01, -2.12662702e-01, -1.58113883e-01, -6.90983006e-02, 3.49798098e-02, 1.31432778e-01, 1.99235116e-01, 2.23606798e-01, 1.99235116e-01, 1.31432778e-01, 3.49798098e-02, -6.90983006e-02, -1.58113883e-01], [ 3.49798098e-02, -1.01515362e-01, -1.99235116e-01, -2.20853827e-01, -1.58113883e-01, -3.49798098e-02, 1.01515362e-01, 1.99235116e-01, 2.20853827e-01, 1.58113883e-01, 3.49798098e-02, -1.01515362e-01, -1.99235116e-01, -2.20853827e-01, -1.58113883e-01, -3.49798098e-02, 1.01515362e-01, 1.99235116e-01, 2.20853827e-01, 1.58113883e-01, 3.49798098e-02, -1.01515362e-01, -1.99235116e-01, -2.20853827e-01, -1.58113883e-01, -3.49798098e-02, 1.01515362e-01, 1.99235116e-01, 2.20853827e-01, 1.58113883e-01, 3.49798098e-02, -1.01515362e-01, -1.99235116e-01, -2.20853827e-01, -1.58113883e-01, -3.49798098e-02, 1.01515362e-01, 1.99235116e-01, 2.20853827e-01, 1.58113883e-01], [ 2.20853827e-01, 1.99235116e-01, 1.01515362e-01, -3.49798098e-02, -1.58113883e-01, -2.20853827e-01, -1.99235116e-01, -1.01515362e-01, 3.49798098e-02, 1.58113883e-01, 2.20853827e-01, 1.99235116e-01, 1.01515362e-01, -3.49798098e-02, -1.58113883e-01, -2.20853827e-01, -1.99235116e-01, -1.01515362e-01, 3.49798098e-02, 1.58113883e-01, 2.20853827e-01, 1.99235116e-01, 1.01515362e-01, -3.49798098e-02, -1.58113883e-01, -2.20853827e-01, -1.99235116e-01, -1.01515362e-01, 3.49798098e-02, 1.58113883e-01, 2.20853827e-01, 1.99235116e-01, 1.01515362e-01, -3.49798098e-02, -1.58113883e-01, -2.20853827e-01, -1.99235116e-01, -1.01515362e-01, 3.49798098e-02, 1.58113883e-01], [ 1.36919675e-16, 1.58113883e-01, 2.23606798e-01, 1.58113883e-01, -1.09535740e-16, -1.58113883e-01, -2.23606798e-01, -1.58113883e-01, 8.21518047e-17, 1.58113883e-01, 2.23606798e-01, 1.58113883e-01, -5.47678698e-17, -1.58113883e-01, -2.23606798e-01, -1.58113883e-01, 3.25288033e-16, 1.58113883e-01, 2.23606798e-01, 1.58113883e-01, -1.48952049e-16, -1.58113883e-01, -2.23606798e-01, -1.58113883e-01, -2.73839349e-17, 1.58113883e-01, 2.23606798e-01, 1.58113883e-01, -5.41040327e-16, -1.58113883e-01, -2.23606798e-01, -1.58113883e-01, 7.12259124e-16, 1.58113883e-01, 2.23606798e-01, 1.58113883e-01, 1.09535740e-16, -1.58113883e-01, -2.23606798e-01, -1.58113883e-01], [-2.23606798e-01, -1.58113883e-01, 1.09535740e-16, 1.58113883e-01, 2.23606798e-01, 1.58113883e-01, -8.21518047e-17, -1.58113883e-01, -2.23606798e-01, -1.58113883e-01, 2.53370602e-16, 1.58113883e-01, 2.23606798e-01, 1.58113883e-01, -2.73839349e-17, -1.58113883e-01, -2.23606798e-01, -1.58113883e-01, 2.23428074e-16, 1.58113883e-01, 2.23606798e-01, 1.58113883e-01, -4.69122896e-16, -1.58113883e-01, -2.23606798e-01, -1.58113883e-01, 3.42437595e-16, 1.58113883e-01, 2.23606798e-01, 1.58113883e-01, 8.21518047e-17, -1.58113883e-01, -2.23606798e-01, -1.58113883e-01, -1.09535740e-16, 1.58113883e-01, 2.23606798e-01, 1.58113883e-01, -6.57491254e-16, -1.58113883e-01], [-3.49798098e-02, -1.99235116e-01, -1.99235116e-01, -3.49798098e-02, 1.58113883e-01, 2.20853827e-01, 1.01515362e-01, -1.01515362e-01, -2.20853827e-01, -1.58113883e-01, 3.49798098e-02, 1.99235116e-01, 1.99235116e-01, 3.49798098e-02, -1.58113883e-01, -2.20853827e-01, -1.01515362e-01, 1.01515362e-01, 2.20853827e-01, 1.58113883e-01, -3.49798098e-02, -1.99235116e-01, -1.99235116e-01, -3.49798098e-02, 1.58113883e-01, 2.20853827e-01, 1.01515362e-01, -1.01515362e-01, -2.20853827e-01, -1.58113883e-01, 3.49798098e-02, 1.99235116e-01, 1.99235116e-01, 3.49798098e-02, -1.58113883e-01, -2.20853827e-01, -1.01515362e-01, 1.01515362e-01, 2.20853827e-01, 1.58113883e-01]])
Obs = {'M': 12, 'model': <function <lambda>>, 'noise': GaussRV({ 'C': <CovMat> M: 12 kind: 'full' trunc: 1.0 rk: 12 full: [[0.01 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ] [0. 0.01 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ] [0. 0. 0.01 0. 0. 0. 0. 0. 0. 0. 0. 0. ] [0. 0. 0. 0.01 0. 0. 0. 0. 0. 0. 0. 0. ] [0. 0. 0. 0. 0.01 0. 0. 0. 0. 0. 0. 0. ] [0. 0. 0. 0. 0. 0.01 0. 0. 0. 0. 0. 0. ] [0. 0. 0. 0. 0. 0. 0.01 0. 0. 0. 0. 0. ] [0. 0. 0. 0. 0. 0. 0. 0.01 0. 0. 0. 0. ] [0. 0. 0. 0. 0. 0. 0. 0. 0.01 0. 0. 0. ] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.01 0. 0. ] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.01 0. ] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.01]] diag: [0.01 0.01 0.01 ... 0.01 0.01 0.01], 'mu': array([0]), 'M': 12 })}
HMM = HiddenMarkovModel({ 'Dyn': Operator({ 'M': 40, 'model': <function step>, 'noise': GaussRV({ 'mu': array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]), 'M': 40, 'C': 0 }), 'linear': <function dstep_dx> }), 'Obs': <TimeDependentOperator> CONSTANT operator sepcified by .Op1: Operator({ 'M': 12, 'model': <function <lambda>>, 'noise': GaussRV({ 'C': <CovMat> M: 12 kind: 'full' trunc: 1.0 rk: 12 full: [[0.01 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ] [0. 0.01 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ] [0. 0. 0.01 0. 0. 0. 0. 0. 0. 0. 0. 0. ] [0. 0. 0. 0.01 0. 0. 0. 0. 0. 0. 0. 0. ] [0. 0. 0. 0. 0.01 0. 0. 0. 0. 0. 0. 0. ] [0. 0. 0. 0. 0. 0.01 0. 0. 0. 0. 0. 0. ] [0. 0. 0. 0. 0. 0. 0.01 0. 0. 0. 0. 0. ] [0. 0. 0. 0. 0. 0. 0. 0.01 0. 0. 0. 0. ] [0. 0. 0. 0. 0. 0. 0. 0. 0.01 0. 0. 0. ] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.01 0. 0. ] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.01 0. ] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.01]] diag: [0.01 0.01 0.01 ... 0.01 0.01 0.01], 'mu': array([0]), 'M': 12 }) }), 'tseq': <Chronology> - K: 1001 - Ko: 1000 - T: 50.050000000000004 - BurnIn: 20 - dto: 0.05 - dt: 0.05, 'X0': GaussRV({ 'C': <CovMat> M: 40 kind: 'diag' trunc: 1.0 rk: 40 full: (only computing/printing corners) [[0.001 0. 0. ... 0. 0. 0. ] [0. 0.001 0. ... 0. 0. 0. ] [0. 0. 0.001 ... 0. 0. 0. ] ... [0. 0. 0. ... 0.001 0. 0. ] [0. 0. 0. ... 0. 0.001 0. ] [0. 0. 0. ... 0. 0. 0.001]] diag: [0.001 0.001 0.001 ... 0.001 0.001 0.001], 'mu': array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]), 'M': 40 }), 'liveplotters': [], 'sectors': {}, 'name': 'Lorenz96/spectral_obs.py' })