get the parameter solution Matrix at a singular value
            V_1 * S_1^(_1) * U_1^T

        Parameters
        ----------
        singular_value : int
            singular value to calc R at

        Returns
        -------
        G : pyemu.Matrix
            parameter solution matrix at singular value

def G(self, singular_value):
        """get the parameter solution Matrix at a singular value
            V_1 * S_1^(_1) * U_1^T

        Parameters
        ----------
        singular_value : int
            singular value to calc R at

        Returns
        -------
        G : pyemu.Matrix
            parameter solution matrix at singular value

        """
        if self.__G is not None and singular_value == self.__G_sv:
            return self.__G

        if singular_value == 0:
            self.__G_sv = 0
            self.__G = Matrix(
                x=np.zeros((self.jco.ncol,self.jco.nrow)),
                row_names=self.jco.col_names, col_names=self.jco.row_names)
            return self.__G
        mn = min(self.jco.shape)
        try:
            mn = min(self.pst.npar_adj, self.pst.nnz_obs)
        except:
            pass
        if singular_value > mn:
            self.logger.warn(
                "ErrVar.G(): singular_value > min(npar,nobs):" +
                "resetting to min(npar,nobs): " +
                str(min(self.pst.npar_adj, self.pst.nnz_obs)))
            singular_value = min(self.pst.npar_adj, self.pst.nnz_obs)
        self.log("calc G @" + str(singular_value))
        #v1 = self.qhalfx.v[:, :singular_value]
        v1 = self.xtqx.v[:, :singular_value]
        #s1 = ((self.qhalfx.s[:singular_value]) ** 2).inv
        s1 = (self.xtqx.s[:singular_value]).inv
        self.__G = v1 * s1 * v1.T * self.jco.T * self.obscov.inv
        self.__G_sv = singular_value
        self.__G.row_names = self.jco.col_names
        self.__G.col_names = self.jco.row_names
        self.__G.autoalign = True
        self.log("calc G @" + str(singular_value))
        return self.__G