Matrix Eigensystem Tutorial For Parallel Computation

Similar documents
NAG Library Routine Document F02HDF.1

Intel Math Kernel Library (Intel MKL) LAPACK

NAG Toolbox for MATLAB Chapter Introduction. F02 Eigenvalues and Eigenvectors

LAPACK Introduction. Zhaojun Bai University of California/Davis. James Demmel University of California/Berkeley

APPLIED NUMERICAL LINEAR ALGEBRA

Eigenvalue problems. Eigenvalue problems

Lecture 13 Stability of LU Factorization; Cholesky Factorization. Songting Luo. Department of Mathematics Iowa State University

Parallel Eigensolver Performance on the HPCx System

Linear Algebra. PHY 604: Computational Methods in Physics and Astrophysics II

Lecture 8: Fast Linear Solvers (Part 7)

NAG Toolbox for Matlab nag_lapack_dggev (f08wa)

11.0 Introduction. An N N matrix A is said to have an eigenvector x and corresponding eigenvalue λ if. A x = λx (11.0.1)

NAG Library Routine Document F08QUF (ZTRSEN)

ScaLAPACK: A Portable Linear Algebra Library for Distributed Memory Computers - Design Issues and Performance (Technical Paper)

NAG Library Routine Document F08PNF (ZGEES)

AMS526: Numerical Analysis I (Numerical Linear Algebra) Lecture 23: GMRES and Other Krylov Subspace Methods; Preconditioning

B553 Lecture 5: Matrix Algebra Review

Symmetric Pivoting in ScaLAPACK Craig Lucas University of Manchester Cray User Group 8 May 2006, Lugano

Solving the Inverse Toeplitz Eigenproblem Using ScaLAPACK and MPI *

Arnoldi Methods in SLEPc

NAG Library Routine Document F08FPF (ZHEEVX)

ARPACK. Dick Kachuma & Alex Prideaux. November 3, Oxford University Computing Laboratory

Module 6.6: nag nsym gen eig Nonsymmetric Generalized Eigenvalue Problems. Contents

ARPACK. A c++ implementation of ARPACK eigenvalue package.

Numerical Methods in Matrix Computations

Section 4.5 Eigenvalues of Symmetric Tridiagonal Matrices

Numerical Linear Algebra

NAG Library Routine Document F08UBF (DSBGVX)

Accelerating computation of eigenvectors in the dense nonsymmetric eigenvalue problem

The Ongoing Development of CSDP

Algorithm 853: an Efficient Algorithm for Solving Rank-Deficient Least Squares Problems

Eigenvalue and Eigenvector Problems

Last Time. Social Network Graphs Betweenness. Graph Laplacian. Girvan-Newman Algorithm. Spectral Bisection

LAPACK-Style Codes for Pivoted Cholesky and QR Updating. Hammarling, Sven and Higham, Nicholas J. and Lucas, Craig. MIMS EPrint: 2006.

Lecture 2: Numerical linear algebra

Lecture 10: Eigenvectors and eigenvalues (Numerical Recipes, Chapter 11)

Accelerating computation of eigenvectors in the nonsymmetric eigenvalue problem

Porting a sphere optimization program from LAPACK to ScaLAPACK

Scientific Computing with Case Studies SIAM Press, Lecture Notes for Unit VII Sparse Matrix

NAG Library Routine Document F08FNF (ZHEEV).1

Math 504 (Fall 2011) 1. (*) Consider the matrices

Lecture 11. Linear systems: Cholesky method. Eigensystems: Terminology. Jacobi transformations QR transformation

Solving Ax = b, an overview. Program

AMS526: Numerical Analysis I (Numerical Linear Algebra)

Out-of-Core SVD and QR Decompositions

A = 3 B = A 1 1 matrix is the same as a number or scalar, 3 = [3].

Matrix Algorithms. Volume II: Eigensystems. G. W. Stewart H1HJ1L. University of Maryland College Park, Maryland

NAG Library Chapter Introduction. f08 Least-squares and Eigenvalue Problems (LAPACK)

On aggressive early deflation in parallel variants of the QR algorithm

Matrix Computations and Semiseparable Matrices

Numerical Linear Algebra

Evaluation and Benchmarking of Highly Scalable Parallel Numerical Libraries

Exponentials of Symmetric Matrices through Tridiagonal Reductions

Presentation of XLIFE++

MAGMA. Matrix Algebra on GPU and Multicore Architectures. Mark Gates. February 2012

Eigenvalue Problems and Singular Value Decomposition

Notes on Eigenvalues, Singular Values and QR

(Linear equations) Applied Linear Algebra in Geoscience Using MATLAB

Chapter f Linear Algebra

NAG Library Routine Document F08JDF (DSTEVR)

(Mathematical Operations with Arrays) Applied Linear Algebra in Geoscience Using MATLAB

Solving large scale eigenvalue problems

Adaptive Spike-Based Solver 1.0 User Guide

11.5 Reduction of a General Matrix to Hessenberg Form

A VERY BRIEF LINEAR ALGEBRA REVIEW for MAP 5485 Introduction to Mathematical Biophysics Fall 2010

Orthogonal iteration to QR

NAG Library Routine Document F08FAF (DSYEV)

Lecture 3: QR-Factorization

Introduction to Numerical Analysis

MAA507, Power method, QR-method and sparse matrix representation.

Block Bidiagonal Decomposition and Least Squares Problems

Roundoff Error. Monday, August 29, 11

Accelerating Linear Algebra on Heterogeneous Architectures of Multicore and GPUs using MAGMA and DPLASMA and StarPU Schedulers

Applied Linear Algebra in Geoscience Using MATLAB

4.8 Arnoldi Iteration, Krylov Subspaces and GMRES

AMS526: Numerical Analysis I (Numerical Linear Algebra)

F08BEF (SGEQPF/DGEQPF) NAG Fortran Library Routine Document

Lecture: Numerical Linear Algebra Background

Computing least squares condition numbers on hybrid multicore/gpu systems

Numerical Methods I Eigenvalue Problems

Parallelization of the Molecular Orbital Program MOS-F

Index. Copyright (c)2007 The Society for Industrial and Applied Mathematics From: Matrix Methods in Data Mining and Pattern Recgonition By: Lars Elden

Algebraic Equations. 2.0 Introduction. Nonsingular versus Singular Sets of Equations. A set of linear algebraic equations looks like this:

SHHEIG Users Guide. Peter Benner, Vasile Sima, and Matthias Voigt June 10, 2015

Parallel eigenvalue reordering in real Schur forms

Computing Eigenvalues and/or Eigenvectors;Part 2, The Power method and QR-algorithm

NAG Library Routine Document F08YUF (ZTGSEN).1

Index. for generalized eigenvalue problem, butterfly form, 211

Introduction to Matlab

Parallel eigenvalue reordering in real Schur forms

16. Solution of elliptic partial differential equation

A Parallel Divide and Conquer Algorithm for the Symmetric Eigenvalue Problem on Distributed Memory Architectures. F Tisseur and J Dongarra

Mapping Lapack to Matlab, Mathematica and Ada 2005 functions (DRAFT version, may contain errors)

Solution of Large, Dense Symmetric Generalized Eigenvalue Problems Using Secondary Storage

A model leading to self-consistent iteration computation with need for HP LA (e.g, diagonalization and orthogonalization)

Preface to Second Edition... vii. Preface to First Edition...

In this article we discuss sparse matrix algorithms and parallel algorithms, Solving Large-Scale Control Problems

SOLVING SPARSE LINEAR SYSTEMS OF EQUATIONS. Chao Yang Computational Research Division Lawrence Berkeley National Laboratory Berkeley, CA, USA

Some notes on efficient computing and setting up high performance computing environments

MA3025 Course Prerequisites

Transcription:

Matrix Eigensystem Tutorial For Parallel Computation High Performance Computing Center (HPC) http://www.hpc.unm.edu 5/21/2003 1

Topic Outline Slide Main purpose of this tutorial 5 The assumptions made about the users 6 Important points to be noted 7 Survey of available parallel software Organization of ScaLAPACK 8 Description of P_ARPACK slide to be provided... Commercially available parallel libraries (slide to be provided) slide to be provided References to ScaLAPACK 9 Brief definition of the matrix eigensystem problem 10 Why you need to study this tutorial before calling ScaLAPACK routines 11 Generic steps in solving the eigenvalue problem 12 Data-type and matrix-type designators in the ScaLAPACK routines 13 Classification of ScaLAPACK routines 14 5/21/2003 2

Topic Outline Continued Slide ScaLAPACK generic naming conventions for Drivers and Computational routines 15 ScaLAPACK generic naming conventions for Auxiliary routines 16 Naming convention for the Driver routines 17 Naming convention for the Computational routines 18-19 How to pick the appropriate Driver routines to solve a specific eigensystem in ScaLAPACK 20-21 How to pick the appropriate Computational routines to solve a specific eigensystem 22-24 The theory of computing eigenvalues/eigenvectors of non-symmetric-complex matrices Converting the theory to code 25 26-29 Sample code to calculate the right-rigenvectors in LAPACK 30 Sample code to calculate the right-eigenvectors in ScaLAPACK? Computing the workspace for ScaLAPACK routine? How distribute the data over the processors? How to read program data from a file? 5/21/2003 3

Outline Continued Topic How to test correctness of your eigensystem computation A complete working sample code How to create a makefile on Linux How to submit and run a parallel job using PBS on Linux Exercises Other Areas Where eigensystems are used References Slide slide to be provided slide to be provided slide to be provided slide to be provided slide to be provided slide to be provided slide to be provided slide to be provided 5/21/2003 4

Main Purpose Of This Tutorial Short and concise complement to the ScaLAPACK Users Guide and Tutorial and other package documentation To explain the problems a user encounters using ScaLAPACK on a typical Linux cluster To provide solutions for the typical problems 5/21/2003 5

The Assumptions Made About The Users Of This Tutorial The parallel eigensystem software is installed in an appropriate location in the machine and user needs to be aware of that location Users are assumed to be familiar with: The definition of the matrix eigensystem problem Using an editor The Fortran programming language Program compilation and makefiles Debugging a parallel program Setting the necessary environment variables on a specific machine to submit and run a parallel program 5/21/2003 6

Important Points To Be Noted The application code should be compiled with the same compiler that the parallel eigensystem library is built with. Otherwise, your driver code may not compile and/or link correctly, or may not produce the correct results Later slides will be provided on the topics of: How to create a Makefile (Specific to the Linux) How to submit and run a parallel job on Linux system using PBS 5/21/2003 7

Organization Of ScaLAPACK Organization A library of parallel math procedures Components of ScaLAPACK (dependency graph) Note: PBLAS: Parallel BLAS (Basic Linear Algebra Subroutines) BLACS: Parallel Communication LAPACK: Serial linear algebra computation BLAS: Serial BLAS The compilation and linking of the users program must provide access to these libraries In the linking process, the more general libraries (highest in the dependency graph) should be first with the BLAS last BLAS LAPACK SCALAPACK PBLAS BLACS 5/21/2003 8

References To ScaLAPACK ScaLAPACK Users Guide (published by SIAM Press) Parallel Mathematical Libraries (http://webct.ncsa.uiuc.edu:8900) Describes the structure of ScaLAPACK Provides a guide for using ScaLAPACK routines Highlights processor grid creation and ScaLAPACK data distribution; this tutorial assumes knowledge of this topic Provides a working example for matrix-vector multiplication, using ScaLAPACK ScaLAPACK Tutorial (http://www.netlib.org/scalapack/tutorial) Highlights structure, design, content, performance of ScaLAPACK and other libraries (EISPACK, LINPACK, LAPACK, BLAS, BLACS, PBLAS, ATLAS) Provides examples of calls to ScaLAPACK and other library routines ScaLAPACK Example Programs (http://www.netlib.org/scalapack/examples) Provides working examples for solving symmetric, Hermitian, generalized symmetric, and generalized Hermitian eigenproblems 5/21/2003 9

Brief Definition Of Eigensystem Right eigensystem To compute the non-zero right eigenvector (x) of matrix A corresponding to the eigenvalue?, satisfying the equation A x =? x Left eigensystem To compute the non-zero left eigenvector (x) of matrix A corresponding to the eigenvalue?, satisfying the equation x T A =? x T 5/21/2003 10

Why You Need To Study This Tutorial Before Calling ScaLAPACK Routines Calling an inappropriate routine for your eigenproblem may create very inaccurate results For example, don t solve the symmetric eigenproblem with the general matrix eigenproblem routines Some important concerns: The type of input matrix A (complex, hermitian, symmetric, banded, dense, sparse, ) The data storage and distribution (determined by the user or by the library) Picking the correct algorithm for the following cases Standard problem (Ax =?x) Generalized eigensystems (Ax =?Bx, ABx =?x) Symmetric and non-symmetric eigensystem problems Singular values and pseudo-inverses Least squares problem (may be) 5/21/2003 11

Generic Steps In Solving The Eigenvalue Problem Reduce the original matrix to a condensed form by similarity transformations Kinds of condensed form: Reduce a symmetric matrix to tridiagonal form Reduce a non-symmetric matrix to Hessenberg form, and the Hessenberg form to the Schur form Reduce a rectangular matrix to bidiagonal form to compute a singular value decomposition Compute the eigensystem of the condensed form Transform the eigenvectors of the condensed form back to the original matrix eigenvectors. The eigenvalues of the condensed form are the same as the eigenvalues of the original matrix 5/21/2003 12

Data-type And Matrix-type Designators In The ScaLAPACK Routines Data-type S: Real (Single precision) D: Double precision C: Complex Z: Double complex (or Complex*16) Note: The list is shown for the Fortran language and Fortran is not case sensitive Matrix-type SY: SYmmetric (real) HE: HErmitian (complex) OR: ORthogonal (real) UN: UNitary (complex) GE: GEneral (nonsymmetric, and may be rectangular) TR: Tridiagonal ST: Symmetric Tridagonal PO: POsitive definite 5/21/2003 13

Classification Of ScaLAPACK Routines Routines in ScaLAPACK are classified as: Driver, Computational, and Auxiliary routines Driver routines: Simple Driver A single driver computes all the eigenvalues and eigenvectors of a matrix Expert Driver An expert driver computes all or a selected subset of the eigenvalues and eigenvectors of a matrix Computational routines More than one routine is necessary to complete the eigensystem computations Auxiliary routines Compute certain subtask or common low-level computations (e.g, max, min, abs routines) 5/21/2003 14

ScaLAPACK Generic Naming Conventions For Drivers And Computational Routines SCALAPACK naming system is essentially the same as LAPACK with P added in the beginning of the name (P stands for parallel) The general form of names of Drivers and Computational routines are as follows (includes at most 7 characters with only 2 ZZZ characters for the Driver routines) Symbols represent: P: Parallel Pxyyzzz x: Datatype designator such as S: real, D: double,... yy: Matrix type designator such as: GE: general, SY: symmetric,, or LA: auxiliary routine zzz: Computation type such as: EV: eigenvalues and eigenvectors As an example, PSSYEV is the driver for the parallel (P) eigensystem solver for a single (S) precision symmetric (SY) matrix which finds all eigenvalues (E) and eigenvectors (V) 5/21/2003 15

ScaLAPACK Generic Naming Convention For Auxiliary Routines In the Auxiliary routines A similar naming scheme as the previous slide except that YY is replaced with LA Exceptions: The non-blocked version of the blocked algorithms have the character 2 instead of a letter at the end (e.g., PSGETF2 is the unblocked version of PSGETRF) A few routines which are regarded as extensions to BLAS have similar names to the BLAS routines 5/21/2003 16

Naming Convention For The Driver Routines Computational part (ZZZ) in Driver routine names: Simple Driver ZZZ string is EV (EigenValues & eigenvectors) Expert Driver Computes all or a selected subset of the eigenvalues and eigenvectors ZZZ string is EVX Computes the solution to the Generalized Symmetric Definite Eigenproblems zzz string is with GVX 5/21/2003 17

Naming Convention For The Computational Routines In the Computational routines: ZZZ is replaced with several acronyms depending on the matrix-type as described below Symmetric eigenproblem Computes eigenvalues and eigenvectors of real-symmetric or complex-hermitian matrix A Steps in computation When reducing A to tridiagonal form, the zzz string is TRD, meaning Tridiagonal ReDuction When computing eigenvalues/eigenvectors of a tridigonal matrix, the string zzz may be EIG, meaning computation of eigensystem 5/21/2003 18

Naming Convention For The Computational Routines Continued Nonsymmetric Eigenproblems Compute eigenvalues/vectors of general matrix A Steps in computation When reducing matrix A to upper Hessenberg form, the string ZZZ is HRD When reducing upper Hessenberg matrix to Schur form and computing eigenevalues of the Schur form, the string ZZZ is HQR When computing eigenvectors of the Schur form and transforming them back to the eigenvectors of matrix A, the string ZZZ is EVC Note: An explanation of an intermediate step and more guides are provided in succeeding sections Generalized Symmetric Definite Eigenproblems Generalized Symmetric Definite Eigenproblems is defined in the succeeding sections Steps in Computing eigenvalues/vectors of generalized eigenvalue problems When reducing the problem to a standard symmetric eigenproblem, the string ZZZ is GST, meaning Generalized Symmetric definite Transformation Compute eigenvalues/vectors with routines provided for symmetric eigenproblems 5/21/2003 19

How To Pick The Appropriate Driver To Solve A Specific Eigensystem In ScaLAPACK Driver routines Solve a complete problem Limited number of these routines are available There is not a Driver routine for every problem Standard symmetric eigenvalue problem Solves Az =?z (A = A T, A is real) for symmetric eigensystem problem call PxSYEV/PxSYEVX subroutines P: Parallel, x: datatype (S, D), SY: Symmetric, EV: all eigenvalue/vector, X: Expert routine Solves Az =?z (A = A H, A is complex) for Hermitian eigensystem problem call PxHEEV/PxHEEVX subroutines P: Parallel, x: datatype (C, Z), HE: Hermitian, EV: all eigenvalue/vector, X: Expert routine 5/21/2003 20

How To Pick The Appropriate Driver Routines To Solve A Specific Eigensystem In ScaLAPACK Continued Generalized Symmetric Definite Eigenproblem Solves Az =?Bz, ABz =?z, BAz =?z, where? is real, A is SY/HE, B is symmetric positive definite Use PxyyGVX Driver routine P: Parallel, x:datatype(s,c,d,z), yy: matrix-type (real-symmetric (SY), complex-hermitian (HE)), G: Generalized, V: EigenVector, X: Expert routine Nonsymmetric matrix No expert routine is available 5/21/2003 21

How To Pick The Appropriate Computational Routine For Eigensystem In ScaLAPACK Computational Routines Symmetric Eigenproblems Compute eigenvalues/vectors of Az =?z, A is real-symmetric (SY) or complex-hermitian (HE) First, reduce A to a tridiagonal form T The decomposition has the forms of A = Q T Q T or A = Q T Q H Use PxSYTRD or PxHETRD subroutine respectively Second, compute eigenvalues/vectors of T with the following 3 possible subroutines: To find the Eigenvalues/vectors via look-ahead QR algorithm, use XSTEQR2 To find the Eigenvalues of T via bisection, use PxSTEBZ subroutine To find the Eigenvectors of T by inverse iteration, use PxSTEIN Third, to transform the eigenvectors of T back to eigenvectors of A, use PxORMTR or PxUNMTR subroutine, Multiply T (TRiangular) by ORthogonal or UNitary matrix Q 5/21/2003 22

How To Pick The Appropriate Computational Routines For Eigensystem In ScaLAPACK Continued Nonsymmetric eigenproblems Compute all eigenvalues of? and right eigenvectors v and/or left eigenvectors u in the following equations Av =?v or u H A =?u H First, reduce the general matrix A to upper Hessenberg form H (A = QHQ T or A = QHQ H ) Call PxGEHRD subroutine P: Parallel, x: datatype (S,D,C,Z), GE: GEneral, H: Hessenberg, RD: Reduced Second, call PxORMHR or PxUNMHR to generate the orthogonal/unitary matrix Q Third, reduce H to Schur form T (H = STS T or H = STS H ), where S represents the Schur vectors of H Call auxiliary routine PxLAHQR, x: datatype (S,D,C,Z) Fourth, call PxTREVC to compute the eigenvectors of T and transform them back to the coordinate space of the original matrix A, x: datatype (C,Z) 5/21/2003 23 Q H

How To Pick The Appropriate Computional Routines For Eigensystem In ScaLAPACK Continued Generalized Symmetric Definite Eigenproblems Compute the eigenvalues/vectors of Az =?Bz, ABz =?z, BAz =?z, where A and B are real-symmetric/complex-hermitian, B is positive definite Reduce each problem to a standard symmetric eigenvalues problem, using a Cholesky factorization of B Given A and the factored B, use routine PxyyGST to overwrite A with C representing the standard problem Cy =?y with the same eigenvalues and related eigenvectors P: Parallel, x: datatype (S,D,C,Z), yy: (SY, HE), G: Generalized ST: Symmetric definite Transformation Solve the standard form with one of the routines provided for the symmetric eigenproblem shown the previous (slide 21) 5/21/2003 24

Theory Of Computing Eigenvalues/Eigenvectors Of Non-symmetric-Complex Matrix The process (theory): Only the process for the right eigenvectors is described. A similar discussion for the left eigenvector is provided in an Appendix to these slides A x =? x H is the Hessenberg form of A and Q is unitary: T is the Schur form of H and Z is a unitary: A = QHQ H H = ZTZ H Replace A and H: multiply by (QZ) -1 : QZTZ H Q H x =?x T(QZ) H x =?(QZ) -1 x compare to TY =?Y(Y is the right eigenvector of T) Y = (QZ) H x => x = QZY As a result, to compute x, we need to compute Y (the right eigenvector of T), and then multiply by the product of QZ The complete description of the routines which implement the above theory is described in the following slides 5/21/2003 25

Converting The Theory Of Computing Eigenvalues/Eigenvectors Of Non-symmetric-Complex Matrix To Code The essence of a sample code is provided in slide (??). A complete working sample code is provided in slide (??). STEP 1: Call zgehrd subroutine to reduce the input matrix A to Hessenberg form (A = QHQ H ) The Hessenberg form (H) is stored in the upper part of the input matrix A. Part of the unitary matrix Q is stored below the subdiagonal of A. The rest of Q is stored in the vector TAU. A => zgehrd Q H 5/21/2003 26

Converting The Theory Of Computing Eigenvalues/Eigenvectors Of Non-symmetric- Complex Matrix To Code Continued STEP 2: Call the subroutine zunghr to generate unitary matrix Q from the encoding of Q which is computed in the previous routine (zgehrd) and was stored in A and TAU The input matrix A is overwritten by this routine with the unitary matrix Q (The name Q is used instead of A in the sample code) 5/21/2003 27

Converting The Theory Of Computing Eigenvalues/Eigenvectors Of Non-symmetric-Complex Matrix To Code Continued STEP 3: Call the suboutine zhseqr to perform the following 3 operations: Compute eigenvalues of upper Hessenberg matrix, which was computed by zgehrd and was stored in the upper part of matrix A (or H in the sample code) Store the eigenvalues in array W Compute Schur form (upper triangular form) of matrix H (Hessenberg form) Store the upper triangular form in matrix H Compute the product of QZ (the unitary matrix Q was generated by zunghr), and Z, the unitary matrix that transform H to the uppper triangular Schur form Store the product QZ in matrix Z Note: The eigenvalues of the input matrix A, the Hessenberg form of A, and the Schur form of A are same because these matrices are similar (in the mathematical sense). 5/21/2003 28

Converting The Theory Of Computing Eigenvalues/Eigenvectors Of Non-symmetric-Complex Matrix To Code Continued STEP 4: Call ztrevc subroutine to perform 2 tasks: Compute the eigenvectors of Schur form which was stored in matrix H by the previous subroutine, zhseqr Transform these eigenvectors back to the space of original matrix A Store the eigenvectors of the original matrix in matrix VR (for right eigenvectors) 5/21/2003 29

Sample Code To Calculate The Right- Eigenvectors in LAPACK! A is a non-hermitian-complex input matrix call ZGEHRD(N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO) H = A Q = A call ZUNGHR(N, ILO, IHI, Q, LDA, TAU, WORK, LWORK, INFO) call ZHSEQR( S, V, N, ILO, IHI, H, LDA, W, Q, LDA, WORK, LWORK, INFO) VR = Q call ZTREVC( R, B, SELECT, N, H, LDA, VL, LDA, VR, LDA, MM, M, WORK, RWORK, INFO) 5/21/2003 30

Left Eigenvectors Of Non-symmetric-complex Matrix The left eigenvector computation is slight modification of the computation for right eigenvector as follows x H A =? x H The matrix H is the Hessenberg form of A and Q is unitary: A = QHQ H The matrixt is the upper triangular Schur form of H and Z is a unitary: H = ZTZ H Replace A and H: Right multiply by (QZ): x H QZTZ H HQH =?x H x H QZT =?x H (QZ) and compare to Y H T =?Y H Y H = x H QZ => x H = Y H Q H Z H or x = QZY As a result, to compute x, need to compute Y (left eigenvector of T), and then multiply by the product of QZ The complete description of the subroutines which implement the above theory is described in the following slides 5/21/2003 31