annotate liboctave/numeric/EIG.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 f3f3e3793fb5
children 597f3ee61a48
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: 30394
diff changeset
3 // Copyright (C) 1994-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 ////////////////////////////////////////////////////////////////////////
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
25
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
26 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21202
diff changeset
27 # include "config.h"
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
28 #endif
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
29
23475
d691ed308237 maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents: 23450
diff changeset
30 #include "Array.h"
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
31 #include "EIG.h"
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
32 #include "dColVector.h"
23475
d691ed308237 maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents: 23450
diff changeset
33 #include "dMatrix.h"
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
34 #include "lo-error.h"
22322
93b3cdd36854 move most f77 function decls to separate header files
John W. Eaton <jwe@octave.org>
parents: 22305
diff changeset
35 #include "lo-lapack-proto.h"
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
36
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
37 octave_idx_type
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
38 EIG::init (const Matrix& a, bool calc_rev, bool calc_lev, bool balance)
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
39 {
5822
4fdc2515ebad [project @ 2006-05-18 19:31:36 by jwe]
jwe
parents: 5307
diff changeset
40 if (a.any_element_is_inf_or_nan ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
41 (*current_liboctave_error_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
42 ("EIG: matrix contains Inf or NaN values");
5822
4fdc2515ebad [project @ 2006-05-18 19:31:36 by jwe]
jwe
parents: 5307
diff changeset
43
23596
b63c3a09aee7 maint: Deprecate is_symmetric and replace with issymmetric.
Rik <rik@octave.org>
parents: 23594
diff changeset
44 if (a.issymmetric ())
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
45 return symmetric_init (a, calc_rev, calc_lev);
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
46
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
47 F77_INT n = octave::to_f77_int (a.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
48 F77_INT a_nc = octave::to_f77_int (a.cols ());
1934
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
49
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
50 if (n != a_nc)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
51 (*current_liboctave_error_handler) ("EIG requires square matrix");
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
52
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
53 F77_INT info = 0;
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
54
1934
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
55 Matrix atmp = a;
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
56 double *tmp_data = atmp.fortran_vec ();
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
57
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
58 Array<double> wr (dim_vector (n, 1));
1934
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
59 double *pwr = wr.fortran_vec ();
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
60
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
61 Array<double> wi (dim_vector (n, 1));
1934
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
62 double *pwi = wi.fortran_vec ();
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
63
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23220
diff changeset
64 F77_INT tnvr = (calc_rev ? n : 0);
9020
728e7943752d EIG.cc: avoid volatile decl for tmp variable
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
65 Matrix vr (tnvr, tnvr);
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
66 double *pvr = vr.fortran_vec ();
1934
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
67
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23220
diff changeset
68 F77_INT tnvl = (calc_lev ? n : 0);
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
69 Matrix vl (tnvl, tnvl);
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
70 double *pvl = vl.fortran_vec ();
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
71
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
72 F77_INT lwork = -1;
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
73 double dummy_work;
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
74
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
75 F77_INT ilo;
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
76 F77_INT ihi;
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
77
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
78 Array<double> scale (dim_vector (n, 1));
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
79 double *pscale = scale.fortran_vec ();
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
80
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
81 double abnrm;
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
82
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
83 Array<double> rconde (dim_vector (n, 1));
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
84 double *prconde = rconde.fortran_vec ();
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
85
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
86 Array<double> rcondv (dim_vector (n, 1));
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
87 double *prcondv = rcondv.fortran_vec ();
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
88
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
89 F77_INT dummy_iwork;
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
90
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
91 F77_XFCN (dgeevx, DGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
92 F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
93 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
94 F77_CONST_CHAR_ARG2 ("N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
95 n, tmp_data, n, pwr, pwi, pvl,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
96 n, pvr, n, ilo, ihi, pscale,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
97 abnrm, prconde, prcondv, &dummy_work,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
98 lwork, &dummy_iwork, info
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
99 F77_CHAR_ARG_LEN (1)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
100 F77_CHAR_ARG_LEN (1)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
101 F77_CHAR_ARG_LEN (1)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
102 F77_CHAR_ARG_LEN (1)));
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
103
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
104 if (info != 0)
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
105 (*current_liboctave_error_handler) ("dgeevx workspace query failed");
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
106
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
107 lwork = static_cast<F77_INT> (dummy_work);
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
108 Array<double> work (dim_vector (lwork, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
109 double *pwork = work.fortran_vec ();
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
110
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
111 F77_XFCN (dgeevx, DGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
112 F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
113 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
114 F77_CONST_CHAR_ARG2 ("N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
115 n, tmp_data, n, pwr, pwi, pvl,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
116 n, pvr, n, ilo, ihi, pscale,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
117 abnrm, prconde, prcondv, pwork,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
118 lwork, &dummy_iwork, info
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
119 F77_CHAR_ARG_LEN (1)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
120 F77_CHAR_ARG_LEN (1)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
121 F77_CHAR_ARG_LEN (1)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
122 F77_CHAR_ARG_LEN (1)));
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
123
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
124 if (info < 0)
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
125 (*current_liboctave_error_handler) ("unrecoverable error in dgeevx");
1934
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
126
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
127 if (info > 0)
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
128 (*current_liboctave_error_handler) ("dgeevx failed to converge");
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
129
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
130 m_lambda.resize (n);
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23220
diff changeset
131 F77_INT nvr = (calc_rev ? n : 0);
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
132 m_v.resize (nvr, nvr);
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23220
diff changeset
133 F77_INT nvl = (calc_lev ? n : 0);
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
134 m_w.resize (nvl, nvl);
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
135
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
136 for (F77_INT j = 0; j < n; j++)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
137 {
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
138 if (wi.elem (j) == 0.0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
139 {
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
140 m_lambda.elem (j) = Complex (wr.elem (j));
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
141 for (F77_INT i = 0; i < nvr; i++)
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
142 m_v.elem (i, j) = vr.elem (i, j);
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
143
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
144 for (F77_INT i = 0; i < nvl; i++)
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
145 m_w.elem (i, j) = vl.elem (i, j);
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
146 }
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
147 else
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
148 {
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
149 if (j+1 >= n)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
150 (*current_liboctave_error_handler) ("EIG: internal error");
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
151
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
152 m_lambda.elem (j) = Complex (wr.elem (j), wi.elem (j));
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
153 m_lambda.elem (j+1) = Complex (wr.elem (j+1), wi.elem (j+1));
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
154
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
155 for (F77_INT i = 0; i < nvr; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
156 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
157 double real_part = vr.elem (i, j);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
158 double imag_part = vr.elem (i, j+1);
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
159 m_v.elem (i, j) = Complex (real_part, imag_part);
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
160 m_v.elem (i, j+1) = Complex (real_part, -imag_part);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
161 }
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
162
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
163 for (F77_INT i = 0; i < nvl; i++)
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
164 {
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
165 double real_part = vl.elem (i, j);
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
166 double imag_part = vl.elem (i, j+1);
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
167 m_w.elem (i, j) = Complex (real_part, imag_part);
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
168 m_w.elem (i, j+1) = Complex (real_part, -imag_part);
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
169 }
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
170 j++;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
171 }
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
172 }
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
173
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
174 return info;
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
175 }
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
176
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
177 octave_idx_type
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
178 EIG::symmetric_init (const Matrix& a, bool calc_rev, bool calc_lev)
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
179 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
180 F77_INT n = octave::to_f77_int (a.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
181 F77_INT a_nc = octave::to_f77_int (a.cols ());
1934
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
182
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
183 if (n != a_nc)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
184 (*current_liboctave_error_handler) ("EIG requires square matrix");
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
185
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
186 F77_INT info = 0;
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
187
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
188 Matrix atmp = a;
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
189 double *tmp_data = atmp.fortran_vec ();
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
190
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3178
diff changeset
191 ColumnVector wr (n);
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
192 double *pwr = wr.fortran_vec ();
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
193
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
194 F77_INT lwork = -1;
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
195 double dummy_work;
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
196
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
197 F77_XFCN (dsyev, DSYEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
198 F77_CONST_CHAR_ARG2 ("U", 1),
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
199 n, tmp_data, n, pwr, &dummy_work, lwork, info
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
200 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
201 F77_CHAR_ARG_LEN (1)));
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
202
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
203 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
204 (*current_liboctave_error_handler) ("dsyev workspace query failed");
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
205
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
206 lwork = static_cast<F77_INT> (dummy_work);
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
207 Array<double> work (dim_vector (lwork, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
208 double *pwork = work.fortran_vec ();
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
209
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
210 F77_XFCN (dsyev, DSYEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
211 F77_CONST_CHAR_ARG2 ("U", 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
212 n, tmp_data, n, pwr, pwork, lwork, info
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
213 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
214 F77_CHAR_ARG_LEN (1)));
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
215
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
216 if (info < 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
217 (*current_liboctave_error_handler) ("unrecoverable error in dsyev");
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
218
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
219 if (info > 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
220 (*current_liboctave_error_handler) ("dsyev failed to converge");
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
221
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
222 m_lambda = ComplexColumnVector (wr);
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
223 m_v = (calc_rev ? ComplexMatrix (atmp) : ComplexMatrix ());
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
224 m_w = (calc_lev ? ComplexMatrix (atmp) : ComplexMatrix ());
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
225
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
226 return info;
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
227 }
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
228
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
229 octave_idx_type
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
230 EIG::init (const ComplexMatrix& a, bool calc_rev, bool calc_lev, bool balance)
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
231 {
5822
4fdc2515ebad [project @ 2006-05-18 19:31:36 by jwe]
jwe
parents: 5307
diff changeset
232 if (a.any_element_is_inf_or_nan ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
233 (*current_liboctave_error_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
234 ("EIG: matrix contains Inf or NaN values");
5822
4fdc2515ebad [project @ 2006-05-18 19:31:36 by jwe]
jwe
parents: 5307
diff changeset
235
23594
af5b813503cb maint: Deprecate is_hermitian and replace with ishermitian.
Rik <rik@octave.org>
parents: 23475
diff changeset
236 if (a.ishermitian ())
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
237 return hermitian_init (a, calc_rev, calc_lev);
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
238
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
239 F77_INT n = octave::to_f77_int (a.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
240 F77_INT a_nc = octave::to_f77_int (a.cols ());
1934
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
241
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
242 if (n != a_nc)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
243 (*current_liboctave_error_handler) ("EIG requires square matrix");
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
244
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
245 F77_INT info = 0;
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
246
1934
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
247 ComplexMatrix atmp = a;
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
248 Complex *tmp_data = atmp.fortran_vec ();
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
249
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
250 ComplexColumnVector wr (n);
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
251 Complex *pw = wr.fortran_vec ();
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
252
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23220
diff changeset
253 F77_INT nvr = (calc_rev ? n : 0);
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
254 ComplexMatrix vrtmp (nvr, nvr);
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
255 Complex *pvr = vrtmp.fortran_vec ();
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
256
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23220
diff changeset
257 F77_INT nvl = (calc_lev ? n : 0);
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
258 ComplexMatrix vltmp (nvl, nvl);
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
259 Complex *pvl = vltmp.fortran_vec ();
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
260
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
261 F77_INT lwork = -1;
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
262 Complex dummy_work;
1934
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
263
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
264 F77_INT lrwork = 2*n;
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
265 Array<double> rwork (dim_vector (lrwork, 1));
1934
0e591d443ff0 [project @ 1996-02-12 03:25:10 by jwe]
jwe
parents: 1882
diff changeset
266 double *prwork = rwork.fortran_vec ();
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
267
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
268 F77_INT ilo;
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
269 F77_INT ihi;
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
270
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
271 Array<double> scale (dim_vector (n, 1));
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
272 double *pscale = scale.fortran_vec ();
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
273
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
274 double abnrm;
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
275
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
276 Array<double> rconde (dim_vector (n, 1));
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
277 double *prconde = rconde.fortran_vec ();
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
278
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
279 Array<double> rcondv (dim_vector (n, 1));
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
280 double *prcondv = rcondv.fortran_vec ();
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
281
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
282 F77_XFCN (zgeevx, ZGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
283 F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
284 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
285 F77_CONST_CHAR_ARG2 ("N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
286 n, F77_DBLE_CMPLX_ARG (tmp_data), n,
23475
d691ed308237 maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents: 23450
diff changeset
287 F77_DBLE_CMPLX_ARG (pw), F77_DBLE_CMPLX_ARG (pvl),
d691ed308237 maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents: 23450
diff changeset
288 n, F77_DBLE_CMPLX_ARG (pvr), n, ilo, ihi,
d691ed308237 maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents: 23450
diff changeset
289 pscale, abnrm, prconde, prcondv,
d691ed308237 maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents: 23450
diff changeset
290 F77_DBLE_CMPLX_ARG (&dummy_work), lwork, prwork,
d691ed308237 maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents: 23450
diff changeset
291 info
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
292 F77_CHAR_ARG_LEN (1)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
293 F77_CHAR_ARG_LEN (1)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
294 F77_CHAR_ARG_LEN (1)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
295 F77_CHAR_ARG_LEN (1)));
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
296
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
297 if (info != 0)
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
298 (*current_liboctave_error_handler) ("zgeevx workspace query failed");
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
299
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
300 lwork = static_cast<F77_INT> (dummy_work.real ());
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
301 Array<Complex> work (dim_vector (lwork, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
302 Complex *pwork = work.fortran_vec ();
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
303
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
304 F77_XFCN (zgeevx, ZGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
305 F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
306 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
307 F77_CONST_CHAR_ARG2 ("N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
308 n, F77_DBLE_CMPLX_ARG (tmp_data), n,
23475
d691ed308237 maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents: 23450
diff changeset
309 F77_DBLE_CMPLX_ARG (pw), F77_DBLE_CMPLX_ARG (pvl),
d691ed308237 maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents: 23450
diff changeset
310 n, F77_DBLE_CMPLX_ARG (pvr), n, ilo, ihi,
d691ed308237 maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents: 23450
diff changeset
311 pscale, abnrm, prconde, prcondv,
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
312 F77_DBLE_CMPLX_ARG (pwork), lwork, prwork, info
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
313 F77_CHAR_ARG_LEN (1)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
314 F77_CHAR_ARG_LEN (1)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
315 F77_CHAR_ARG_LEN (1)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
316 F77_CHAR_ARG_LEN (1)));
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
317
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
318 if (info < 0)
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
319 (*current_liboctave_error_handler) ("unrecoverable error in zgeevx");
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
320
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
321 if (info > 0)
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
322 (*current_liboctave_error_handler) ("zgeevx failed to converge");
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
323
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
324 m_lambda = wr;
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
325 m_v = vrtmp;
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
326 m_w = vltmp;
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
327
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
328 return info;
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
329 }
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
330
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
331 octave_idx_type
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
332 EIG::hermitian_init (const ComplexMatrix& a, bool calc_rev, bool calc_lev)
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
333 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
334 F77_INT n = octave::to_f77_int (a.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
335 F77_INT a_nc = octave::to_f77_int (a.cols ());
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
336
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
337 if (n != a_nc)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
338 (*current_liboctave_error_handler) ("EIG requires square matrix");
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
339
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
340 F77_INT info = 0;
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
341
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
342 ComplexMatrix atmp = a;
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
343 Complex *tmp_data = atmp.fortran_vec ();
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
344
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3178
diff changeset
345 ColumnVector wr (n);
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3178
diff changeset
346 double *pwr = wr.fortran_vec ();
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
347
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
348 F77_INT lwork = -1;
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
349 Complex dummy_work;
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
350
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
351 F77_INT lrwork = 3*n;
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
352 Array<double> rwork (dim_vector (lrwork, 1));
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
353 double *prwork = rwork.fortran_vec ();
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
354
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
355 F77_XFCN (zheev, ZHEEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
356 F77_CONST_CHAR_ARG2 ("U", 1),
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
357 n, F77_DBLE_CMPLX_ARG (tmp_data), n, pwr,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
358 F77_DBLE_CMPLX_ARG (&dummy_work), lwork,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
359 prwork, info
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
360 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
361 F77_CHAR_ARG_LEN (1)));
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2804
diff changeset
362
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
363 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
364 (*current_liboctave_error_handler) ("zheev workspace query failed");
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
365
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
366 lwork = static_cast<F77_INT> (dummy_work.real ());
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
367 Array<Complex> work (dim_vector (lwork, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
368 Complex *pwork = work.fortran_vec ();
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
369
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
370 F77_XFCN (zheev, ZHEEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
371 F77_CONST_CHAR_ARG2 ("U", 1),
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
372 n, F77_DBLE_CMPLX_ARG (tmp_data), n, pwr,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
373 F77_DBLE_CMPLX_ARG (pwork), lwork, prwork, info
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
374 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
375 F77_CHAR_ARG_LEN (1)));
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
376
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
377 if (info < 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
378 (*current_liboctave_error_handler) ("unrecoverable error in zheev");
4800
c322edde72ac [project @ 2004-02-25 03:54:33 by jwe]
jwe
parents: 4725
diff changeset
379
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
380 if (info > 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
381 (*current_liboctave_error_handler) ("zheev failed to converge");
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
382
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
383 m_lambda = ComplexColumnVector (wr);
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
384 m_v = (calc_rev ? ComplexMatrix (atmp) : ComplexMatrix ());
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
385 m_w = (calc_lev ? ComplexMatrix (atmp) : ComplexMatrix ());
462
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
386
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
387 return info;
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
388 }
07fabd96ac6a [project @ 1994-06-06 00:58:18 by jwe]
jwe
parents:
diff changeset
389
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
390 octave_idx_type
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
391 EIG::init (const Matrix& a, const Matrix& b, bool calc_rev, bool calc_lev,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
392 bool force_qz)
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
393 {
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
394 if (a.any_element_is_inf_or_nan () || b.any_element_is_inf_or_nan ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
395 (*current_liboctave_error_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
396 ("EIG: matrix contains Inf or NaN values");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
397
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
398 F77_INT n = octave::to_f77_int (a.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
399 F77_INT nb = octave::to_f77_int (b.rows ());
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
400
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
401 F77_INT a_nc = octave::to_f77_int (a.cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
402 F77_INT b_nc = octave::to_f77_int (b.cols ());
23085
dffa2b8c9482 maint: strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 23084
diff changeset
403
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
404 if (n != a_nc || nb != b_nc)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
405 (*current_liboctave_error_handler) ("EIG requires square matrix");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
406
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
407 if (n != nb)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
408 (*current_liboctave_error_handler) ("EIG requires same size matrices");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
409
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
410 F77_INT info = 0;
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
411
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
412 Matrix tmp = b;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
413 double *tmp_data = tmp.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
414
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
415 if (! force_qz)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
416 {
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
417 F77_XFCN (dpotrf, DPOTRF, (F77_CONST_CHAR_ARG2 ("L", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
418 n, tmp_data, n,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
419 info
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
420 F77_CHAR_ARG_LEN (1)));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
421
23596
b63c3a09aee7 maint: Deprecate is_symmetric and replace with issymmetric.
Rik <rik@octave.org>
parents: 23594
diff changeset
422 if (a.issymmetric () && b.issymmetric () && info == 0)
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
423 return symmetric_init (a, b, calc_rev, calc_lev);
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
424 }
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
425
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
426 Matrix atmp = a;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
427 double *atmp_data = atmp.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
428
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
429 Matrix btmp = b;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
430 double *btmp_data = btmp.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
431
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
432 Array<double> ar (dim_vector (n, 1));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
433 double *par = ar.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
434
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
435 Array<double> ai (dim_vector (n, 1));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
436 double *pai = ai.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
437
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
438 Array<double> beta (dim_vector (n, 1));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
439 double *pbeta = beta.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
440
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23220
diff changeset
441 F77_INT tnvr = (calc_rev ? n : 0);
9020
728e7943752d EIG.cc: avoid volatile decl for tmp variable
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
442 Matrix vr (tnvr, tnvr);
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
443 double *pvr = vr.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
444
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23220
diff changeset
445 F77_INT tnvl = (calc_lev ? n : 0);
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
446 Matrix vl (tnvl, tnvl);
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
447 double *pvl = vl.fortran_vec ();
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
448
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
449 F77_INT lwork = -1;
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
450 double dummy_work;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
451
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
452 F77_XFCN (dggev, DGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
453 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
454 n, atmp_data, n, btmp_data, n,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
455 par, pai, pbeta,
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
456 pvl, n, pvr, n,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
457 &dummy_work, lwork, info
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
458 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
459 F77_CHAR_ARG_LEN (1)));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
460
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
461 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
462 (*current_liboctave_error_handler) ("dggev workspace query failed");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
463
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
464 lwork = static_cast<F77_INT> (dummy_work);
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
465 Array<double> work (dim_vector (lwork, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
466 double *pwork = work.fortran_vec ();
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
467
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
468 F77_XFCN (dggev, DGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
469 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
470 n, atmp_data, n, btmp_data, n,
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
471 par, pai, pbeta,
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
472 pvl, n, pvr, n,
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
473 pwork, lwork, info
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
474 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
475 F77_CHAR_ARG_LEN (1)));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
476
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
477 if (info < 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
478 (*current_liboctave_error_handler) ("unrecoverable error in dggev");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
479
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
480 if (info > 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
481 (*current_liboctave_error_handler) ("dggev failed to converge");
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
482
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
483 m_lambda.resize (n);
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23220
diff changeset
484 F77_INT nvr = (calc_rev ? n : 0);
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
485 m_v.resize (nvr, nvr);
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
486
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23220
diff changeset
487 F77_INT nvl = (calc_lev ? n : 0);
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
488 m_w.resize (nvl, nvl);
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
489
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
490 for (F77_INT j = 0; j < n; j++)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
491 {
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
492 if (ai.elem (j) == 0.0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
493 {
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
494 m_lambda.elem (j) = Complex (ar.elem (j) / beta.elem (j));
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
495 for (F77_INT i = 0; i < nvr; i++)
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
496 m_v.elem (i, j) = vr.elem (i, j);
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
497 for (F77_INT i = 0; i < nvl; i++)
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
498 m_w.elem (i, j) = vl.elem (i, j);
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
499 }
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
500 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
501 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
502 if (j+1 >= n)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
503 (*current_liboctave_error_handler) ("EIG: internal error");
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
504
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
505 m_lambda.elem (j) = Complex (ar.elem (j) / beta.elem (j),
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
506 ai.elem (j) / beta.elem (j));
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
507 m_lambda.elem (j+1) = Complex (ar.elem (j+1) / beta.elem (j+1),
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
508 ai.elem (j+1) / beta.elem (j+1));
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
509
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
510 for (F77_INT i = 0; i < nvr; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
511 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
512 double real_part = vr.elem (i, j);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
513 double imag_part = vr.elem (i, j+1);
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
514 m_v.elem (i, j) = Complex (real_part, imag_part);
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
515 m_v.elem (i, j+1) = Complex (real_part, -imag_part);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
516 }
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
517 for (F77_INT i = 0; i < nvl; i++)
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
518 {
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
519 double real_part = vl.elem (i, j);
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
520 double imag_part = vl.elem (i, j+1);
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
521 m_w.elem (i, j) = Complex (real_part, imag_part);
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
522 m_w.elem (i, j+1) = Complex (real_part, -imag_part);
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
523 }
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
524 j++;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
525 }
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
526 }
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
527
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
528 return info;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
529 }
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
530
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
531 octave_idx_type
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
532 EIG::symmetric_init (const Matrix& a, const Matrix& b, bool calc_rev,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
533 bool calc_lev)
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
534 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
535 F77_INT n = octave::to_f77_int (a.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
536 F77_INT nb = octave::to_f77_int (b.rows ());
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
537
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
538 F77_INT a_nc = octave::to_f77_int (a.cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
539 F77_INT b_nc = octave::to_f77_int (b.cols ());
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
540
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
541 if (n != a_nc || nb != b_nc)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
542 (*current_liboctave_error_handler) ("EIG requires square matrix");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
543
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
544 if (n != nb)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
545 (*current_liboctave_error_handler) ("EIG requires same size matrices");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
546
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
547 F77_INT info = 0;
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
548
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
549 Matrix atmp = a;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
550 double *atmp_data = atmp.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
551
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
552 Matrix btmp = b;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
553 double *btmp_data = btmp.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
554
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
555 ColumnVector wr (n);
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
556 double *pwr = wr.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
557
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
558 F77_INT lwork = -1;
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
559 double dummy_work;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
560
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
561 F77_XFCN (dsygv, DSYGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
562 F77_CONST_CHAR_ARG2 ("U", 1),
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
563 n, atmp_data, n,
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
564 btmp_data, n,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
565 pwr, &dummy_work, lwork, info
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
566 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
567 F77_CHAR_ARG_LEN (1)));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
568
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
569 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
570 (*current_liboctave_error_handler) ("dsygv workspace query failed");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
571
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
572 lwork = static_cast<F77_INT> (dummy_work);
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
573 Array<double> work (dim_vector (lwork, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
574 double *pwork = work.fortran_vec ();
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
575
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
576 F77_XFCN (dsygv, DSYGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
577 F77_CONST_CHAR_ARG2 ("U", 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
578 n, atmp_data, n,
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
579 btmp_data, n,
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
580 pwr, pwork, lwork, info
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
581 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
582 F77_CHAR_ARG_LEN (1)));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
583
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
584 if (info < 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
585 (*current_liboctave_error_handler) ("unrecoverable error in dsygv");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
586
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
587 if (info > 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
588 (*current_liboctave_error_handler) ("dsygv failed to converge");
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
589
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
590 m_lambda = ComplexColumnVector (wr);
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
591 m_v = (calc_rev ? ComplexMatrix (atmp) : ComplexMatrix ());
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
592 m_w = (calc_lev ? ComplexMatrix (atmp) : ComplexMatrix ());
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
593
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
594 return info;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
595 }
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
596
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
597 octave_idx_type
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
598 EIG::init (const ComplexMatrix& a, const ComplexMatrix& b, bool calc_rev,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
599 bool calc_lev, bool force_qz)
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
600 {
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
601 if (a.any_element_is_inf_or_nan () || b.any_element_is_inf_or_nan ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
602 (*current_liboctave_error_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
603 ("EIG: matrix contains Inf or NaN values");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
604
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
605 F77_INT n = octave::to_f77_int (a.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
606 F77_INT nb = octave::to_f77_int (b.rows ());
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
607
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
608 F77_INT a_nc = octave::to_f77_int (a.cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
609 F77_INT b_nc = octave::to_f77_int (b.cols ());
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
610
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
611 if (n != a_nc || nb != b_nc)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
612 (*current_liboctave_error_handler) ("EIG requires square matrix");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
613
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
614 if (n != nb)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
615 (*current_liboctave_error_handler) ("EIG requires same size matrices");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
616
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
617 F77_INT info = 0;
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
618
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
619 ComplexMatrix tmp = b;
30394
f3f3e3793fb5 maint: style check C++ files in liboctave/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30044
diff changeset
620 Complex *tmp_data = tmp.fortran_vec ();
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
621
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
622 if (! force_qz)
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
623 {
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
624 F77_XFCN (zpotrf, ZPOTRF, (F77_CONST_CHAR_ARG2 ("L", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
625 n, F77_DBLE_CMPLX_ARG (tmp_data), n,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
626 info
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
627 F77_CHAR_ARG_LEN (1)));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
628
23594
af5b813503cb maint: Deprecate is_hermitian and replace with ishermitian.
Rik <rik@octave.org>
parents: 23475
diff changeset
629 if (a.ishermitian () && b.ishermitian () && info == 0)
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
630 return hermitian_init (a, b, calc_rev, calc_lev);
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
631 }
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
632
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
633 ComplexMatrix atmp = a;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
634 Complex *atmp_data = atmp.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
635
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
636 ComplexMatrix btmp = b;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
637 Complex *btmp_data = btmp.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
638
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
639 ComplexColumnVector alpha (n);
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
640 Complex *palpha = alpha.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
641
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
642 ComplexColumnVector beta (n);
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
643 Complex *pbeta = beta.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
644
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23220
diff changeset
645 F77_INT nvr = (calc_rev ? n : 0);
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
646 ComplexMatrix vrtmp (nvr, nvr);
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
647 Complex *pvr = vrtmp.fortran_vec ();
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
648
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23220
diff changeset
649 F77_INT nvl = (calc_lev ? n : 0);
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
650 ComplexMatrix vltmp (nvl, nvl);
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
651 Complex *pvl = vltmp.fortran_vec ();
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
652
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
653 F77_INT lwork = -1;
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
654 Complex dummy_work;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
655
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
656 F77_INT lrwork = 8*n;
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
657 Array<double> rwork (dim_vector (lrwork, 1));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
658 double *prwork = rwork.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
659
27009
fc73dafece57 Fix return of left-handed vectors when inputs are complex (bug #56026)
Rik <rik@octave.org>
parents: 26376
diff changeset
660 F77_XFCN (zggev, ZGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
661 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
662 n, F77_DBLE_CMPLX_ARG (atmp_data), n,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
663 F77_DBLE_CMPLX_ARG (btmp_data), n,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
664 F77_DBLE_CMPLX_ARG (palpha),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
665 F77_DBLE_CMPLX_ARG (pbeta),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
666 F77_DBLE_CMPLX_ARG (pvl), n,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
667 F77_DBLE_CMPLX_ARG (pvr), n,
23475
d691ed308237 maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents: 23450
diff changeset
668 F77_DBLE_CMPLX_ARG (&dummy_work), lwork, prwork,
d691ed308237 maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents: 23450
diff changeset
669 info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
670 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
671 F77_CHAR_ARG_LEN (1)));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
672
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
673 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
674 (*current_liboctave_error_handler) ("zggev workspace query failed");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
675
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
676 lwork = static_cast<F77_INT> (dummy_work.real ());
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
677 Array<Complex> work (dim_vector (lwork, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
678 Complex *pwork = work.fortran_vec ();
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
679
27009
fc73dafece57 Fix return of left-handed vectors when inputs are complex (bug #56026)
Rik <rik@octave.org>
parents: 26376
diff changeset
680 F77_XFCN (zggev, ZGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
681 F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
682 n, F77_DBLE_CMPLX_ARG (atmp_data), n,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
683 F77_DBLE_CMPLX_ARG (btmp_data), n,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
684 F77_DBLE_CMPLX_ARG (palpha),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
685 F77_DBLE_CMPLX_ARG (pbeta),
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
686 F77_DBLE_CMPLX_ARG (pvl), n,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
687 F77_DBLE_CMPLX_ARG (pvr), n,
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
688 F77_DBLE_CMPLX_ARG (pwork), lwork, prwork, info
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
689 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
690 F77_CHAR_ARG_LEN (1)));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
691
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
692 if (info < 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
693 (*current_liboctave_error_handler) ("unrecoverable error in zggev");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
694
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
695 if (info > 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
696 (*current_liboctave_error_handler) ("zggev failed to converge");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
697
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
698 m_lambda.resize (n);
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
699
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
700 for (F77_INT j = 0; j < n; j++)
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
701 m_lambda.elem (j) = alpha.elem (j) / beta.elem (j);
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
702
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
703 m_v = vrtmp;
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
704 m_w = vltmp;
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
705
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
706 return info;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
707 }
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
708
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
709 octave_idx_type
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
710 EIG::hermitian_init (const ComplexMatrix& a, const ComplexMatrix& b,
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
711 bool calc_rev, bool calc_lev)
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
712 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
713 F77_INT n = octave::to_f77_int (a.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
714 F77_INT nb = octave::to_f77_int (b.rows ());
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
715
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
716 F77_INT a_nc = octave::to_f77_int (a.cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22953
diff changeset
717 F77_INT b_nc = octave::to_f77_int (b.cols ());
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
718
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
719 if (n != a_nc || nb != b_nc)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
720 (*current_liboctave_error_handler) ("EIG requires square matrix");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
721
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
722 if (n != nb)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
723 (*current_liboctave_error_handler) ("EIG requires same size matrices");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
724
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
725 F77_INT info = 0;
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
726
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
727 ComplexMatrix atmp = a;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
728 Complex *atmp_data = atmp.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
729
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
730 ComplexMatrix btmp = b;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
731 Complex *btmp_data = btmp.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
732
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
733 ColumnVector wr (n);
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
734 double *pwr = wr.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
735
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
736 F77_INT lwork = -1;
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
737 Complex dummy_work;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
738
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
739 F77_INT lrwork = 3*n;
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
740 Array<double> rwork (dim_vector (lrwork, 1));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
741 double *prwork = rwork.fortran_vec ();
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
742
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
743 F77_XFCN (zhegv, ZHEGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
744 F77_CONST_CHAR_ARG2 ("U", 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
745 n, F77_DBLE_CMPLX_ARG (atmp_data), n,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
746 F77_DBLE_CMPLX_ARG (btmp_data), n,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
747 pwr, F77_DBLE_CMPLX_ARG (&dummy_work), lwork,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
748 prwork, info
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
749 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10158
diff changeset
750 F77_CHAR_ARG_LEN (1)));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
751
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
752 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
753 (*current_liboctave_error_handler) ("zhegv workspace query failed");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
754
22953
fd649fd3db75 use F77_INT instead of octave_idx_type for liboctave EIG classes
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
755 lwork = static_cast<F77_INT> (dummy_work.real ());
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
756 Array<Complex> work (dim_vector (lwork, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
757 Complex *pwork = work.fortran_vec ();
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
758
22305
510886d03ef2 eig: new options for choice of algorithm, balancing, and output (patch #8960)
Barbara Locsi <locsi.barbara@gmail.com>
parents: 22135
diff changeset
759 F77_XFCN (zhegv, ZHEGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
760 F77_CONST_CHAR_ARG2 ("U", 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
761 n, F77_DBLE_CMPLX_ARG (atmp_data), n,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
762 F77_DBLE_CMPLX_ARG (btmp_data), n,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
763 pwr, F77_DBLE_CMPLX_ARG (pwork), lwork, prwork, info
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
764 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
765 F77_CHAR_ARG_LEN (1)));
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
766
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
767 if (info < 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
768 (*current_liboctave_error_handler) ("unrecoverable error in zhegv");
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
769
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
770 if (info > 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
771 (*current_liboctave_error_handler) ("zhegv failed to converge");
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20490
diff changeset
772
30044
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
773 m_lambda = ComplexColumnVector (wr);
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
774 m_v = (calc_rev ? ComplexMatrix (atmp) : ComplexMatrix ());
1f34286a2637 maint: use "m_" prefix for member variables of classes associated with EIG.
Rik <rik@octave.org>
parents: 29358
diff changeset
775 m_w = (calc_lev ? ComplexMatrix (atmp) : ComplexMatrix ());
8339
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
776
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
777 return info;
18c4ded8612a Add generalized eigenvalue functions
Jarkko Kaleva <d3roga@gmail.com>
parents: 7482
diff changeset
778 }