Source code for pyacs.lib.glinalg.make_normal_system_tarantola

"""Form the Tarantola-style normal system (with prior)."""

import numpy as np


[docs] def make_normal_system_tarantola(G, d, m0, inv_Cd, inv_Cm): """Form the Tarantola-style normal system (with prior). Returns N = G.T inv(Cd) G + inv(Cm), b = G.T inv(Cd) d + inv(Cm) m0. Parameters ---------- G : numpy.ndarray Design matrix. d : array_like Observation vector. m0 : array_like or float Prior model. inv_Cd : numpy.ndarray Inverse data covariance. inv_Cm : numpy.ndarray or float Inverse prior covariance. Returns ------- tuple (N, b) normal matrix and right-hand side. """ TMP = np.dot(G.T, inv_Cd) if np.ndim(m0) == 0: return np.dot(TMP, G) + inv_Cm, np.dot(TMP, d.reshape(-1, 1)) + inv_Cm * m0 else: return np.dot(TMP, G) + inv_Cm, np.dot(TMP, d.reshape(-1, 1)) + np.dot(inv_Cm, m0.reshape(-1, 1))