solve-methods using generalized inverses for various types of matrices
solve(a,b, ...)
# S4 method for ANY,ANY
solve(a, b, generalized = 
getdistrOption("use.generalized.inverse.by.default"), tol = 1e-10)
# S4 method for PosSemDefSymmMatrix,ANY
solve(a, b, generalized =
getdistrOption("use.generalized.inverse.by.default"), tol = 1e-10)
# S4 method for PosDefSymmMatrix,ANY
solve(a, b, tol = 1e-10)matrix to be inverted / to be solved for RHS.
a numeric or complex vector or matrix giving the right-hand
          side(s) of the linear system.  If missing, b is taken to be
          an identity matrix and solve will return the inverse of
          a.
further arguments to be passed to specific methods (see solve).
logical: should generalized / Moore-Penrose inverses be used? By default uses
  the corresponding global option to be set by distroptions.
the tolerance for detecting linear dependencies in the
          columns of a.  Default is .Machine$double.eps.
signature(a = "ANY", b = "ANY"): tries to evaluate solve.default method from base in classical way;
if this gives an error, this one is returned if generalized is TRUE, else it will then
return \(a^-b\) where \(a^-\) is the pseudo or Moore-Penrose inverse of \(a\).
signature(a = "PosSemDefSymmMatrix", b = "ANY"): evaluates \(a^-b\) where \(a^-\) is the pseudo or Moore-Penrose
inverse of \(a\).
signature(a = "PosDefSymmMatrix", b = "ANY"): evaluates solve method from base in classical way.
The method for the Moore-Penrose inverse for 
signature(a = "PosSemDefSymmMatrix", b = "ANY") uses eigen to find the eigenvalue 
decomposition of a and then simply "pseudo-inverts" the corresponding diagonal matrix built from
eigen(a)$values, while for signature(a = "ANY", b = "ANY")  it uses the svd 
decomposition of a and then simply "pseudo-inverts" the corresponding diagonal matrix built from
svd(a)$d.
solve for the default method, eigen and svd 
for the pseudo inversion