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 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 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.3 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 the freedom to copy and modify this
GNU Manual." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Scientific Library – Reference Manual: Real Nonsymmetric Matrices</title>
<meta name="description" content="GNU Scientific Library – Reference Manual: Real Nonsymmetric Matrices">
<meta name="keywords" content="GNU Scientific Library – Reference Manual: Real Nonsymmetric Matrices">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Function-Index.html#Function-Index" rel="index" title="Function Index">
<link href="Eigensystems.html#Eigensystems" rel="up" title="Eigensystems">
<link href="Real-Generalized-Symmetric_002dDefinite-Eigensystems.html#Real-Generalized-Symmetric_002dDefinite-Eigensystems" rel="next" title="Real Generalized Symmetric-Definite Eigensystems">
<link href="Complex-Hermitian-Matrices.html#Complex-Hermitian-Matrices" rel="previous" title="Complex Hermitian Matrices">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Real-Nonsymmetric-Matrices"></a>
<div class="header">
<p>
Next: <a href="Real-Generalized-Symmetric_002dDefinite-Eigensystems.html#Real-Generalized-Symmetric_002dDefinite-Eigensystems" accesskey="n" rel="next">Real Generalized Symmetric-Definite Eigensystems</a>, Previous: <a href="Complex-Hermitian-Matrices.html#Complex-Hermitian-Matrices" accesskey="p" rel="previous">Complex Hermitian Matrices</a>, Up: <a href="Eigensystems.html#Eigensystems" accesskey="u" rel="up">Eigensystems</a> [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Real-Nonsymmetric-Matrices-1"></a>
<h3 class="section">15.3 Real Nonsymmetric Matrices</h3>
<a name="index-nonsymmetric-matrix_002c-real_002c-eigensystem"></a>
<a name="index-real-nonsymmetric-matrix_002c-eigensystem"></a>
<p>The solution of the real nonsymmetric eigensystem problem for a
matrix <em>A</em> involves computing the Schur decomposition
</p>
<div class="example">
<pre class="example">A = Z T Z^T
</pre></div>
<p>where <em>Z</em> is an orthogonal matrix of Schur vectors and <em>T</em>,
the Schur form, is quasi upper triangular with diagonal
<em>1</em>-by-<em>1</em> blocks which are real eigenvalues of <em>A</em>, and
diagonal <em>2</em>-by-<em>2</em> blocks whose eigenvalues are complex
conjugate eigenvalues of <em>A</em>. The algorithm used is the double-shift
Francis method.
</p>
<dl>
<dt><a name="index-gsl_005feigen_005fnonsymm_005falloc"></a>Function: <em>gsl_eigen_nonsymm_workspace *</em> <strong>gsl_eigen_nonsymm_alloc</strong> <em>(const size_t <var>n</var>)</em></dt>
<dd><a name="index-gsl_005feigen_005fnonsymm_005fworkspace"></a>
<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 <em>O(2n)</em>.
</p></dd></dl>
<dl>
<dt><a name="index-gsl_005feigen_005fnonsymm_005ffree"></a>Function: <em>void</em> <strong>gsl_eigen_nonsymm_free</strong> <em>(gsl_eigen_nonsymm_workspace * <var>w</var>)</em></dt>
<dd><p>This function frees the memory associated with the workspace <var>w</var>.
</p></dd></dl>
<dl>
<dt><a name="index-gsl_005feigen_005fnonsymm_005fparams"></a>Function: <em>void</em> <strong>gsl_eigen_nonsymm_params</strong> <em>(const int <var>compute_t</var>, const int <var>balance</var>, gsl_eigen_nonsymm_workspace * <var>w</var>)</em></dt>
<dd><p>This function sets some parameters which determine how the eigenvalue
problem is solved in subsequent calls to <code>gsl_eigen_nonsymm</code>.
</p>
<p>If <var>compute_t</var> is set to 1, the full Schur form <em>T</em> will be
computed by <code>gsl_eigen_nonsymm</code>. If it is set to 0,
<em>T</em> will not be computed (this is the default setting). Computing
the full Schur form <em>T</em> requires approximately 1.5–2 times the
number of flops.
</p>
<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">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
</p>
<div class="example">
<pre class="example">T = Q^t D^(-1) A D Q
</pre></div>
<p>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
</p>
<div class="example">
<pre class="example">T = Z^(-1) A Z
</pre></div>
<p>with <em>Z = D Q</em>. Note that <var>Z</var> will not be orthogonal. For
this reason, balancing is not performed by default.
</p></dd></dl>
<dl>
<dt><a name="index-gsl_005feigen_005fnonsymm"></a>Function: <em>int</em> <strong>gsl_eigen_nonsymm</strong> <em>(gsl_matrix * <var>A</var>, gsl_vector_complex * <var>eval</var>, gsl_eigen_nonsymm_workspace * <var>w</var>)</em></dt>
<dd><p>This function computes the eigenvalues of the real nonsymmetric matrix
<var>A</var> and stores them in the vector <var>eval</var>. If <em>T</em> 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
<em>1</em>-by-<em>1</em> real eigenvalues and <em>2</em>-by-<em>2</em>
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></dd></dl>
<dl>
<dt><a name="index-gsl_005feigen_005fnonsymm_005fZ"></a>Function: <em>int</em> <strong>gsl_eigen_nonsymm_Z</strong> <em>(gsl_matrix * <var>A</var>, gsl_vector_complex * <var>eval</var>, gsl_matrix * <var>Z</var>, gsl_eigen_nonsymm_workspace * <var>w</var>)</em></dt>
<dd><p>This function is identical to <code>gsl_eigen_nonsymm</code> except that it also
computes the Schur vectors and stores them into <var>Z</var>.
</p></dd></dl>
<dl>
<dt><a name="index-gsl_005feigen_005fnonsymmv_005falloc"></a>Function: <em>gsl_eigen_nonsymmv_workspace *</em> <strong>gsl_eigen_nonsymmv_alloc</strong> <em>(const size_t <var>n</var>)</em></dt>
<dd><a name="index-gsl_005feigen_005fnonsymmv_005fworkspace"></a>
<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 <em>O(5n)</em>.
</p></dd></dl>
<dl>
<dt><a name="index-gsl_005feigen_005fnonsymmv_005ffree"></a>Function: <em>void</em> <strong>gsl_eigen_nonsymmv_free</strong> <em>(gsl_eigen_nonsymmv_workspace * <var>w</var>)</em></dt>
<dd><p>This function frees the memory associated with the workspace <var>w</var>.
</p></dd></dl>
<dl>
<dt><a name="index-gsl_005feigen_005fnonsymmv_005fparams"></a>Function: <em>void</em> <strong>gsl_eigen_nonsymmv_params</strong> <em>(const int <var>balance</var>, gsl_eigen_nonsymm_workspace * <var>w</var>)</em></dt>
<dd><p>This function sets parameters which determine how the eigenvalue
problem is solved in subsequent calls to <code>gsl_eigen_nonsymmv</code>.
If <var>balance</var> is set to 1, a balancing transformation is applied
to the matrix. See <code>gsl_eigen_nonsymm_params</code> for more information.
Balancing is turned off by default since it does not preserve the
orthogonality of the Schur vectors.
</p></dd></dl>
<dl>
<dt><a name="index-gsl_005feigen_005fnonsymmv"></a>Function: <em>int</em> <strong>gsl_eigen_nonsymmv</strong> <em>(gsl_matrix * <var>A</var>, gsl_vector_complex * <var>eval</var>, gsl_matrix_complex * <var>evec</var>, gsl_eigen_nonsymmv_workspace * <var>w</var>)</em></dt>
<dd><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 <em>T</em>, and
Schur vectors. Then it finds eigenvectors of <em>T</em> 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
<em>T</em>. If <code>gsl_eigen_nonsymm</code> fails, no eigenvectors are
computed, and an error code is returned.
</p></dd></dl>
<dl>
<dt><a name="index-gsl_005feigen_005fnonsymmv_005fZ"></a>Function: <em>int</em> <strong>gsl_eigen_nonsymmv_Z</strong> <em>(gsl_matrix * <var>A</var>, gsl_vector_complex * <var>eval</var>, gsl_matrix_complex * <var>evec</var>, gsl_matrix * <var>Z</var>, gsl_eigen_nonsymmv_workspace * <var>w</var>)</em></dt>
<dd><p>This function is identical to <code>gsl_eigen_nonsymmv</code> except that it also saves
the Schur vectors into <var>Z</var>.
</p></dd></dl>
<hr>
<div class="header">
<p>
Next: <a href="Real-Generalized-Symmetric_002dDefinite-Eigensystems.html#Real-Generalized-Symmetric_002dDefinite-Eigensystems" accesskey="n" rel="next">Real Generalized Symmetric-Definite Eigensystems</a>, Previous: <a href="Complex-Hermitian-Matrices.html#Complex-Hermitian-Matrices" accesskey="p" rel="previous">Complex Hermitian Matrices</a>, Up: <a href="Eigensystems.html#Eigensystems" accesskey="u" rel="up">Eigensystems</a> [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|