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