Forms the values of LRV structures.

### Options

`PRINT` = string tokens |
Printed output required (`roots, vectors` ); default `*` i.e. no printing |
---|---|

`NROOTS` = scalar |
Number of roots or vectors to print; default `*` i.e. print them all |

`SMALLEST` = string token |
Whether to print the smallest roots instead of the largest (`yes, no` ); default `no` |

`TOLERANCE` = scalar |
Tolerance for detecting zero roots |

### Parameters

`INMATRIX` = matrices or symmetric matrices |
Matrices whose latent roots and vectors are to be calculated |
---|---|

`LRV` = LRVs |
LRV to store the latent roots and vectors from each `INMATRIX` |

`WMATRIX` = symmetric matrices |
(Generalized) within-group sums of squares and products matrix used in forming the two-matrix decomposition; if any of these is omitted, it is taken to be the identity matrix, giving the usual spectral decomposition |

`ILRV` = LRVs |
LRV to store the imaginary parts of the latent roots and vectors arising from the decomposition of a non-symmetric matrix |

### Description

The `INMATRIX`

parameter lists the matrices for which latent roots and vectors are to be calculated. If the `WMATRIX`

parameter is not set, `FLRV`

provides the solution of the *one-matrix eigenvalue problem*

*AX* = *XL*

*A* is usually an *n*-by-*n* symmetric matrix. *XLX*ʹ is then the spectral decomposition of the symmetric matrix *A*. Here *L* is a diagonal matrix containing the *n* latent roots, or eigenvalues, of *A* ordered such that

*l*_{1} ≥ *l*_{2} ≥ … ≥ *l*_{n}

The columns of the *n*-by-*n* matrix *X* are the corresponding latent vectors, or eigenvectors. The matrix *X* is orthogonal:

*X*ʹ*X* = *XX*ʹ = *I _{n}*

The three options of `FLRV`

control the printing of the results. You use the `PRINT`

option to specify whether you want the roots or vectors to be printed. If you request the roots to be printed, the trace will be printed as well. By default nothing is printed. The `NROOTS`

option governs how many of the roots and vectors are printed, while the `SMALLEST`

option determines whether the largest or smallest roots, and corresponding vectors, are printed.

You can use the `LRV`

parameter to save the latent roots and vectors, and the trace. You must declare these structures in advance if you want to save less than the full number of roots; otherwise, they are defined automatically, as `LRVs`

with *n* rows. You can save a subset of the latent roots and vectors by supplying an LRV structure with fewer columns than rows. However this saves only the largest roots and the corresponding vectors. You cannot save the smallest roots directly, as the `SMALLEST`

option applies only to printing. If you want to save the smallest roots, then you must save the complete set of roots and vectors, and extract the last columns of the matrix, for example using qualified identifiers. These rules are the same as those applied in the directives for multivariate analysis.

Alternatively, *A* can be a square, unsymmetric, matrix. This again provides the solution of the eigenvalue problem

*AX* = *XL*

but now *A* is a square matrix of order *n*, *L* is a diagonal matrix of *n* latent roots, and *X* is a square matrix of order *n* containing the right latent vectors of *A*. The solution of this problem may produce some complex latent roots, occurring as complex conjugate pairs, in which case the corresponding latent vectors are also complex conjugate pairs. To accomodate this, `FLRV`

has a parameter, `ILRV`

, for specifying an LRV structure to store the imaginary parts of the latent roots and vectors (the real parts being stored by the `LRV`

parameter). The `ILRV`

parameter need not be set, but a warning message is then printed if any complex roots are produced. If all the latent roots are real, they are sorted into descending order, such that *l*_{1} ≥ *l*_{2} ≥ … *l _{n}*, as in the symmetric case, but if some roots are complex they are ordered such that |

*l*

_{1}| ≥ |

*l*

_{2}| ≥ … ≥ |

*l*|. To detect whether a latent root is real, Genstat checks whether imaginary part is close to zero; to allow for numerical imprecision the value is tested against |

_{n}*l*

_{1}| multiplied by the valued supplied by the

`TOLERANCE`

option, by default 10^{-6}. The values saved by the

`LRV`

and `ILRV`

parameters, however, are those generated by the algorithm, so procedures using `FLRV`

may also need to test explicitly for zero roots. The `TOLERANCE`

option and `ILRV`

parameter are ignored if `INMATRIX`

is set to a symmetric matrix. Percentage variations are printed only if all roots are real. The latent vectors *x*are normalized so that

_{i}*x*ʹ

_{i}*x*= 1, but this is not sufficient to determine them uniquely since they can still be scaled by any (complex) scalar

_{i }*z*such that |

*z*|=1. The convention adopted in Genstat is to apply an additional scaling such that the largest element of each

*x*is real and positive. The latent vectors are guaranteed to be orthogonal only when the matrix

_{i}*A*is symmetric.

`FLRV`

can also solve the *two-matrix eigenvalue problem*

*AX* = *WXL*

The symmetric matrix *W* is specified using the `WMATRIX`

parameter. *A* is a symmetric matrix again specified by the `INMATRIX`

parameter; if this is set to a square matrix, the `WMATRIX`

parameter is ignored. *L* is a again diagonal matrix, and *X* a square matrix. Both *A* and *W* must have the same number of rows, *n*, and *W* must be positive semi-definite. Now the latent roots are the *n* elements of the diagonal matrix *L* and are the successive maxima of

*l* = (*x*ʹ*Ax*) / (*x*ʹ*Wx*)

where *x* is the corresponding column of the *n*-by-*n* matrix *X*, normalized so that *X*ʹ*WX*=*I*. The two-matrix decomposition is particularly relevant for canonical variate analysis.

For either eigenvalue problem, the sum of the latent roots is stored in the element of the `LRV`

labelled `'Trace'`

. In the one-matrix problem, this is also the trace of the original matrix *A*; but for the two-matrix problem, it is the trace of *W*^{-1}*A*. Latent roots are often expressed as percentages of the trace.

The method used for the spectral decomposition of a symmetric matrix first reduces the matrix to tri-diagonal form using Householder transformations (Martin, Reinsch & Wilkinson 1968); this is followed by a QL algorithm for finding the eigenvalues and eigenvectors (Bowdler, Martin, Reinsch & Wilkinson 1968). The algorithm used for the unsymmetric eigenvalue problem is based on NAG Library subroutine F02EBF. The documentation of this routine should be consulted for a full discussion of the method and accuracy of the results (NAG 1994). If `INMATRIX`

is set to a matrix `A`

of order *n* which happens to be symmetric the results should be identical, up to the sign of the latent vectors, apart from small numerical discrepancies of the order of machine precision and dependent on *n* and the condition number of `A`

. The two-matrix problem is solved using two spectral decompositions, each computed as for the first problem.

Options: `PRINT`

, `NROOTS`

, `SMALLEST`

, `TOLERANCE`

.

Parameters: `INMATRIX`

, `LRV`

, `WMATRIX`

, `ILRV`

.

### References

Bowdler, H., Martin, R.S., Reinsch, C. & Wilkinson, J.H. (1968). The QR and QL algorithms for symmetric matrices. *Numerische Mathematik*, 11, 293-306.

Martin, R.S., Reinsch, C. & Wilkinson, J.H. (1968). Householders tridiagonalisation of a symmetric matrix. *Numerische Mathematik*, 11, 181-195.

Numerical Algorithms Group. (1994). F02EBF. *NAG Fortran Library Mark 15, Volume 5*. Oxford: Numerical Algorithms Group.

### See also

Directives: `LRV`

, `MATRIX`

, `SYMMETRICMATRIX`

, `NAG`

, `QRD`

, `SVD`

.

Commands for: Calculations and manipulation, Multivariate and cluster analysis.

### Example

" Genstat example FLRV-1: Symmetric eigenvalue decompositions" SYMMETRICMATRIX [ROWS=5] a; VALUES=!(1.22, 4.12,4.15, 4.12,7.02,7.12,\ 5.68,8.12,4.23,5.25,\ 8.12,4.65,8.36,7.25,9.12) " The & symbol indicates that the directive name or procedure name from the previous statement is to be repeated, together with any option settings that are not explicitly changed. In this case it is the SYMMETRICMATRIX directive that is repeated. " & [ROWS=4] b; VALUES=!(16, 4,9, 10,3,25, 4,6,5,16) & [ROWS=4] w; VALUES=!( 4, -1,9, 2,-3,16, 1,0,-1,1) " Print the three symmetric matrices, one after the other. " PRINT [SERIAL=y] a,b,w " Declare three LRV structures l, l5 and l5s which will hold the results of the matrix decompositions. " LRV [ROWS=4; COLUMNS=4] l LRV [ROWS=5; COLUMNS=5] l5 & [ROWS=5; COLUMNS=3] l5s " Obtain and print the latent roots of the three symmetric matrices: 1. For matrix a, saving all five roots. 2. For matrix a, saving the largest three roots. 3. For matrix b, saving all roots and the within-group sums of squares and product matrix used in forming the decomposition into the matrix w. " FLRV INMATRIX=a; LRV=l5 PRINT [SERIAL=y] l5[] FLRV INMATRIX=a; l5s PRINT [SERIAL=y] l5s[] FLRV INMATRIX=b; LRV=l; WMATRIX=w PRINT [SERIAL=y] l[]