Computing norms of powers
One of the main tools in our computer aided proofs is obtaining an estimate on the distance in the weak norm from the ``abstract'' invariant density $f$ and the approximated invariant density $f_k$ in the weak norm. We refer to
Galatolo S., Monge M., Nisoli I., Poloni F. A general framework for the rigorous computation of invariant densities and the coarse-fine strategy [arXiv:2212.05017]
To obtain this estimate we need to get upper bounds on $||L^n_k|_{U_0}||_w.$
The main estimate is $||f-f_k||_w \leq \sum_{i=0}^n ||L^n_k|_{U_0}||_w ||L-L_k f||_{s\to w}$
RigorousInvariantMeasures.gamma
— Methodγₙ constants for floating point error estimation, as in [Higham, Accuracy and Stability of Numerical Algorithms]
RigorousInvariantMeasures.infinite_sum_norms
— MethodEstimate ||I + Q + Q^2 + … || (infinite sum) using a list of computed norm bounds norms[k] ≥ ||Q^k||.
RigorousInvariantMeasures.max_nonzeros_per_row
— MethodReturns the maximum number of (structural) nonzeros in a row of A
RigorousInvariantMeasures.norms_of_powers
— MethodEstimates the norms ||Q||, ||Q^2||, ... ||Q^m|| on U^0.
U is the matrix [ones(1,n-1); -I_(n-1,n-1)]. It is currently assumed that f*U==0 (i.e., all elements of f are equal).
f must be an interval vector.
The following constants may be specified as keyword arguments:
normQ, normE, normv0, normEF, normIEF, normN
otherwise they are computed (which may be slower).
e and f must be specified in case isintegralpreserving==false In case isintegralpreserving is true, they may be specified but they are then ignored.
Implementation note: currently we perform this computation one column at a time, to be able to scale (slowly) to cases with large size; for moderate sizes, it would indeed be better to do the computation all columns at the same time, in BLAS level 3.
RigorousInvariantMeasures.norms_of_powers_dfly
— MethodArrays of bounds to $||Q^k||_{w → s} = \sup_{||f||_w=1} ||Q^k f||_s$ and to $||Q^k||_{w}$ coming theoretically from iterated DFLY inequalities (the "small matrix method").
Returns two arrays (strongs, norms) of length m: strongs[k] bounds $||Q^k f||_s$, norms[k] bounds $||Q^k f||$)
RigorousInvariantMeasures.norms_of_powers_from_coarser_grid
— MethodEstimate norms of powers from those on a coarser grid (see paper for details)
RigorousInvariantMeasures.norms_of_powers_trivial
— MethodArray of "trivial" bounds for the powers of a DiscretizedOperator (on the whole space) coming from from ||Q^k|| ≤ ||Q||^k
RigorousInvariantMeasures.refine_norms_of_powers
— MethodCompute better and/or more estimates of power norms using the fact that $||Q^{k+h}|| ≤ ||Q^k|| \cdot ||Q^h||$. This uses multiplicativity, so it will not work for mixed norms, e.g., $||Q^k||_{s → w}$, or $||M^k|_{U^0}||$ (unless M preserves $U^0$, which is the case for $Q|_{U^0}$).
The methods for systems with noise are the following
RigorousInvariantMeasures.distance_from_invariant_noise
— MethodBounds rigorously the distance of w from the fixed point of Q (normalized with integral = 1), using a vector of bounds norms[k] ≥ ||Qh^k|{U_h^0}||.
RigorousInvariantMeasures.finepowernormboundsnoise
— MethodUses power norm bounds already computed for a coarse operator to estimate the same norms for a finer operator
RigorousInvariantMeasures.invariant_vector_noise
— MethodReturn a numerical approximation to the (hopefully unique) invariant vector of the dynamic with discretized operator Q.
The vector is normalized so that integral_covector(B)*w ≈ 1
RigorousInvariantMeasures.norms_of_powers_abstract_noise
— MethodArrays of bounds to ||Q^k||{w → s} = sup{||f||w=1} ||Q^k f||s and to ||Q^k||_{w} coming theoretically from iterated DFLY inequalities (the "small matrix method").
Returns two arrays (strongs, norms) of length m: strongs[k] bounds ||Q^k f||_s, norms[k] bounds ||Q^k f||)
RigorousInvariantMeasures.norms_of_powers_from_coarser_grid_noise
— MethodEstimate norms of powers from those on a coarser grid (see paper for details) TODO: Check if it works for other basis types
RigorousInvariantMeasures.norms_of_powers_noise
— MethodEstimates the norms ||Q||, ||Q^2||, ... ||Q^m|| on U^0.
U is the matrix [ones(1,n-1); -I_(n-1,n-1)]. It is currently assumed that f*U==0 (i.e., all elements of f are equal).
f must be an interval vector.
The following constants may be specified as keyword arguments:
normQ, normE, normv0, normEF, normIEF, normN
otherwise they are computed (which may be slower).
e and f must be specified in case isintegralpreserving==false In case isintegralpreserving is true, they may be specified but they are then ignored.
RigorousInvariantMeasures.norms_of_powers_trivial_noise
— MethodArray of "trivial" bounds for the powers of a DiscretizedOperator (on the whole space) coming from from ||Q^k|| ≤ ||Q||^k
RigorousInvariantMeasures.residualboundnoise
— MethodReturn an upper bound to Q_h*w - w in the given norm
Norms
RigorousInvariantMeasures.abs_or_mag
— Method'Absolute value' definition that returns mag(I) for an interval and abs(x) for a real
RigorousInvariantMeasures.z_times_conjz
— MethodComputes a rigorous upper bound for z*z'
Norm bounds
RigorousInvariantMeasures.normbound
— MethodRigorous upper bound on a vector norm. Note that Linf, L1 are the "analyst's" norms
RigorousInvariantMeasures.opnormbound
— MethodCertified upper bound to ||A|| (of specified NormKind)
RigorousInvariantMeasures.opnormbound
— MethodThese functions compute a rigorous upper bound for the 2-norm of a vector; we have a specialized version for complex numbers to avoid taking the sqrt root and squaring again
Norm Cachers
The methods for systems with noise are the following
RigorousInvariantMeasures.NormCacher
— TypeTypes to compute norms iteratively by "adding a column at a time".
RigorousInvariantMeasures.NormCacher
— MethodCreate a new NormCacher to compute the normbound of the empty matrix with n rows
RigorousInvariantMeasures.add_column!
— MethodUpdate a NormCacher to add one column to the matrix it is computing a norm of. This column may be affected by an error ε (in the same norm).
RigorousInvariantMeasures.get_norm
— MethodReturn the norm of the matrix the NormCacher is working on.
Convergence rates abstract operator
RigorousInvariantMeasures.convergencerateabstract
— Methodconvergencerateabstract(Bas::Ulam, D::Dynamic, norms)
Estimate the strong norm of $||L^n|_{U_0}||_s$ from norms
, the bounds on the weak norm of the discretized operator
$||L_{h}^n|_{U_0}||_w$
This method was developed in Stefano Galatolo, Isaia Nisoli, Benoît Saussol. An elementary way to rigorously estimate convergence to equilibrium and escape rates. Journal of Computational Dynamics, 2015, 2 (1) : 51-64. doi: 10.3934/jcd.2015.2.51
RigorousInvariantMeasures.eig_costants_small_matrix
— Methodeig_costants_small_matrix(A)
Return the dominant eigenvalue and associated left eigenvector of the small matrix