Skip to main content

MatrixSchur

MatrixSchur [/Z] srcMatrix

The MatrixSchur operation computes for an NxN nonsymmetric srcMatrix, the eigenvalues, the real Schur form A and the matrix of Schur vectors V.

The Schur factorization has the form: srcMatrix = M_V x M_A x (M_V^T), where M_V^T is the transpose (use M_V^H if srcMatrix is complex) and x denotes matrix multiplication.

Flags

/DSTA=aWaveSpecify the output Schur matrix M_A. If you do not use this flag, the operation saves the matrix in the wave M_A in the current data folder.
This flag was added in Igor Pro 10.
/DSTE=eWaveSpecify the complex eigenvalues wave. The eigenvalues are not ordered. When this flag is used, /DSTI and /DSTR are disabled.
This flag was added in Igor Pro 10.
/DSTI=iWaveSpecify the output wave for the imaginary part of the eigenvalues. If you do not specify this flag (or /DSTE), the operation saves the data in the wave W_IEigenValues in the current data folder.
This flag was added in Igor Pro 10.
/DSTR=rWaveSpecify the output wave for the real part of the eigenvalues. If you do not specify this flag (or /DSTE) the operation saves the data in the wave W_REigenValues in the current data folder.
This flag was added in Igor Pro 10.
/DSTV=vWaveSpecify the output orthogonal matrix of Schur vectors M_V. If you do not specify this flag, the operation saves the data in the wave M_V in the current data folder.
This flag was added in Igor Pro 10.
/FREECreates all destination waves as free waves. This flag does not affect any of the output waves that are created by default without a user-specified destination.
/FREE is allowed only in functions, and only if the destination waves are simple names or wave reference structure fields.
See Free Waves for more discussion.
The /FREE flag was added in Igor Pro 10.00.
/ZNo error reporting.

Details

The operation creates:

M_AUpper triangular matrix containing the Schur form A.
M_VUnitary matrix containing the orthogonal matrix V of the Schur vectors.
W_REigenValues
W_IEigenValuesWaves containing the real and imaginary parts of the eigenvalues when srcMatrix is a real wave. If srcMatrix is complex, the eigenvalues are stored in W_EigenValues.
The eigenvalues in both cases are complex. Due to LAPACK, the result is packed in two waves (real and imaginary) when the input wave is real. When srcWave is complex, the eigenvalues are packed in a single wave.

The variable V_flag is set to 0 when there is no error; otherwise it contains the LAPACK error code.

Examples

You can test this operation for an N-by-N source matrix:

Make/D/C/N=(5,5) M_S=cmplx(enoise(1),enoise(1))
MatrixSchur M_S
MatrixOp/O unitary=(M_V^h) x M_V // check unitary
MatrixOp/O diff=abs(M_S-M_V x M_A x (M_V^H)) // check decomposition

See Also

Matrix Math Operations for more about Igor's matrix routines and for background references with details about the LAPACK libraries.