Mercurial > octave
annotate libinterp/corefcn/ordqz.cc @ 28995:0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
* ordqz.cc (Fordqz): Use two spaces between sentences in Texinfo.
Use @var rather than @code to mark function parameters in Texinfo.
Cuddle parenthesis when indexing in code examples in Texinfo.
Don't declare nargin when it is used only once in function.
Capitalize function parameters in error() messages.
Don't end error() messages with a period.
Align case statements within a switch statement to the enclosing parenthesis.
Don't declare and assign multiple variables on a single line.
Place input validation BIST tests at end. Add more input validation tests.
Wrap BIST tests to 80 characters.
author | Rik <rik@octave.org> |
---|---|
date | Sun, 25 Oct 2020 19:28:08 -0700 |
parents | 69ec8d9e769b |
children | 7854d5752dd2 |
rev | line source |
---|---|
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
2 // |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
3 // Copyright (C) 2020 The Octave Project Developers |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
4 // |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
7 // |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
8 // This file is part of Octave. |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
9 // |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
13 // (at your option) any later version. |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
14 // |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
18 // GNU General Public License for more details. |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
19 // |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
23 // |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
25 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
26 // Generalized eigenvalue reordering via LAPACK |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
27 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
28 // Originally written by M. Koehler <koehlerm(AT)mpi-magdeburg.mpg.de> |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
29 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
30 #undef DEBUG |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
31 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
32 #if defined (HAVE_CONFIG_H) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
33 # include "config.h" |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
34 #endif |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
35 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
36 #include <cctype> |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
37 #include <cmath> |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
38 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
39 #include "f77-fcn.h" |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
40 #include "lo-lapack-proto.h" |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
41 #include "qr.h" |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
42 #include "quit.h" |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
43 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
44 #include "defun.h" |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
45 #include "error.h" |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
46 #include "errwarn.h" |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
47 #include "ovl.h" |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
48 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
49 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
50 #if defined (DEBUG) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
51 # include "pager.h" |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
52 # include "pr-output.h" |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
53 #endif |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
54 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
55 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
56 DEFUN (ordqz, args, nargout, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
57 doc: /* -*- texinfo -*- |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
58 @deftypefn {} {[@var{AR}, @var{BR}, @var{QR}, @var{ZR}] =} ordqz (@var{AA}, @var{BB}, @var{Q}, @var{Z}, @var{keyword}) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
59 @deftypefnx {} {[@var{AR}, @var{BR}, @var{QR}, @var{ZR}] =} ordqz (@var{AA}, @var{BB}, @var{Q}, @var{Z}, @var{select}) |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
60 Reorder the QZ@tie{}decomposition of a generalized eigenvalue problem. |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
61 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
62 The generalized eigenvalue problem is defined as |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
63 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
64 @tex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
65 $$A x = \lambda B x$$ |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
66 @end tex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
67 @ifnottex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
68 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
69 @math{A x = @var{lambda} B x} |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
70 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
71 @end ifnottex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
72 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
73 Its generalized Schur decomposition is computed using the @code{qz} algorithm: |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
74 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
75 @code{[@var{AA}, @var{BB}, @var{Q}, @var{Z}] = qz (@var{A}, @var{B})} |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
76 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
77 where @var{AA}, @var{BB}, @var{Q}, and @var{Z} fulfill |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
78 @tex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
79 $$ AA = Q \cdot A \cdot Z, BB = Q \cdot B \cdot Z $$ |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
80 @end tex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
81 @ifnottex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
82 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
83 @example |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
84 @group |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
85 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
86 @var{AA} = @var{Q} * @var{A} * @var{Z}, @var{BB} = @var{Q} * @var{B} * @var{Z} |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
87 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
88 @end group |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
89 @end example |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
90 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
91 @end ifnottex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
92 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
93 The @code{ordqz} function computes a unitary transformation @var{QR} and |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
94 @var{ZR} such that the order of the eigenvalue on the diagonal of @var{AA} and |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
95 @var{BB} is changed. The resulting reordered matrices @var{AR} and @var{BR} |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
96 fulfill: |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
97 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
98 @tex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
99 $$ A_R = Q_R \cdot A \cdot Z_R, B_R = Q_R \cdot B \cdot Z_R $$ |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
100 @end tex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
101 @ifnottex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
102 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
103 @example |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
104 @group |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
105 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
106 @var{AR} = @var{QR} * @var{A} * @var{ZR}, @var{BR} = @var{QR} * @var{B} * @var{ZR} |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
107 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
108 @end group |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
109 @end example |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
110 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
111 @end ifnottex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
112 |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
113 The function can either be called with the @var{keyword} argument which |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
114 selects the eigenvalues in the top left block of @var{AR} and @var{BR} in the |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
115 following way: |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
116 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
117 @table @asis |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
118 @item @qcode{"S"}, @qcode{"udi"} |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
119 small: leading block has all |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
120 @tex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
121 $|\lambda| < 1$ |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
122 @end tex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
123 @ifnottex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
124 |@var{lambda}| < 1 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
125 @end ifnottex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
126 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
127 @item @qcode{"B"}, @qcode{"udo"} |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
128 big: leading block has all |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
129 @tex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
130 $|\lambda| \geq 1$ |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
131 @end tex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
132 @ifnottex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
133 |@var{lambda}| @geq{} 1 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
134 @end ifnottex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
135 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
136 @item @qcode{"-"}, @qcode{"lhp"} |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
137 negative real part: leading block has all eigenvalues in the open left |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
138 half-plane |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
139 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
140 @item @qcode{"+"}, @qcode{"rhp"} |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
141 non-negative real part: leading block has all eigenvalues in the closed right |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
142 half-plane |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
143 @end table |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
144 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
145 If a logical vector @var{select} is given instead of a keyword the @code{ordqz} |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
146 function reorders all eigenvalues @code{k} to the left block for which |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
147 @code{select(k)} is true. |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
148 |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
149 Note: The keywords are compatible with the ones from @code{qr}. |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
150 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
151 @seealso{eig, ordeig, qz, schur, ordschur} |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
152 @end deftypefn */) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
153 { |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
154 enum { LHP, RHP, UDI, UDO, VEC, NONE } select_mode = NONE; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
155 |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
156 if (args.length () != 5) |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
157 print_usage (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
158 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
159 // Check select argument |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
160 if (args(4).is_string()) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
161 { |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
162 std::string opts = args(4).string_value (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
163 std::for_each (opts.begin (), opts.end (), |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
164 [] (char & c) { c = std::tolower (c); }); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
165 if (opts == "lhp" || opts == "-") |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
166 select_mode = LHP; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
167 else if (opts == "rhp" || opts == "+") |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
168 select_mode = RHP; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
169 else if (opts == "udi" || opts == "s") |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
170 select_mode = UDI; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
171 else if (opts == "udo" || opts == "b") |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
172 select_mode = UDO; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
173 else |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
174 error_with_id ("Octave:ordqz:unknown-keyword", |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
175 "ordqz: unknown KEYWORD, possible values: " |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
176 "lhp, rhp, udi, udo"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
177 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
178 else if (args(4).isreal () || args(4).isinteger () || args(4).islogical ()) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
179 { |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
180 if (args(4).rows () > 1 && args(4).columns () > 1) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
181 error_with_id ("Octave:ordqz:select-not-vector", |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
182 "ordqz: SELECT argument must be a vector"); |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
183 select_mode = VEC; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
184 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
185 else |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
186 error_with_id ("Octave:ordqz:unknown-arg", |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
187 "ordqz: OPT must be string or a logical vector"); |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
188 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
189 if (nargout > 4) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
190 error_with_id ("Octave:ordqz:nargout", |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
191 "ordqz: at most four output arguments possible"); |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
192 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
193 // Matrix A: check dimensions. |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
194 F77_INT nn = octave::to_f77_int (args(0).rows ()); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
195 F77_INT nc = octave::to_f77_int (args(0).columns ()); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
196 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
197 if (args(0).isempty ()) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
198 { |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
199 warn_empty_arg ("qz: A"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
200 return octave_value_list (2, Matrix ()); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
201 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
202 else if (nc != nn) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
203 err_square_matrix_required ("qz", "A"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
204 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
205 // Matrix A: get value. |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
206 Matrix aa; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
207 ComplexMatrix caa; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
208 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
209 if (args(0).iscomplex ()) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
210 caa = args(0).complex_matrix_value (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
211 else |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
212 aa = args(0).matrix_value (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
213 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
214 // Extract argument 2 (bb, or cbb if complex). |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
215 F77_INT b_nr = octave::to_f77_int (args(1).rows ()); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
216 F77_INT b_nc = octave::to_f77_int (args(1).columns ()); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
217 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
218 if (nn != b_nc || nn != b_nr) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
219 err_nonconformant (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
220 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
221 Matrix bb; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
222 ComplexMatrix cbb; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
223 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
224 if (args(1).iscomplex ()) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
225 cbb = args(1).complex_matrix_value (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
226 else |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
227 bb = args(1).matrix_value (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
228 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
229 // Extract argument 3 (qq, or cqq if complex). |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
230 F77_INT q_nr = octave::to_f77_int (args(2).rows ()); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
231 F77_INT q_nc = octave::to_f77_int (args(2).columns ()); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
232 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
233 if (nn != q_nc || nn != q_nr) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
234 err_nonconformant (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
235 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
236 Matrix qq; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
237 ComplexMatrix cqq; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
238 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
239 if (args(2).iscomplex ()) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
240 cqq = args(2).complex_matrix_value ().hermitian (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
241 else |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
242 qq = args(2).matrix_value ().transpose (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
243 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
244 // Extract argument 4 (zz, or czz if complex). |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
245 F77_INT z_nr = octave::to_f77_int (args(3).rows ()); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
246 F77_INT z_nc = octave::to_f77_int (args(3).columns ()); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
247 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
248 if (nn != z_nc || nn != z_nr) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
249 err_nonconformant (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
250 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
251 Matrix zz; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
252 ComplexMatrix czz; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
253 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
254 if (args(3).iscomplex ()) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
255 czz = args(3).complex_matrix_value (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
256 else |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
257 zz = args(3).matrix_value (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
258 |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
259 bool complex_case = (args(0).iscomplex () || args(1).iscomplex () |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
260 || args(2).iscomplex () || args(3).iscomplex ()); |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
261 |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
262 if (select_mode == VEC && args(4).rows () != nn && args(4).columns () != nn) |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
263 error_with_id ("Octave:ordqz:numel_select", |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
264 "ordqz: SELECT vector has the wrong number of elements"); |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
265 |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
266 Array<double> select_array (dim_vector (nn, 1)); |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
267 if (select_mode == VEC) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
268 select_array = args(4).vector_value (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
269 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
270 Array<F77_LOGICAL> select (dim_vector (nn, 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
271 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
272 if (complex_case) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
273 { |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
274 // Complex |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
275 if (args(0).isreal ()) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
276 caa = ComplexMatrix (aa); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
277 if (args(1).isreal ()) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
278 cbb = ComplexMatrix (bb); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
279 if (args(2).isreal ()) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
280 cqq = ComplexMatrix (qq); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
281 if (args(3).isreal ()) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
282 czz = ComplexMatrix (zz); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
283 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
284 ComplexRowVector alpha (dim_vector (nn, 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
285 ComplexRowVector beta (dim_vector (nn, 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
286 octave_idx_type k; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
287 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
288 for (k = 0; k < nn-1; k++) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
289 { |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
290 if (caa(k+1,k) != 0.0) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
291 error_with_id ("Octave:ordqz:unsupported_AA", |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
292 "ordqz: quasi upper triangular matrices are not " |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
293 "allowed with complex data"); |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
294 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
295 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
296 for (k = 0; k < nn; k++) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
297 { |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
298 alpha(k) = caa(k,k); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
299 beta(k) = cbb(k,k); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
300 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
301 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
302 for (k = 0; k < nn; k++) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
303 { |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
304 switch (select_mode) |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
305 { |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
306 case LHP: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
307 select(k) = real (alpha(k) * beta(k)) < 0; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
308 break; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
309 case RHP: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
310 select(k) = real (alpha(k) * beta(k)) > 0; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
311 break; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
312 case UDI: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
313 if (beta(k) != 0.0) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
314 select(k) = abs (alpha(k)/beta(k)) < 1.0; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
315 else |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
316 select(k) = false; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
317 break; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
318 case UDO: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
319 if (beta(k) != 0.0) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
320 select(k) = abs (alpha(k)/beta(k)) > 1.0; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
321 else |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
322 select(k) = true; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
323 break; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
324 case VEC: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
325 if (select_array(k) != 0.0) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
326 select(k) = true; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
327 else |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
328 select(k) = false; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
329 break; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
330 default: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
331 // default: case just here to suppress compiler warning. |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
332 panic_impossible (); |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
333 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
334 } |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
335 |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
336 F77_LOGICAL wantq, wantz; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
337 wantq = 1, wantz = 1; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
338 F77_INT ijob, mm, lrwork3, liwork, info; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
339 ijob = 0, lrwork3 = 1, liwork = 1; |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
340 F77_DBLE pl, pr; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
341 ComplexRowVector work3 (lrwork3); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
342 Array<F77_INT> iwork (dim_vector (liwork, 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
343 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
344 F77_XFCN (ztgsen, ZTGSEN, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
345 (ijob, wantq, wantz, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
346 select.fortran_vec (), nn, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
347 F77_DBLE_CMPLX_ARG (caa.fortran_vec ()), nn, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
348 F77_DBLE_CMPLX_ARG (cbb.fortran_vec ()), nn, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
349 F77_DBLE_CMPLX_ARG (alpha.fortran_vec ()), |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
350 F77_DBLE_CMPLX_ARG (beta.fortran_vec ()), |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
351 F77_DBLE_CMPLX_ARG (cqq.fortran_vec ()), nn, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
352 F77_DBLE_CMPLX_ARG (czz.fortran_vec ()), nn, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
353 mm, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
354 pl, pr, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
355 nullptr, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
356 F77_DBLE_CMPLX_ARG (work3.fortran_vec ()), lrwork3, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
357 iwork.fortran_vec (), liwork, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
358 info)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
359 if (info != 0) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
360 error_with_id ("Octave:ordqz:ztgsen_failed", |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
361 "ordqz: failed to reorder eigenvalues"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
362 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
363 else |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
364 { |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
365 // Extract eigenvalues |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
366 RowVector alphar (dim_vector (nn, 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
367 RowVector alphai (dim_vector (nn, 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
368 RowVector beta (dim_vector (nn, 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
369 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
370 octave_idx_type k; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
371 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
372 k = 0; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
373 while (k < nn) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
374 { |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
375 #ifdef DEBUG |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
376 octave_stdout << "ordqz: k = " << k << " nn = " << nn << " \n"; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
377 #endif |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
378 if ((k < nn-1 && aa(k+1,k) == 0.0) || k == nn-1) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
379 { |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
380 alphar(k) = aa(k,k); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
381 alphai(k) = 0.0; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
382 beta(k) = bb(k,k); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
383 k++; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
384 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
385 else |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
386 { |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
387 double ar[2], ai[2], b[2], work[4]; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
388 char qz_job = 'E'; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
389 char comp_q = 'N'; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
390 char comp_z = 'N'; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
391 F77_INT nl = 2; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
392 F77_INT ilo = 1; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
393 F77_INT ihi = 2; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
394 F77_INT lwork = 4; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
395 F77_INT info = 0; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
396 double * aa_vec = aa.fortran_vec (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
397 double * bb_vec = bb.fortran_vec (); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
398 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
399 F77_XFCN (dhgeqz, DHGEQZ, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
400 (F77_CONST_CHAR_ARG2 (&qz_job, 1), |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
401 F77_CONST_CHAR_ARG2 (&comp_q, 1), |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
402 F77_CONST_CHAR_ARG2 (&comp_z, 1), |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
403 nl, ilo, ihi, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
404 &aa_vec[k+k*nn] , nn, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
405 &bb_vec[k+k*nn], nn, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
406 ar, ai, b, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
407 nullptr, nn, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
408 nullptr, nn, work, lwork, info |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
409 F77_CHAR_ARG_LEN (1) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
410 F77_CHAR_ARG_LEN (1) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
411 F77_CHAR_ARG_LEN (1))); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
412 if (info != 0) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
413 error("ordqz: failed to extract eigenvalues"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
414 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
415 alphar(k) = ar[0]; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
416 alphar(k+1) = ar[1]; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
417 alphai(k) = ai[0]; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
418 alphai(k+1) = ai[1]; |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
419 beta(k) = b[0]; |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
420 beta(k+1) = b[1]; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
421 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
422 k += 2; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
423 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
424 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
425 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
426 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
427 for (k = 0; k < nn; k++) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
428 { |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
429 switch (select_mode) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
430 { |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
431 case LHP: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
432 select(k) = alphar(k) * beta(k) < 0; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
433 break; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
434 case RHP: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
435 select(k) = alphar(k) * beta(k) > 0; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
436 break; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
437 case UDI: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
438 select(k) = alphar(k)*alphar(k) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
439 + alphai(k)*alphai(k) < beta(k)*beta(k); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
440 break; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
441 case UDO: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
442 select(k) = alphar(k)*alphar(k) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
443 + alphai(k)*alphai(k) > beta(k)*beta(k); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
444 break; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
445 case VEC: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
446 if (select_array(k) != 0.0) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
447 select(k) = true; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
448 else |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
449 select(k) = false; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
450 break; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
451 default: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
452 // default: case just here to suppress compiler warning. |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
453 panic_impossible(); |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
454 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
455 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
456 |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
457 F77_LOGICAL wantq, wantz; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
458 wantq = 1, wantz = 1; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
459 F77_INT ijob, mm, lrwork3, liwork, info; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
460 ijob = 0, lrwork3 = 4*nn+16, liwork = nn; |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
461 F77_DBLE pl, pr; |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
462 RowVector rwork3 (lrwork3); |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
463 Array<F77_INT> iwork (dim_vector (liwork, 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
464 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
465 F77_XFCN (dtgsen, DTGSEN, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
466 (ijob, wantq, wantz, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
467 select.fortran_vec (), nn, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
468 aa.fortran_vec (), nn, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
469 bb.fortran_vec (), nn, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
470 alphar.fortran_vec (), |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
471 alphai.fortran_vec (), |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
472 beta.fortran_vec (), |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
473 qq.fortran_vec (), nn, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
474 zz.fortran_vec (), nn, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
475 mm, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
476 pl, pr, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
477 nullptr, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
478 rwork3.fortran_vec (), lrwork3, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
479 iwork.fortran_vec (), liwork, |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
480 info)); |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
481 if (info != 0) |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
482 error("ordqz: failed to reorder eigenvalues"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
483 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
484 |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
485 octave_value_list retval (nargout); |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
486 switch (nargout) |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
487 { |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
488 case 4: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
489 if (complex_case) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
490 retval(3) = czz; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
491 else |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
492 retval(3) = zz; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
493 OCTAVE_FALLTHROUGH; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
494 case 3: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
495 if (complex_case) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
496 retval(2) = cqq.hermitian(); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
497 else |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
498 retval(2) = qq.transpose(); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
499 OCTAVE_FALLTHROUGH; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
500 case 2: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
501 if (complex_case) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
502 retval(1) = cbb; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
503 else |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
504 retval(1) = bb; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
505 OCTAVE_FALLTHROUGH; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
506 case 1: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
507 if (complex_case) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
508 retval(0) = caa; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
509 else |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
510 retval(0) = aa; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
511 break; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
512 case 0: |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
513 if (complex_case) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
514 retval(0) = caa; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
515 else |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
516 retval(0) = aa; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
517 break; |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
518 } |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
519 |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
520 return retval; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
521 } |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
522 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
523 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
524 /* |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
525 %!shared A, B, AA, BB, QQ, ZZ, AC, BC, AAC, BBC, QQC, ZZC, select, selectc |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
526 %! A = [ -1.03428 0.24929 0.43205 -0.12860; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
527 %! 1.16228 0.27870 2.12954 0.69250; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
528 %! -0.51524 -0.34939 -0.77820 2.13721; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
529 %! -1.32941 2.11870 0.72005 1.00835 ]; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
530 %! B = [ 1.407302 -0.632956 -0.360628 0.068534; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
531 %! 0.149898 0.298248 0.991777 0.023652; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
532 %! 0.169281 -0.405205 -1.775834 1.511730; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
533 %! 0.717770 1.291390 -1.766607 -0.531352 ]; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
534 %! AC = [ 0.4577 + 0.7199i 0.1476 + 0.6946i 0.6202 + 0.2092i 0.7559 + 0.2759i; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
535 %! 0.5868 + 0.7275i 0.9174 + 0.8781i 0.6741 + 0.1985i 0.4320 + 0.7023i; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
536 %! 0.2408 + 0.6359i 0.2959 + 0.8501i 0.3904 + 0.5613i 0.5000 + 0.1428i; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
537 %! 0.8177 + 0.8581i 0.2583 + 0.8970i 0.7706 + 0.5451i 0.1068 + 0.1650i]; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
538 %! BC = [ 0.089898 + 0.209257i 0.157769 + 0.311387i 0.018926 + 0.622517i 0.058825 + 0.374647i; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
539 %! 0.009367 + 0.098211i 0.736087 + 0.095797i 0.973192 + 0.583765i 0.434018 + 0.461909i; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
540 %! 0.880784 + 0.868215i 0.032839 + 0.569461i 0.873437 + 0.266081i 0.739426 + 0.362017i; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
541 %! 0.121649 + 0.115111i 0.426695 + 0.492222i 0.247670 + 0.034414i 0.771629 + 0.078153i]; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
542 %! [AA, BB, QQ, ZZ] = qz (A, B); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
543 %! [AAC, BBC, QQC, ZZC] = qz (AC, BC); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
544 %! select = [0 0 1 1]; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
545 %! selectc = [0 0 0 1]; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
546 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
547 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
548 %! [AAX, BBX, QQX, ZZX] = ordqz (AA, BB, QQ, ZZ, "rhp"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
549 %! assert (all (real (eig (AAX(1:3,1:3), BBX(1:3,1:3))) >= 0)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
550 %! assert (all (real (eig (AAX(4:4,4:4), BBX(4:4,4:4))) < 0)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
551 %! assert (norm (QQX'*AAX*ZZX' - A, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
552 %! assert (norm (QQX'*BBX*ZZX' - B, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
553 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
554 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
555 %! [AAX, BBX, QQX, ZZX] = ordqz (AA, BB, QQ, ZZ, "+"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
556 %! assert (all (real (eig (AAX(1:3,1:3), BBX(1:3,1:3))) >= 0)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
557 %! assert (all (real (eig (AAX(4:4,4:4), BBX(4:4,4:4))) < 0)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
558 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
559 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
560 %! [AAX, BBX, QQX, ZZX] = ordqz (AA, BB, QQ, ZZ, "lhp"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
561 %! assert (all (real (eig (AAX(2:4,2:4), BBX(2:4,2:4))) >= 0)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
562 %! assert (all (real (eig (AAX(1:1,1:1), BBX(1:1,1:1))) < 0)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
563 %! assert (norm (QQX'*AAX*ZZX' - A, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
564 %! assert (norm (QQX'*BBX*ZZX' - B, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
565 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
566 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
567 %! [AAX, BBX, QQX, ZZX] = ordqz (AA, BB, QQ, ZZ, "-"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
568 %! assert (all (real (eig (AAX(2:4,2:4), BBX(2:4,2:4))) >= 0)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
569 %! assert (all (real (eig (AAX(1:1,1:1), BBX(1:1,1:1))) < 0)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
570 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
571 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
572 %! [AAX, BBX, QQX, ZZX] = ordqz (AA, BB, QQ, ZZ, "udi"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
573 %! assert (all (abs (eig (AAX(1:1,1:1), BBX(1:1,1:1))) < 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
574 %! assert (all (abs (eig (AAX(2:4,2:4), BBX(2:4,2:4))) > 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
575 %! assert (norm (QQX'*AAX*ZZX' - A, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
576 %! assert (norm (QQX'*BBX*ZZX' - B, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
577 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
578 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
579 %! [AAX, BBX, QQX, ZZX] = ordqz (AA, BB, QQ, ZZ, "S"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
580 %! assert (all (abs (eig (AAX(1:1,1:1), BBX(1:1,1:1))) < 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
581 %! assert (all (abs (eig (AAX(2:4,2:4), BBX(2:4,2:4))) > 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
582 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
583 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
584 %! [AAX, BBX, QQX, ZZX] = ordqz (AA, BB, QQ, ZZ, "udo"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
585 %! assert (all (abs (eig (AAX(1:3,1:3), BBX(1:3,1:3))) >= 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
586 %! assert (all (abs (eig (AAX(4:4,4:4), BBX(4:4,4:4))) < 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
587 %! assert (norm (QQX'*AAX*ZZX' - A, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
588 %! assert (norm (QQX'*BBX*ZZX' - B, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
589 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
590 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
591 %! [AAX, BBX, QQX, ZZX] = ordqz (AA, BB, QQ, ZZ, "B"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
592 %! assert (all (abs (eig (AAX(1:3,1:3), BBX(1:3,1:3))) >= 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
593 %! assert (all (abs (eig (AAX(4:4,4:4), BBX(4:4,4:4))) < 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
594 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
595 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
596 %! [AAX, BBX, QQX, ZZX] = ordqz (AA, BB, QQ, ZZ, select); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
597 %! assert (all (iscomplex (eig (AAX(1:2,1:2), BBX(1:2,1:2))))); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
598 %! assert (norm (QQX'*AAX*ZZX' - A, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
599 %! assert (norm (QQX'*BBX*ZZX' - B, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
600 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
601 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
602 %! [AACX, BBCX, QQCX, ZZCX] = ordqz (AAC, BBC, QQC, ZZC, "rhp"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
603 %! assert (all (real (eig (AACX(1:2,1:2), BBCX(1:2,1:2))) >= 0)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
604 %! assert (all (real (eig (AACX(3:4,3:4), BBCX(3:4,3:4))) < 0)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
605 %! assert (norm (QQCX'*AACX*ZZCX' - AC, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
606 %! assert (norm (QQCX'*BBCX*ZZCX' - BC, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
607 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
608 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
609 %! [AACX, BBCX, QQCX, ZZCX] = ordqz (AAC, BBC, QQC, ZZC, "lhp"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
610 %! assert (all (real (eig (AACX(1:2,1:2), BBCX(1:2,1:2))) < 0)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
611 %! assert (all (real (eig (AACX(3:4,3:4), BBCX(3:4,3:4))) >= 0)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
612 %! assert (norm (QQCX'*AACX*ZZCX' - AC, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
613 %! assert (norm (QQCX'*BBCX*ZZCX' - BC, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
614 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
615 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
616 %! [AACX, BBCX, QQCX, ZZCX] = ordqz (AAC, BBC, QQC, ZZC, "udi"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
617 %! assert (all (abs (eig (AACX(1:2,1:2), BBCX(1:2,1:2))) < 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
618 %! assert (all (abs (eig (AACX(3:4,3:4), BBCX(3:4,3:4))) >= 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
619 %! assert (norm (QQCX'*AACX*ZZCX' - AC, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
620 %! assert (norm (QQCX'*BBCX*ZZCX' - BC, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
621 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
622 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
623 %! [AACX, BBCX, QQCX, ZZCX] = ordqz (AAC, BBC, QQC, ZZC, "udo"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
624 %! assert (all (abs (eig (AACX(1:2,1:2), BBCX(1:2,1:2))) >= 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
625 %! assert (all (abs (eig (AACX(3:4,3:4), BBCX(3:4,3:4))) < 1)); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
626 %! assert (norm (QQCX'*AACX*ZZCX' - AC, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
627 %! assert (norm (QQCX'*BBCX*ZZCX' - BC, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
628 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
629 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
630 %! [AACX, BBCX, QQCX, ZZCX] = ordqz (AAC, BBC, QQC, ZZC, selectc); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
631 %! ev = abs (eig (AACX(1:1,1:1), BBCX(1:1,1:1))); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
632 %! assert(ev > 0.6 && ev < 0.7); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
633 %! assert (norm (QQCX'*AACX*ZZCX' - AC, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
634 %! assert (norm (QQCX'*BBCX*ZZCX' - BC, "fro"), 0, 1e-12); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
635 |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
636 %!test |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
637 %! A = toeplitz ([1,2,3,4]); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
638 %! [B, A] = qr (A); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
639 %! B = B'; |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
640 %! [AA, BB, Q, Z] = qz (A, B); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
641 %! [AAS, BBS, QS, ZS] = ordqz (AA, BB, Q, Z, "lhp"); |
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
642 %! E2 = ordeig (AAS, BBS); |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
643 %! ECOMP = [-3.414213562373092; -1.099019513592784; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
644 %! -0.5857864376269046; 9.099019513592784]; |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
645 %! assert (norm (ECOMP - E2, "Inf"), 0, 1e-8); |
28995
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
646 |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
647 ## Test input validation |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
648 %!error <Invalid call> ordqz () |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
649 %!error <Invalid call> ordqz (eye (2)) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
650 %!error <Invalid call> ordqz (eye (2), eye (2)) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
651 %!error <Invalid call> ordqz (eye (2), eye (2), eye (2)) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
652 %!error <Invalid call> ordqz (eye (2), eye (2), eye (2), eye (2)) |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
653 %!error id=Octave:ordqz:unknown-keyword |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
654 %! ordqz (eye (2), eye (2), eye (2), eye (2), "foobar"); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
655 %!error id=Octave:ordqz:select-not-vector |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
656 %! ordqz (eye (2), eye (2), eye (2), eye (2), eye (2)); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
657 %!error id=Octave:ordqz:unknown-arg |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
658 %! ordqz (eye (2), eye (2), eye (2), eye (2), {"foobar"}); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
659 %!error id=Octave:ordqz:nargout |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
660 %! [a,b,c,d,e] = ordqz (eye (2), eye (2), eye (2), eye (2), "udi"); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
661 %!warning <A: argument is empty matrix> ordqz ([], [], [], [], "udi"); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
662 %!error <A must be a square matrix> ordqz (ones (1,2), [], [], [], "udi"); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
663 %!error <nonconformant matrices> |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
664 %! ordqz (eye (3), eye (2), eye (2), eye (2), "udi"); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
665 %!error <nonconformant matrices> |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
666 %! ordqz (eye (2), eye (3), eye (2), eye (2), "udi"); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
667 %!error <nonconformant matrices> |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
668 %! ordqz (eye (2), eye (2), eye (3), eye (2), "udi"); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
669 %!error <nonconformant matrices> |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
670 %! ordqz (eye (2), eye (2), eye (2), eye (3), "udi"); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
671 %!error <SELECT vector .* wrong number of elements> |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
672 %! ordqz (eye (2), eye (2), eye (2), eye (2), ones (1,5)); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
673 %!error <quasi upper triangular matrices are not allowed with complex data> |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
674 %! AA = zeros (2, 2); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
675 %! AA(2,1) = i; |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
676 %! ordqz (AA, eye (2), eye (2), eye (2), "udi"); |
0e86e50bebeb
ordqz.cc: Review and update for Octave coding conventions.
Rik <rik@octave.org>
parents:
28986
diff
changeset
|
677 |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
diff
changeset
|
678 */ |