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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 */