Schur                 package:Matrix                 R Documentation

_S_c_h_u_r _D_e_c_o_m_p_o_s_i_t_i_o_n _o_f _a _M_a_t_r_i_x

_D_e_s_c_r_i_p_t_i_o_n:

     Computes the Schur decomposition and eigenvalues of a square
     matrix; see the BACKGROUND information below.

_U_s_a_g_e:

     Schur(x, vectors, ...)

_A_r_g_u_m_e_n_t_s:

       x: numeric (or complex, in future) square Matrix (inheriting
          from class '"Matrix"'). Missing values (NAs) are not allowed. 

 vectors: logical.  When 'TRUE' (the default), the Schur vectors are
          computed, and the result is a proper 'MatrixFactorization' of
          class 'Schur'. 

     ...: further arguments passed to or from other methods.

_D_e_t_a_i_l_s:

     Based on the Lapack subroutine 'dgees'.

_V_a_l_u_e:

     If 'vectors' are 'TRUE', as per default, an object of class
     'Schur'.

     If 'vectors' are 'FALSE', a list with components 

       T: the upper quasi-triangular (square) matrix of the Schur
          decomposition.

 EValues: the vector of 'numeric' or 'complex' eigen values of T or A.

_B_A_C_K_G_R_O_U_N_D:

     If 'A' is a square matrix, then 'A = Q T t(Q)', where 'Q' is
     orthogonal, and 'T' is upper block-triangular (nearly triangular
     with either 1 by 1 or 2 by 2 blocks on the diagonal) where the 2
     by 2 blocks correspond to (non-real) complex eigenvalues. The
     eigenvalues of 'A' are the same as those of 'T', which are easy to
     compute.  The Schur form is used most often for computing
     non-symmetric eigenvalue decompositions, and for computing
     functions of matrices such as matrix exponentials.

_R_e_f_e_r_e_n_c_e_s:

     Anderson, E., et al. (1994). _LAPACK User's Guide,_ 2nd edition,
     SIAM, Philadelphia.

_E_x_a_m_p_l_e_s:

     Schur(Hilbert(9))              # Schur factorization (real eigenvalues)

     (A <- Matrix(round(rnorm(5*5, sd = 100)), nrow = 5))
     (Sch.A <- Schur(A))

     eTA <- eigen(Sch.A@T)
     str(SchA <- Schur(A, vectors=FALSE))# no 'T' ==> simple list
     stopifnot(all.equal(eTA$values, eigen(A)$values, tol = 1e-13),
               all.equal(eTA$values,
                         local({z <- Sch.A@EValues
                                z[order(Mod(z), decreasing=TRUE)]}), tol = 1e-13),
               identical(SchA$T, Sch.A@T),
               identical(SchA$EValues, Sch.A@EValues))

