Issue
This analysis provides a way to look at contributions to the loss function projected onto eigenvectors of the noise. Currently it will do this for relatively few eigenvectors (which is typically OK for non-diagonal noise estimated with a few data samples).
|
""" |
|
function analyze_residual(ekp, iter; n_eigenvectors = 3) |
|
obs_series = EKP.get_observation_series(ekp) |
|
obs_noise_cov = EKP.get_obs_noise_cov(obs_series; build = false) |
However in the setting of diagonal noise, we can easily look at all eigenvectors (as they are just the unit vectors) and so this function will only compute contributions of the difference (/residual) onto the first, say 3, pixels. this is very lacking. We should be able to check if all obs_noise_cov matrix types are diagonal, and if so, perform the variable decomposition directly, without computing any eigen decompositions. (This can be done before creating a linear map)
Issue
This analysis provides a way to look at contributions to the loss function projected onto eigenvectors of the noise. Currently it will do this for relatively few eigenvectors (which is typically OK for non-diagonal noise estimated with a few data samples).
ClimaCalibrate.jl/src/svd_analysis.jl
Lines 185 to 188 in f86e6b3
However in the setting of diagonal noise, we can easily look at all eigenvectors (as they are just the unit vectors) and so this function will only compute contributions of the difference (/residual) onto the first, say 3, pixels. this is very lacking. We should be able to check if all
obs_noise_covmatrix types are diagonal, and if so, perform the variable decomposition directly, without computing any eigen decompositions. (This can be done before creating a linear map)