Mercurial > octave
annotate liboctave/numeric/gsvd.cc @ 23475:d691ed308237
maint: Clean up #includes in liboctave/numeric directory.
* build-aux/mk-opts.pl: Change Perl to generate "" around local include
libraries rather than <>. Include "lo-math.h" rather than <cmath>.
* CollocWt.cc, DAERTFunc.h, DASPK.cc, DASPK.h, DASRT.cc, DASRT.h, DASSL.cc,
DASSL.h, DET.h, EIG.cc, EIG.h, LSODE.cc, LSODE.h, ODE.h, ODES.cc, ODESFunc.h,
Quad.cc, aepbalance.cc, base-de.h, base-min.h, bsxfun-decl.h, bsxfun-defs.cc,
bsxfun.h, chol.cc, eigs-base.cc, fEIG.cc, fEIG.h, gepbalance.cc, gsvd.cc,
hess.cc, lo-blas-proto.h, lo-lapack-proto.h, lo-mappers.cc, lo-mappers.h,
lo-qrupdate-proto.h, lo-slatec-proto.h, lo-specfun.cc, lo-specfun.h, lu.cc,
lu.h, oct-convn.cc, oct-convn.h, oct-fftw.cc, oct-fftw.h, oct-norm.cc,
oct-rand.cc, oct-rand.h, oct-spparms.cc, oct-spparms.h, qr.cc, qr.h, qrp.cc,
randgamma.cc, randpoisson.cc, schur.cc, schur.h, sparse-chol.cc, sparse-chol.h,
sparse-dmsolve.cc, sparse-lu.cc, sparse-lu.h, sparse-qr.cc, sparse-qr.h,
svd.cc:
Rationalize #includes. Use forward declarations of just classes where
possible. Reformat some long lines < 80 characters. Reformat some comments
for readabliity.
* mx-inlines.cc: Rationalize #includes for this file in liboctave/operators
used by many in liboctave/numeric.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 09 May 2017 08:46:07 -0700 |
parents | 855122b993da |
children | 08036a7f3660 |
rev | line source |
---|---|
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
1 /* |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
2 |
23221
debe0c7dcefc
maint: Update copyright dates.
John W. Eaton <jwe@octave.org>
parents:
22988
diff
changeset
|
3 Copyright (C) 2016-2017 Barbara Lócsi |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
4 Copyright (C) 2006 Pascal Dupuis <Pascal.Dupuis@uclouvain.be> |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
5 Copyright (C) 1996, 1997 John W. Eaton |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
6 |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
7 This file is part of Octave. |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
8 |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
9 Octave is free software; you can redistribute it and/or modify it |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
10 under the terms of the GNU General Public License as published by |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
11 the Free Software Foundation; either version 3 of the License, or |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
12 (at your option) any later version. |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
13 |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
14 Octave is distributed in the hope that it will be useful, but |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
15 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
17 GNU General Public License for more details. |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
18 |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
19 You should have received a copy of the GNU General Public License |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
20 along with Octave; see the file COPYING. If not, see |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
21 <http://www.gnu.org/licenses/>. |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
22 |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
23 */ |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
24 |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
25 #ifdef HAVE_CONFIG_H |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
26 # include <config.h> |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
27 #endif |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
28 |
22436
09005ac7d56c
gsvd<T>: add class template support for FloatMatrix and FloatComplexMatrix.
Carnë Draug <carandraug@octave.org>
parents:
22402
diff
changeset
|
29 #include <vector> |
09005ac7d56c
gsvd<T>: add class template support for FloatMatrix and FloatComplexMatrix.
Carnë Draug <carandraug@octave.org>
parents:
22402
diff
changeset
|
30 |
23475
d691ed308237
maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
31 #include "CMatrix.h" |
d691ed308237
maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
32 #include "dDiagMatrix.h" |
d691ed308237
maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
33 #include "dMatrix.h" |
d691ed308237
maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
34 #include "fCMatrix.h" |
d691ed308237
maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
35 #include "fDiagMatrix.h" |
d691ed308237
maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
36 #include "fMatrix.h" |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
37 #include "gsvd.h" |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
38 #include "lo-error.h" |
22322
93b3cdd36854
move most f77 function decls to separate header files
John W. Eaton <jwe@octave.org>
parents:
22297
diff
changeset
|
39 #include "lo-lapack-proto.h" |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
40 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
41 namespace octave |
22436
09005ac7d56c
gsvd<T>: add class template support for FloatMatrix and FloatComplexMatrix.
Carnë Draug <carandraug@octave.org>
parents:
22402
diff
changeset
|
42 { |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
43 namespace math |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
44 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
45 template <> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
46 void |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
47 gsvd<Matrix>::ggsvd (char& jobu, char& jobv, char& jobq, F77_INT m, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
48 F77_INT n, F77_INT p, F77_INT& k, F77_INT& l, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
49 double *tmp_dataA, F77_INT m1, double *tmp_dataB, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
50 F77_INT p1, Matrix& alpha, Matrix& beta, double *u, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
51 F77_INT nrow_u, double *v, F77_INT nrow_v, double *q, |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23221
diff
changeset
|
52 F77_INT nrow_q, Matrix& work, F77_INT *iwork, |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
53 F77_INT& info) |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
54 { |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
55 F77_XFCN (dggsvd, DGGSVD, (F77_CONST_CHAR_ARG2 (&jobu, 1), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
56 F77_CONST_CHAR_ARG2 (&jobv, 1), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
57 F77_CONST_CHAR_ARG2 (&jobq, 1), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
58 m, n, p, k, l, tmp_dataA, m1, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
59 tmp_dataB, p1, alpha.fortran_vec (), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
60 beta.fortran_vec (), u, nrow_u, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
61 v, nrow_v, q, nrow_q, work.fortran_vec (), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
62 iwork, info |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
63 F77_CHAR_ARG_LEN (1) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
64 F77_CHAR_ARG_LEN (1) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
65 F77_CHAR_ARG_LEN (1))); |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
66 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
67 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
68 template <> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
69 void |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
70 gsvd<FloatMatrix>::ggsvd (char& jobu, char& jobv, char& jobq, F77_INT m, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
71 F77_INT n, F77_INT p, F77_INT& k, F77_INT& l, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
72 float *tmp_dataA, F77_INT m1, float *tmp_dataB, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
73 F77_INT p1, FloatMatrix& alpha, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
74 FloatMatrix& beta, float *u, F77_INT nrow_u, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
75 float *v, F77_INT nrow_v, float *q, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
76 F77_INT nrow_q, FloatMatrix& work, |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23221
diff
changeset
|
77 F77_INT *iwork, F77_INT& info) |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
78 { |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
79 F77_XFCN (sggsvd, SGGSVD, (F77_CONST_CHAR_ARG2 (&jobu, 1), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
80 F77_CONST_CHAR_ARG2 (&jobv, 1), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
81 F77_CONST_CHAR_ARG2 (&jobq, 1), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
82 m, n, p, k, l, tmp_dataA, m1, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
83 tmp_dataB, p1, alpha.fortran_vec (), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
84 beta.fortran_vec (), u, nrow_u, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
85 v, nrow_v, q, nrow_q, work.fortran_vec (), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
86 iwork, info |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
87 F77_CHAR_ARG_LEN (1) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
88 F77_CHAR_ARG_LEN (1) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
89 F77_CHAR_ARG_LEN (1))); |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
90 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
91 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
92 template <> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
93 void |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
94 gsvd<ComplexMatrix>::ggsvd (char& jobu, char& jobv, char& jobq, |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
95 F77_INT m, F77_INT n, F77_INT p, F77_INT& k, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
96 F77_INT& l, Complex *tmp_dataA, F77_INT m1, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
97 Complex *tmp_dataB, F77_INT p1, Matrix& alpha, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
98 Matrix& beta, Complex *u, F77_INT nrow_u, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
99 Complex *v, F77_INT nrow_v, Complex *q, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
100 F77_INT nrow_q, ComplexMatrix& work, |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23221
diff
changeset
|
101 F77_INT *iwork, F77_INT& info) |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
102 { |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
103 Matrix rwork(2*n, 1); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
104 F77_XFCN (zggsvd, ZGGSVD, (F77_CONST_CHAR_ARG2 (&jobu, 1), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
105 F77_CONST_CHAR_ARG2 (&jobv, 1), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
106 F77_CONST_CHAR_ARG2 (&jobq, 1), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
107 m, n, p, k, l, F77_DBLE_CMPLX_ARG (tmp_dataA), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
108 m1, F77_DBLE_CMPLX_ARG (tmp_dataB), p1, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
109 alpha.fortran_vec (), beta.fortran_vec (), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
110 F77_DBLE_CMPLX_ARG (u), nrow_u, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
111 F77_DBLE_CMPLX_ARG (v), nrow_v, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
112 F77_DBLE_CMPLX_ARG (q), nrow_q, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
113 F77_DBLE_CMPLX_ARG (work.fortran_vec ()), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
114 rwork.fortran_vec (), iwork, info |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
115 F77_CHAR_ARG_LEN (1) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
116 F77_CHAR_ARG_LEN (1) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
117 F77_CHAR_ARG_LEN (1))); |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
118 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
119 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
120 template <> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
121 void |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
122 gsvd<FloatComplexMatrix>::ggsvd (char& jobu, char& jobv, char& jobq, |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
123 F77_INT m, F77_INT n, F77_INT p, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
124 F77_INT& k, F77_INT& l, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
125 FloatComplex *tmp_dataA, F77_INT m1, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
126 FloatComplex *tmp_dataB, F77_INT p1, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
127 FloatMatrix& alpha, FloatMatrix& beta, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
128 FloatComplex *u, F77_INT nrow_u, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
129 FloatComplex *v, F77_INT nrow_v, |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
130 FloatComplex *q, F77_INT nrow_q, |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
131 FloatComplexMatrix& work, |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23221
diff
changeset
|
132 F77_INT *iwork, F77_INT& info) |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
133 { |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
134 FloatMatrix rwork(2*n, 1); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
135 F77_XFCN (cggsvd, CGGSVD, (F77_CONST_CHAR_ARG2 (&jobu, 1), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
136 F77_CONST_CHAR_ARG2 (&jobv, 1), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
137 F77_CONST_CHAR_ARG2 (&jobq, 1), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
138 m, n, p, k, l, F77_CMPLX_ARG (tmp_dataA), m1, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
139 F77_CMPLX_ARG (tmp_dataB), p1, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
140 alpha.fortran_vec (), beta.fortran_vec (), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
141 F77_CMPLX_ARG (u), nrow_u, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
142 F77_CMPLX_ARG (v), nrow_v, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
143 F77_CMPLX_ARG (q), nrow_q, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
144 F77_CMPLX_ARG (work.fortran_vec ()), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
145 rwork.fortran_vec (), iwork, info |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
146 F77_CHAR_ARG_LEN (1) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
147 F77_CHAR_ARG_LEN (1) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
148 F77_CHAR_ARG_LEN (1))); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
149 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
150 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
151 template <typename T> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
152 T |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
153 gsvd<T>::left_singular_matrix_A (void) const |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
154 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
155 if (type == gsvd::Type::sigma_only) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
156 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
157 (*current_liboctave_error_handler) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
158 ("gsvd: U not computed because type == gsvd::sigma_only"); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
159 return T (); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
160 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
161 else |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
162 return left_smA; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
163 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
164 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
165 template <typename T> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
166 T |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
167 gsvd<T>::left_singular_matrix_B (void) const |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
168 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
169 if (type == gsvd::Type::sigma_only) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
170 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
171 (*current_liboctave_error_handler) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
172 ("gsvd: V not computed because type == gsvd::sigma_only"); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
173 return T (); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
174 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
175 else |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
176 return left_smB; |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
177 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
178 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
179 template <typename T> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
180 T |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
181 gsvd<T>::right_singular_matrix (void) const |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
182 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
183 if (type == gsvd::Type::sigma_only) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
184 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
185 (*current_liboctave_error_handler) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
186 ("gsvd: X not computed because type == gsvd::sigma_only"); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
187 return T (); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
188 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
189 else |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
190 return right_sm; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
191 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
192 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
193 template <typename T> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
194 T |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
195 gsvd<T>::R_matrix (void) const |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
196 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
197 if (type != gsvd::Type::std) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
198 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
199 (*current_liboctave_error_handler) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
200 ("gsvd: R not computed because type != gsvd::std"); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
201 return T (); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
202 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
203 else |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
204 return R; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
205 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
206 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
207 template <typename T> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
208 gsvd<T>::gsvd (const T& a, const T& b, gsvd::Type gsvd_type) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
209 { |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
210 F77_INT info; |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
211 |
22988
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22945
diff
changeset
|
212 F77_INT m = octave::to_f77_int (a.rows ()); |
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22945
diff
changeset
|
213 F77_INT n = octave::to_f77_int (a.cols ()); |
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22945
diff
changeset
|
214 F77_INT p = octave::to_f77_int (b.rows ()); |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
215 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
216 T atmp = a; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
217 P *tmp_dataA = atmp.fortran_vec (); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
218 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
219 T btmp = b; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
220 P *tmp_dataB = btmp.fortran_vec (); |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
221 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
222 char jobu = 'U'; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
223 char jobv = 'V'; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
224 char jobq = 'Q'; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
225 |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
226 F77_INT nrow_u = m; |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
227 F77_INT nrow_v = p; |
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
228 F77_INT nrow_q = n; |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
229 |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
230 F77_INT k, l; |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
231 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
232 switch (gsvd_type) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
233 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
234 case gsvd<T>::Type::sigma_only: |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
235 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
236 // Note: for this case, both jobu and jobv should be 'N', but |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
237 // there seems to be a bug in dgesvd from Lapack V2.0. To |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
238 // demonstrate the bug, set both jobu and jobv to 'N' and find |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
239 // the singular values of [eye(3), eye(3)]. The result is |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
240 // [-sqrt(2), -sqrt(2), -sqrt(2)]. |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
241 // |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
242 // For Lapack 3.0, this problem seems to be fixed. |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
243 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
244 jobu = 'N'; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
245 jobv = 'N'; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
246 jobq = 'N'; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
247 nrow_u = nrow_v = nrow_q = 1; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
248 break; |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
249 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
250 default: |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
251 break; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
252 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
253 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
254 type = gsvd_type; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
255 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
256 if (! (jobu == 'N' || jobu == 'O')) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
257 left_smA.resize (nrow_u, m); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
258 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
259 P *u = left_smA.fortran_vec (); |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
260 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
261 if (! (jobv == 'N' || jobv == 'O')) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
262 left_smB.resize (nrow_v, p); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
263 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
264 P *v = left_smB.fortran_vec (); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
265 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
266 if (! (jobq == 'N' || jobq == 'O')) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
267 right_sm.resize (nrow_q, n); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
268 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
269 P *q = right_sm.fortran_vec (); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
270 |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
271 F77_INT lwork = 3*n; |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23449
diff
changeset
|
272 lwork = (lwork > m ? lwork : m); |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
273 lwork = (lwork > p ? lwork : p) + n; |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
274 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
275 T work (lwork, 1); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
276 real_matrix alpha (n, 1); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
277 real_matrix beta (n, 1); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
278 |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
279 std::vector<F77_INT> iwork (n); |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
280 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
281 gsvd<T>::ggsvd (jobu, jobv, jobq, m, n, p, k, l, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
282 tmp_dataA, m, tmp_dataB, p, alpha, beta, u, |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
283 nrow_u, v, nrow_v, q, nrow_q, work, iwork.data (), info); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
284 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
285 if (f77_exception_encountered) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
286 (*current_liboctave_error_handler) ("unrecoverable error in *ggsvd"); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
287 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
288 if (info < 0) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
289 (*current_liboctave_error_handler) ("*ggsvd.f: argument %d illegal", |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
290 -info); |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
291 else |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
292 { |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
293 if (info > 0) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
294 (*current_liboctave_error_handler) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
295 ("*ggsvd.f: Jacobi-type procedure failed to converge."); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
296 else |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
297 { |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
298 F77_INT i, j; |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
299 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
300 if (gsvd<T>::Type::std == gsvd_type) |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
301 { |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
302 R.resize(k+l, k+l); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
303 int astart = n-k-l; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
304 if (m - k - l >= 0) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
305 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
306 astart = n-k-l; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
307 // R is stored in A(1:K+L,N-K-L+1:N) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
308 for (i = 0; i < k+l; i++) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
309 for (j = 0; j < k+l; j++) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
310 R.xelem (i, j) = atmp.xelem (i, astart + j); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
311 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
312 else |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
313 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
314 // (R11 R12 R13 ) is stored in A(1:M, N-K-L+1:N), |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
315 // ( 0 R22 R23 ) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
316 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
317 for (i = 0; i < m; i++) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
318 for (j = 0; j < k+l; j++) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
319 R.xelem (i, j) = atmp.xelem (i, astart + j); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
320 // and R33 is stored in B(M-K+1:L,N+M-K-L+1:N) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
321 for (i = k+l-1; i >=m; i--) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
322 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
323 for (j = 0; j < m; j++) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
324 R.xelem(i, j) = 0.0; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
325 for (j = m; j < k+l; j++) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
326 R.xelem (i, j) = btmp.xelem (i - k, astart + j); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
327 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
328 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
329 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
330 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
331 if (m-k-l >= 0) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
332 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
333 // Fills in C and S |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
334 sigmaA.resize (l, l); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
335 sigmaB.resize (l, l); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
336 for (i = 0; i < l; i++) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
337 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
338 sigmaA.dgxelem(i) = alpha.elem(k+i); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
339 sigmaB.dgxelem(i) = beta.elem(k+i); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
340 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
341 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
342 else |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
343 { |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
344 // Fills in C and S |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
345 sigmaA.resize (m-k, m-k); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
346 sigmaB.resize (m-k, m-k); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
347 for (i = 0; i < m-k; i++) |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
348 { |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
349 sigmaA.dgxelem(i) = alpha.elem(k+i); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
350 sigmaB.dgxelem(i) = beta.elem(k+i); |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
351 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
352 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
353 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
354 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
355 } |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
356 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
357 // Instantiations we need. |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
358 template class gsvd<Matrix>; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
359 template class gsvd<FloatMatrix>; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
360 template class gsvd<ComplexMatrix>; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
361 template class gsvd<FloatComplexMatrix>; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
362 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
363 } |