Mercurial > octave
annotate libinterp/corefcn/ordschur.cc @ 30564:796f54d4ddbf stable
update Octave Project Developers copyright for the new year
In files that have the "Octave Project Developers" copyright notice,
update for 2021.
In all .txi and .texi files except gpl.txi and gpl.texi in the
doc/liboctave and doc/interpreter directories, change the copyright
to "Octave Project Developers", the same as used for other source
files. Update copyright notices for 2022 (not done since 2019). For
gpl.txi and gpl.texi, change the copyright notice to be "Free Software
Foundation, Inc." and leave the date at 2007 only because this file
only contains the text of the GPL, not anything created by the Octave
Project Developers.
Add Paul Thomas to contributors.in.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 28 Dec 2021 18:22:40 -0500 |
parents | 7d6709900da7 |
children | a3d8915b9f87 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
30564
796f54d4ddbf
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
29961
diff
changeset
|
3 // Copyright (C) 2016-2022 The Octave Project Developers |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21580
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
27 # include "config.h" |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
28 #endif |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
29 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
30 #include "defun.h" |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
31 #include "error.h" |
22322
93b3cdd36854
move most f77 function decls to separate header files
John W. Eaton <jwe@octave.org>
parents:
22197
diff
changeset
|
32 #include "lo-lapack-proto.h" |
20940
48b2ad5ee801
maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents:
20939
diff
changeset
|
33 #include "ovl.h" |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
34 |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
35 OCTAVE_NAMESPACE_BEGIN |
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
36 |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
37 DEFUN (ordschur, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
38 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
39 @deftypefn {} {[@var{UR}, @var{SR}] =} ordschur (@var{U}, @var{S}, @var{select}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
40 Reorders the real Schur factorization (@var{U},@var{S}) obtained with the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
41 @code{schur} function, so that selected eigenvalues appear in the upper left |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
42 diagonal blocks of the quasi triangular Schur matrix. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
43 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
44 The logical vector @var{select} specifies the selected eigenvalues as they |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
45 appear along @var{S}'s diagonal. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
46 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
47 For example, given the matrix @code{@var{A} = [1, 2; 3, 4]}, and its Schur |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
48 decomposition |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
49 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
50 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
51 [@var{U}, @var{S}] = schur (@var{A}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
52 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
53 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
54 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
55 which returns |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
56 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
57 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
58 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
59 @var{U} = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
60 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
61 -0.82456 -0.56577 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
62 0.56577 -0.82456 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
63 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
64 @var{S} = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
65 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
66 -0.37228 -1.00000 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
67 0.00000 5.37228 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
68 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
69 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
70 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
71 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
72 It is possible to reorder the decomposition so that the positive eigenvalue |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
73 is in the upper left corner, by doing: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
74 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
75 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
76 [@var{U}, @var{S}] = ordschur (@var{U}, @var{S}, [0,1]) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
77 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
78 |
28986
69ec8d9e769b
Add function ordqz (patch #9897).
Martin Köhler <koehlerm@mpi-magdeburg.mpg.de>
parents:
27923
diff
changeset
|
79 @seealso{schur, ordeig, ordqz} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
80 @end deftypefn */) |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
81 { |
20819
f428cbe7576f
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20816
diff
changeset
|
82 if (args.length () != 3) |
20802
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
83 print_usage (); |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
84 |
26353
d43ba2c21d1d
ordschur.cc: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
25734
diff
changeset
|
85 const Array<octave_idx_type> sel_arg = args(2).xoctave_idx_type_vector_value ("ordschur: SELECT must be an array of integers"); |
20703
85e5efae848a
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20172
diff
changeset
|
86 |
22961
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
87 const octave_idx_type sel_n = sel_arg.numel (); |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
88 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
89 const dim_vector dimU = args(0).dims (); |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
90 const dim_vector dimS = args(1).dims (); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20892
diff
changeset
|
91 |
22961
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
92 if (sel_n != dimU(0)) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20819
diff
changeset
|
93 error ("ordschur: SELECT must have same length as the sides of U and S"); |
22961
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
94 else if (sel_n != dimU(0) || sel_n != dimS(0) || sel_n != dimU(1) |
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
95 || sel_n != dimS(1)) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20819
diff
changeset
|
96 error ("ordschur: U and S must be square and of equal sizes"); |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
97 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20892
diff
changeset
|
98 octave_value_list retval; |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20892
diff
changeset
|
99 |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
100 const bool double_type = args(0).is_double_type () |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
101 || args(1).is_double_type (); |
23581
c3075ae020e1
maint: Deprecate is_complex_type and replace with iscomplex.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
102 const bool complex_type = args(0).iscomplex () |
c3075ae020e1
maint: Deprecate is_complex_type and replace with iscomplex.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
103 || args(1).iscomplex (); |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
104 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22135
diff
changeset
|
105 #define PREPARE_ARGS(TYPE, TYPE_M, TYPE_COND) \ |
22961
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
106 TYPE ## Matrix U = args(0).x ## TYPE_M ## _value \ |
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
107 ("ordschur: U and S must be real or complex floating point matrices"); \ |
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
108 TYPE ## Matrix S = args(1).x ## TYPE_M ## _value \ |
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
109 ("ordschur: U and S must be real or complex floating point matrices"); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22135
diff
changeset
|
110 TYPE ## Matrix w (dim_vector (n, 1)); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22135
diff
changeset
|
111 TYPE ## Matrix work (dim_vector (n, 1)); \ |
22961
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
112 F77_INT m; \ |
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
113 F77_INT info; \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22135
diff
changeset
|
114 TYPE_COND cond1, cond2; |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
115 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22135
diff
changeset
|
116 #define PREPARE_OUTPUT() \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22135
diff
changeset
|
117 if (info != 0) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22135
diff
changeset
|
118 error ("ordschur: trsen failed"); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22135
diff
changeset
|
119 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22135
diff
changeset
|
120 retval = ovl (U, S); |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
121 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
122 F77_INT n = to_f77_int (sel_n); |
22961
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
123 Array<F77_INT> sel (dim_vector (n, 1)); |
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
124 for (F77_INT i = 0; i < n; i++) |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
125 sel.xelem (i) = to_f77_int (sel_arg.xelem (i)); |
22961
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
126 |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
127 if (double_type) |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
128 { |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
129 if (complex_type) |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
130 { |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
131 PREPARE_ARGS (Complex, complex_matrix, double) |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
132 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
133 F77_XFCN (ztrsen, ztrsen, |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
134 (F77_CONST_CHAR_ARG ("N"), F77_CONST_CHAR_ARG ("V"), |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
135 sel.data (), n, F77_DBLE_CMPLX_ARG (S.fortran_vec ()), n, |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
136 F77_DBLE_CMPLX_ARG (U.fortran_vec ()), n, |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
137 F77_DBLE_CMPLX_ARG (w.fortran_vec ()), m, cond1, cond2, |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
138 F77_DBLE_CMPLX_ARG (work.fortran_vec ()), n, |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
139 info)); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20892
diff
changeset
|
140 |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
141 PREPARE_OUTPUT() |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
142 } |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
143 else |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
144 { |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
145 PREPARE_ARGS (, matrix, double) |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
146 Matrix wi (dim_vector (n, 1)); |
22961
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
147 Array<F77_INT> iwork (dim_vector (n, 1)); |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
148 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
149 F77_XFCN (dtrsen, dtrsen, |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
150 (F77_CONST_CHAR_ARG ("N"), F77_CONST_CHAR_ARG ("V"), |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
151 sel.data (), n, S.fortran_vec (), n, U.fortran_vec (), n, |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
152 w.fortran_vec (), wi.fortran_vec (), m, cond1, cond2, |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
153 work.fortran_vec (), n, iwork.fortran_vec (), n, info)); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20892
diff
changeset
|
154 |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
155 PREPARE_OUTPUT () |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
156 } |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
157 } |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
158 else |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
159 { |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
160 if (complex_type) |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
161 { |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
162 PREPARE_ARGS (FloatComplex, float_complex_matrix, float) |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
163 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
164 F77_XFCN (ctrsen, ctrsen, |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
165 (F77_CONST_CHAR_ARG ("N"), F77_CONST_CHAR_ARG ("V"), |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
166 sel.data (), n, F77_CMPLX_ARG (S.fortran_vec ()), n, |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
167 F77_CMPLX_ARG (U.fortran_vec ()), n, |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
168 F77_CMPLX_ARG (w.fortran_vec ()), m, cond1, cond2, |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
169 F77_CMPLX_ARG (work.fortran_vec ()), n, |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
170 info)); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20892
diff
changeset
|
171 |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
172 PREPARE_OUTPUT () |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
173 } |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
174 else |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
175 { |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
176 PREPARE_ARGS (Float, float_matrix, float) |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
177 FloatMatrix wi (dim_vector (n, 1)); |
22961
0e9606b04ae0
use F77_INT instead of octave_idx_type for libinterp ordschur function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
178 Array<F77_INT> iwork (dim_vector (n, 1)); |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
179 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
180 F77_XFCN (strsen, strsen, |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
181 (F77_CONST_CHAR_ARG ("N"), F77_CONST_CHAR_ARG ("V"), |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
182 sel.data (), n, S.fortran_vec (), n, U.fortran_vec (), n, |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
183 w.fortran_vec (), wi.fortran_vec (), m, cond1, cond2, |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
184 work.fortran_vec (), n, iwork.fortran_vec (), n, info)); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20892
diff
changeset
|
185 |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
186 PREPARE_OUTPUT () |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
187 } |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
188 } |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
189 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
190 #undef PREPARE_ARGS |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
191 #undef PREPARE_OUTPUT |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
192 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
193 return retval; |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
194 } |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
195 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
196 /* |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
197 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
198 %!test |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
199 %! A = [1, 2, 3, -2; 4, 5, 6, -5 ; 7, 8, 9, -5; 10, 11, 12, 4 ]; |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
200 %! [U, T] = schur (A); |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
201 %! [US, TS] = ordschur (U, T, [ 0, 0, 1, 1 ]); |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
202 %! assert (US*TS*US', A, sqrt (eps)); |
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
203 %! assert (diag (T)(3:4), diag (TS)(1:2), sqrt (eps)); |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
204 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
205 %!test |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
206 %! A = [1, 2, 3, -2; 4, 5, 6, -5 ; 7, 8, 9, -5; 10, 11, 12, 4 ]; |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
207 %! [U, T] = schur (A); |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
208 %! [US, TS] = ordschur (single (U), single (T), [ 0, 0, 1, 1 ]); |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
209 %! assert (US*TS*US', A, sqrt (eps ("single"))); |
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
210 %! assert (diag (T)(3:4), diag (TS)(1:2), sqrt (eps ("single"))); |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
211 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
212 %!test |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
213 %! A = [1, 2, 3, -2; 4, 5, 6, -5 ; 7, 8, 9, -5; 10, 11, 12, 4+3i ]; |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
214 %! [U, T] = schur (A); |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
215 %! [US, TS] = ordschur (U, T, [ 0, 0, 1, 1 ]); |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
216 %! assert (US*TS*US', A, sqrt (eps)); |
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
217 %! assert (diag (T)(3:4), diag (TS)(1:2), sqrt (eps)); |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
218 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
219 %!test |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
220 %! A = [1, 2, 3, -2; 4, 5, 6, -5 ; 7, 8, 9, -5; 10, 11, 12, 4+3i ]; |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
221 %! [U, T] = schur (A); |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
222 %! [US, TS] = ordschur (single (U), single (T), [ 0, 0, 1, 1 ]); |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
223 %! assert (US*TS*US', A, sqrt (eps ("single"))); |
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
224 %! assert (diag (T)(3:4), diag (TS)(1:2), sqrt (eps ("single"))); |
19747
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
225 |
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
diff
changeset
|
226 */ |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
227 |
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
228 OCTAVE_NAMESPACE_END |