1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
<html lang="en">
<head>
<title>Real Nonsymmetric Matrices - GNU Scientific Library -- Reference Manual</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="GNU Scientific Library -- Reference Manual">
<meta name="generator" content="makeinfo 4.8">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Eigensystems.html" title="Eigensystems">
<link rel="prev" href="Complex-Hermitian-Matrices.html" title="Complex Hermitian Matrices">
<link rel="next" href="Real-Generalized-Symmetric_002dDefinite-Eigensystems.html" title="Real Generalized Symmetric-Definite Eigensystems">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 The GSL Team.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``GNU General Public License'' and ``Free Software
Needs Free Documentation'', the Front-Cover text being ``A GNU Manual'',
and with the Back-Cover Text being (a) (see below). A copy of the
license is included in the section entitled ``GNU Free Documentation
License''.
(a) The Back-Cover Text is: ``You have freedom to copy and modify this
GNU Manual, like GNU software.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
</head>
<body>
<div class="node">
<p>
<a name="Real-Nonsymmetric-Matrices"></a>
Next: <a rel="next" accesskey="n" href="Real-Generalized-Symmetric_002dDefinite-Eigensystems.html">Real Generalized Symmetric-Definite Eigensystems</a>,
Previous: <a rel="previous" accesskey="p" href="Complex-Hermitian-Matrices.html">Complex Hermitian Matrices</a>,
Up: <a rel="up" accesskey="u" href="Eigensystems.html">Eigensystems</a>
<hr>
</div>
<h3 class="section">14.3 Real Nonsymmetric Matrices</h3>
<p><a name="index-nonsymmetric-matrix_002c-real_002c-eigensystem-1347"></a><a name="index-real-nonsymmetric-matrix_002c-eigensystem-1348"></a>
The solution of the real nonsymmetric eigensystem problem for a
matrix A involves computing the Schur decomposition
<pre class="example"> A = Z T Z^T
</pre>
<p>where Z is an orthogonal matrix of Schur vectors and T,
the Schur form, is quasi upper triangular with diagonal
1-by-1 blocks which are real eigenvalues of A, and
diagonal 2-by-2 blocks whose eigenvalues are complex
conjugate eigenvalues of A. The algorithm used is the double
shift Francis method.
<div class="defun">
— Function: gsl_eigen_nonsymm_workspace * <b>gsl_eigen_nonsymm_alloc</b> (<var>const size_t n</var>)<var><a name="index-gsl_005feigen_005fnonsymm_005falloc-1349"></a></var><br>
<blockquote><p>This function allocates a workspace for computing eigenvalues of
<var>n</var>-by-<var>n</var> real nonsymmetric matrices. The size of the workspace
is O(2n).
</p></blockquote></div>
<div class="defun">
— Function: void <b>gsl_eigen_nonsymm_free</b> (<var>gsl_eigen_nonsymm_workspace * w</var>)<var><a name="index-gsl_005feigen_005fnonsymm_005ffree-1350"></a></var><br>
<blockquote><p>This function frees the memory associated with the workspace <var>w</var>.
</p></blockquote></div>
<div class="defun">
— Function: void <b>gsl_eigen_nonsymm_params</b> (<var>const int compute_t, const int balance, gsl_eigen_nonsymm_workspace * w</var>)<var><a name="index-gsl_005feigen_005fnonsymm_005fparams-1351"></a></var><br>
<blockquote><p>This function sets some parameters which determine how the eigenvalue
problem is solved in subsequent calls to <code>gsl_eigen_nonsymm</code>.
<p>If <var>compute_t</var> is set to 1, the full Schur form T will be
computed by <code>gsl_eigen_nonsymm</code>. If it is set to 0,
T will not be computed (this is the default setting). Computing
the full Schur form T requires approximately 1.5-2 times the
number of flops.
<p>If <var>balance</var> is set to 1, a balancing transformation is applied
to the matrix prior to computing eigenvalues. This transformation is
designed to make the rows and columns of the matrix have comparable
norms, and can result in more accurate eigenvalues for matrices
whose entries vary widely in magnitude. See <a href="Balancing.html">Balancing</a> for more
information. Note that the balancing transformation does not preserve
the orthogonality of the Schur vectors, so if you wish to compute the
Schur vectors with <code>gsl_eigen_nonsymm_Z</code> you will obtain the Schur
vectors of the balanced matrix instead of the original matrix. The
relationship will be
<pre class="example"> T = Q^t D^(-1) A D Q
</pre>
<p class="noindent">where <var>Q</var> is the matrix of Schur vectors for the balanced matrix, and
<var>D</var> is the balancing transformation. Then <code>gsl_eigen_nonsymm_Z</code>
will compute a matrix <var>Z</var> which satisfies
<pre class="example"> T = Z^(-1) A Z
</pre>
<p class="noindent">with Z = D Q. Note that <var>Z</var> will not be orthogonal. For
this reason, balancing is not performed by default.
</p></blockquote></div>
<div class="defun">
— Function: int <b>gsl_eigen_nonsymm</b> (<var>gsl_matrix * A, gsl_vector_complex * eval, gsl_eigen_nonsymm_workspace * w</var>)<var><a name="index-gsl_005feigen_005fnonsymm-1352"></a></var><br>
<blockquote><p>This function computes the eigenvalues of the real nonsymmetric matrix
<var>A</var> and stores them in the vector <var>eval</var>. If T is
desired, it is stored in the upper portion of <var>A</var> on output.
Otherwise, on output, the diagonal of <var>A</var> will contain the
1-by-1 real eigenvalues and 2-by-2
complex conjugate eigenvalue systems, and the rest of <var>A</var> is
destroyed. In rare cases, this function may fail to find all
eigenvalues. If this happens, an error code is returned
and the number of converged eigenvalues is stored in <code>w->n_evals</code>.
The converged eigenvalues are stored in the beginning of <var>eval</var>.
</p></blockquote></div>
<div class="defun">
— Function: int <b>gsl_eigen_nonsymm_Z</b> (<var>gsl_matrix * A, gsl_vector_complex * eval, gsl_matrix * Z, gsl_eigen_nonsymm_workspace * w</var>)<var><a name="index-gsl_005feigen_005fnonsymm_005fZ-1353"></a></var><br>
<blockquote><p>This function is identical to <code>gsl_eigen_nonsymm</code> except it also
computes the Schur vectors and stores them into <var>Z</var>.
</p></blockquote></div>
<div class="defun">
— Function: gsl_eigen_nonsymmv_workspace * <b>gsl_eigen_nonsymmv_alloc</b> (<var>const size_t n</var>)<var><a name="index-gsl_005feigen_005fnonsymmv_005falloc-1354"></a></var><br>
<blockquote><p>This function allocates a workspace for computing eigenvalues and
eigenvectors of <var>n</var>-by-<var>n</var> real nonsymmetric matrices. The
size of the workspace is O(5n).
</p></blockquote></div>
<div class="defun">
— Function: void <b>gsl_eigen_nonsymmv_free</b> (<var>gsl_eigen_nonsymmv_workspace * w</var>)<var><a name="index-gsl_005feigen_005fnonsymmv_005ffree-1355"></a></var><br>
<blockquote><p>This function frees the memory associated with the workspace <var>w</var>.
</p></blockquote></div>
<div class="defun">
— Function: int <b>gsl_eigen_nonsymmv</b> (<var>gsl_matrix * A, gsl_vector_complex * eval, gsl_matrix_complex * evec, gsl_eigen_nonsymmv_workspace * w</var>)<var><a name="index-gsl_005feigen_005fnonsymmv-1356"></a></var><br>
<blockquote><p>This function computes eigenvalues and right eigenvectors of the
<var>n</var>-by-<var>n</var> real nonsymmetric matrix <var>A</var>. It first calls
<code>gsl_eigen_nonsymm</code> to compute the eigenvalues, Schur form T, and
Schur vectors. Then it finds eigenvectors of T and backtransforms
them using the Schur vectors. The Schur vectors are destroyed in the
process, but can be saved by using <code>gsl_eigen_nonsymmv_Z</code>. The
computed eigenvectors are normalized to have unit magnitude. On
output, the upper portion of <var>A</var> contains the Schur form
T. If <code>gsl_eigen_nonsymm</code> fails, no eigenvectors are
computed, and an error code is returned.
</p></blockquote></div>
<div class="defun">
— Function: int <b>gsl_eigen_nonsymmv_Z</b> (<var>gsl_matrix * A, gsl_vector_complex * eval, gsl_matrix_complex * evec, gsl_matrix * Z, gsl_eigen_nonsymmv_workspace * w</var>)<var><a name="index-gsl_005feigen_005fnonsymmv_005fZ-1357"></a></var><br>
<blockquote><p>This function is identical to <code>gsl_eigen_nonsymmv</code> except it also saves
the Schur vectors into <var>Z</var>.
</p></blockquote></div>
<hr>The GNU Scientific Library - a free numerical library licensed under the GNU GPL<br>Back to the <a href="/software/gsl/">GNU Scientific Library Homepage</a></body></html>
|