File: Real-Nonsymmetric-Matrices.html

package info (click to toggle)
gsl-ref-html 2.3-1
  • links: PTS
  • area: non-free
  • in suites: bullseye, buster, sid
  • size: 6,876 kB
  • ctags: 4,574
  • sloc: makefile: 35
file content (212 lines) | stat: -rw-r--r-- 12,028 bytes parent folder | download
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 &ndash; Reference Manual: Real Nonsymmetric Matrices</title>

<meta name="description" content="GNU Scientific Library &ndash; Reference Manual: Real Nonsymmetric Matrices">
<meta name="keywords" content="GNU Scientific Library &ndash; 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> &nbsp; [<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&ndash;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-&gt;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> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>