annotate liboctave/numeric/svd.cc @ 22228:4afe3705ea75

svd: do not shadow member variables with local variables. * liboctave/numeric/svd.cc, liboctave/numeric/svd.h: there was no issue with current code because member variables never change after construction. Still, it's not good practice and the compilers will warn about it.
author Carnë Draug <carandraug@octave.org>
date Tue, 09 Aug 2016 00:21:36 +0100
parents 469c817eb256
children 60986498af9e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
457
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
1 /*
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
2
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
3 Copyright (C) 2016 Carnë Draug
19697
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
4 Copyright (C) 1994-2015 John W. Eaton
457
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
5
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
7
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5307
diff changeset
10 Free Software Foundation; either version 3 of the License, or (at your
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5307
diff changeset
11 option) any later version.
457
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
12
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
16 for more details.
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
17
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5307
diff changeset
19 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5307
diff changeset
20 <http://www.gnu.org/licenses/>.
457
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
21
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
22 */
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
23
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
24 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21273
diff changeset
25 # include "config.h"
457
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
26 #endif
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
27
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
28 #include "svd.h"
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
29
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
30 #include <cassert>
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
31 #include <algorithm>
1631
b0b22b6ce22f [project @ 1995-11-14 20:24:15 by jwe]
jwe
parents: 1545
diff changeset
32
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
33 #include "CMatrix.h"
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
34 #include "dDiagMatrix.h"
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
35 #include "fDiagMatrix.h"
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
36 #include "dMatrix.h"
1847
2ffe49eb95a5 [project @ 1996-02-03 12:47:55 by jwe]
jwe
parents: 1631
diff changeset
37 #include "f77-fcn.h"
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
38 #include "fCMatrix.h"
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
39 #include "fMatrix.h"
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
40 #include "lo-error.h"
10601
3ce0c530a9c9 implement svd_driver
Jaroslav Hajek <highegg@gmail.com>
parents: 10350
diff changeset
41 #include "oct-locbuf.h"
457
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
42
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
43 extern "C"
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
44 {
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4192
diff changeset
45 F77_RET_T
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4192
diff changeset
46 F77_FUNC (dgesvd, DGESVD) (F77_CONST_CHAR_ARG_DECL,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10258
diff changeset
47 F77_CONST_CHAR_ARG_DECL,
22133
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
48 const F77_INT&, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
49 F77_DBLE*, const F77_INT&, F77_DBLE*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
50 F77_DBLE*, const F77_INT&, F77_DBLE*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
51 const F77_INT&, F77_DBLE*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
52 const F77_INT&, F77_INT&
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10258
diff changeset
53 F77_CHAR_ARG_LEN_DECL
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10258
diff changeset
54 F77_CHAR_ARG_LEN_DECL);
10601
3ce0c530a9c9 implement svd_driver
Jaroslav Hajek <highegg@gmail.com>
parents: 10350
diff changeset
55
3ce0c530a9c9 implement svd_driver
Jaroslav Hajek <highegg@gmail.com>
parents: 10350
diff changeset
56 F77_RET_T
3ce0c530a9c9 implement svd_driver
Jaroslav Hajek <highegg@gmail.com>
parents: 10350
diff changeset
57 F77_FUNC (dgesdd, DGESDD) (F77_CONST_CHAR_ARG_DECL,
22133
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
58 const F77_INT&, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
59 F77_DBLE*, const F77_INT&, F77_DBLE*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
60 F77_DBLE*, const F77_INT&, F77_DBLE*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
61 const F77_INT&, F77_DBLE*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
62 const F77_INT&, F77_INT *,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
63 F77_INT&
10601
3ce0c530a9c9 implement svd_driver
Jaroslav Hajek <highegg@gmail.com>
parents: 10350
diff changeset
64 F77_CHAR_ARG_LEN_DECL);
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
65
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
66 F77_RET_T
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
67 F77_FUNC (sgesvd, SGESVD) (F77_CONST_CHAR_ARG_DECL,
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
68 F77_CONST_CHAR_ARG_DECL,
22133
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
69 const F77_INT&, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
70 F77_REAL*, const F77_INT&, F77_REAL*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
71 F77_REAL*, const F77_INT&, F77_REAL*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
72 const F77_INT&, F77_REAL*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
73 const F77_INT&, F77_INT&
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
74 F77_CHAR_ARG_LEN_DECL
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
75 F77_CHAR_ARG_LEN_DECL);
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
76
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
77 F77_RET_T
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
78 F77_FUNC (sgesdd, SGESDD) (F77_CONST_CHAR_ARG_DECL,
22133
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
79 const F77_INT&, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
80 F77_REAL*, const F77_INT&, F77_REAL*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
81 F77_REAL*, const F77_INT&, F77_REAL*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
82 const F77_INT&, F77_REAL*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
83 const F77_INT&, F77_INT *,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
84 F77_INT&
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
85 F77_CHAR_ARG_LEN_DECL);
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
86
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
87 F77_RET_T
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
88 F77_FUNC (zgesvd, ZGESVD) (F77_CONST_CHAR_ARG_DECL,
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
89 F77_CONST_CHAR_ARG_DECL,
22133
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
90 const F77_INT&, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
91 F77_DBLE_CMPLX*, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
92 F77_DBLE*, F77_DBLE_CMPLX*, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
93 F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
94 const F77_INT&, F77_DBLE*, F77_INT&
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
95 F77_CHAR_ARG_LEN_DECL
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
96 F77_CHAR_ARG_LEN_DECL);
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
97
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
98 F77_RET_T
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
99 F77_FUNC (zgesdd, ZGESDD) (F77_CONST_CHAR_ARG_DECL,
22133
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
100 const F77_INT&, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
101 F77_DBLE_CMPLX*, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
102 F77_DBLE*, F77_DBLE_CMPLX*, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
103 F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
104 const F77_INT&, F77_DBLE*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
105 F77_INT *, F77_INT&
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
106 F77_CHAR_ARG_LEN_DECL);
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
107 F77_RET_T
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
108 F77_FUNC (cgesvd, CGESVD) (F77_CONST_CHAR_ARG_DECL,
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
109 F77_CONST_CHAR_ARG_DECL,
22133
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
110 const F77_INT&, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
111 F77_CMPLX*, const F77_INT&, F77_REAL*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
112 F77_CMPLX*, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
113 F77_CMPLX*, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
114 F77_CMPLX*, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
115 F77_REAL*, F77_INT&
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
116 F77_CHAR_ARG_LEN_DECL
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
117 F77_CHAR_ARG_LEN_DECL);
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
118
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
119 F77_RET_T
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
120 F77_FUNC (cgesdd, CGESDD) (F77_CONST_CHAR_ARG_DECL,
22133
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
121 const F77_INT&, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
122 F77_CMPLX*, const F77_INT&, F77_REAL*,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
123 F77_CMPLX*, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
124 F77_CMPLX*, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
125 F77_CMPLX*, const F77_INT&,
59cadee1c74b new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
126 F77_REAL*, F77_INT *, F77_INT&
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
127 F77_CHAR_ARG_LEN_DECL);
457
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
128 }
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
129
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
130 template <typename T>
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
131 T
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
132 svd<T>::left_singular_matrix (void) const
1543
d6e96e0bc681 [project @ 1995-10-06 05:49:21 by jwe]
jwe
parents: 1368
diff changeset
133 {
22228
4afe3705ea75 svd: do not shadow member variables with local variables.
Carnë Draug <carandraug@octave.org>
parents: 22204
diff changeset
134 if (m_type == svd::Type::sigma_only)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 19697
diff changeset
135 (*current_liboctave_error_handler)
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
136 ("svd: U not computed because type == svd::sigma_only");
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 19697
diff changeset
137
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 19697
diff changeset
138 return left_sm;
1543
d6e96e0bc681 [project @ 1995-10-06 05:49:21 by jwe]
jwe
parents: 1368
diff changeset
139 }
d6e96e0bc681 [project @ 1995-10-06 05:49:21 by jwe]
jwe
parents: 1368
diff changeset
140
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
141 template <typename T>
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
142 T
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
143 svd<T>::right_singular_matrix (void) const
1543
d6e96e0bc681 [project @ 1995-10-06 05:49:21 by jwe]
jwe
parents: 1368
diff changeset
144 {
22228
4afe3705ea75 svd: do not shadow member variables with local variables.
Carnë Draug <carandraug@octave.org>
parents: 22204
diff changeset
145 if (m_type == svd::Type::sigma_only)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 19697
diff changeset
146 (*current_liboctave_error_handler)
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
147 ("svd: V not computed because type == svd::sigma_only");
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 19697
diff changeset
148
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 19697
diff changeset
149 return right_sm;
1543
d6e96e0bc681 [project @ 1995-10-06 05:49:21 by jwe]
jwe
parents: 1368
diff changeset
150 }
d6e96e0bc681 [project @ 1995-10-06 05:49:21 by jwe]
jwe
parents: 1368
diff changeset
151
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
152
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
153 // GESVD specializations
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
154
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
155 #define GESVD_REAL_STEP(f, F) \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
156 F77_XFCN (f, F, (F77_CONST_CHAR_ARG2 (&jobu, 1), \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
157 F77_CONST_CHAR_ARG2 (&jobv, 1), \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
158 m, n, tmp_data, m1, s_vec, u, m1, vt, \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
159 nrow_vt1, work.fortran_vec (), lwork, info \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
160 F77_CHAR_ARG_LEN (1) \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
161 F77_CHAR_ARG_LEN (1)))
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
162
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
163 #define GESVD_COMPLEX_STEP(f, F, CMPLX_ARG) \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
164 F77_XFCN (f, F, (F77_CONST_CHAR_ARG2 (&jobu, 1), \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
165 F77_CONST_CHAR_ARG2 (&jobv, 1), \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
166 m, n, CMPLX_ARG (tmp_data), \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
167 m1, s_vec, CMPLX_ARG (u), m1, \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
168 CMPLX_ARG (vt), nrow_vt1, \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
169 CMPLX_ARG (work.fortran_vec ()), \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
170 lwork, rwork.fortran_vec (), info \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
171 F77_CHAR_ARG_LEN (1) \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
172 F77_CHAR_ARG_LEN (1)))
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
173
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
174 // DGESVD
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
175 template<>
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
176 void
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
177 svd<Matrix>::gesvd (char& jobu, char& jobv, octave_idx_type m,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
178 octave_idx_type n, double* tmp_data, octave_idx_type m1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
179 double* s_vec, double* u, double* vt,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
180 octave_idx_type nrow_vt1, Matrix& work,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
181 octave_idx_type& lwork, octave_idx_type& info)
457
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
182 {
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
183 GESVD_REAL_STEP (dgesvd, DGESVD);
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
184
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
185 lwork = static_cast<octave_idx_type> (work(0));
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
186 work.resize (lwork, 1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
187
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
188 GESVD_REAL_STEP (dgesvd, DGESVD);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
189 }
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
190
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
191 // SGESVD
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
192 template<>
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
193 void
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
194 svd<FloatMatrix>::gesvd (char& jobu, char& jobv, octave_idx_type m,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
195 octave_idx_type n, float* tmp_data,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
196 octave_idx_type m1, float* s_vec, float* u, float* vt,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
197 octave_idx_type nrow_vt1, FloatMatrix& work,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
198 octave_idx_type& lwork, octave_idx_type& info)
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
199 {
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
200 GESVD_REAL_STEP (sgesvd, SGESVD);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
201
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
202 lwork = static_cast<octave_idx_type> (work(0));
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
203 work.resize (lwork, 1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
205 GESVD_REAL_STEP (sgesvd, SGESVD);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
206 }
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
207
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
208 // ZGESVD
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
209 template<>
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
210 void
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
211 svd<ComplexMatrix>::gesvd (char& jobu, char& jobv, octave_idx_type m,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
212 octave_idx_type n, Complex* tmp_data,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
213 octave_idx_type m1, double* s_vec, Complex* u,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
214 Complex* vt, octave_idx_type nrow_vt1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
215 ComplexMatrix& work,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
216 octave_idx_type& lwork, octave_idx_type& info)
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
217 {
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
218 Matrix rwork (5 * std::max (m, n), 1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
219
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
220 GESVD_COMPLEX_STEP (zgesvd, ZGESVD, F77_DBLE_CMPLX_ARG);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
221
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
222 lwork = static_cast<octave_idx_type> (work(0).real ());
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
223 work.resize (lwork, 1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
224
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
225 GESVD_COMPLEX_STEP (zgesvd, ZGESVD, F77_DBLE_CMPLX_ARG);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
226 }
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
227
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
228 // CGESVD
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
229 template<>
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
230 void
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
231 svd<FloatComplexMatrix>::gesvd (char& jobu, char& jobv,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
232 octave_idx_type m, octave_idx_type n,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
233 FloatComplex* tmp_data, octave_idx_type m1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
234 float* s_vec, FloatComplex* u,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
235 FloatComplex* vt, octave_idx_type nrow_vt1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
236 FloatComplexMatrix& work,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
237 octave_idx_type& lwork, octave_idx_type& info)
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
238 {
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
239 FloatMatrix rwork (5 * std::max (m, n), 1);
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
240
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
241 GESVD_COMPLEX_STEP (cgesvd, CGESVD, F77_CMPLX_ARG);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
242
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
243 lwork = static_cast<octave_idx_type> (work(0).real ());
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
244 work.resize (lwork, 1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
245
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
246 GESVD_COMPLEX_STEP (cgesvd, CGESVD, F77_CMPLX_ARG);
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
247 }
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
248
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
249 #undef GESVD_REAL_STEP
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
250 #undef GESVD_COMPLEX_STEP
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
251
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
252
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
253 // GESDD specializations
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
254
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
255 #define GESDD_REAL_STEP(f, F) \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
256 F77_XFCN (f, F, (F77_CONST_CHAR_ARG2 (&jobz, 1), \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
257 m, n, tmp_data, m1, s_vec, u, m1, vt, nrow_vt1, \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
258 work.fortran_vec (), lwork, iwork, info \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
259 F77_CHAR_ARG_LEN (1)))
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
260
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
261 #define GESDD_COMPLEX_STEP(f, F, CMPLX_ARG) \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
262 F77_XFCN (f, F, (F77_CONST_CHAR_ARG2 (&jobz, 1), m, n, \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
263 CMPLX_ARG (tmp_data), m1, \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
264 s_vec, CMPLX_ARG (u), m1, \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
265 CMPLX_ARG (vt), nrow_vt1, \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
266 CMPLX_ARG (work.fortran_vec ()), lwork, \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
267 rwork.fortran_vec (), iwork, info \
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
268 F77_CHAR_ARG_LEN (1)))
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
269
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
270 // DGESDD
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
271 template<>
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
272 void
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
273 svd<Matrix>::gesdd (char& jobz, octave_idx_type m, octave_idx_type n,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
274 double* tmp_data, octave_idx_type m1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
275 double* s_vec, double* u,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
276 double* vt, octave_idx_type nrow_vt1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
277 Matrix& work, octave_idx_type& lwork,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
278 octave_idx_type* iwork, octave_idx_type& info)
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
279 {
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
280 GESDD_REAL_STEP (dgesdd, DGESDD);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
281
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
282 lwork = static_cast<octave_idx_type> (work(0));
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
283 work.resize (lwork, 1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
284
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
285 GESDD_REAL_STEP (dgesdd, DGESDD);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
286 }
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
287
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
288 // SGESDD
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
289 template<>
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
290 void
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
291 svd<FloatMatrix>::gesdd (char& jobz, octave_idx_type m, octave_idx_type n,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
292 float* tmp_data, octave_idx_type m1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
293 float* s_vec, float* u,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
294 float* vt, octave_idx_type nrow_vt1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
295 FloatMatrix& work, octave_idx_type& lwork,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
296 octave_idx_type* iwork, octave_idx_type& info)
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
297 {
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
298 GESDD_REAL_STEP (sgesdd, SGESDD);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
299
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
300 lwork = static_cast<octave_idx_type> (work(0));
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
301 work.resize (lwork, 1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
302
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
303 GESDD_REAL_STEP (sgesdd, SGESDD);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
304 }
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
305
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
306 // ZGESDD
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
307 template<>
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
308 void
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
309 svd<ComplexMatrix>::gesdd (char& jobz, octave_idx_type m, octave_idx_type n,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
310 Complex* tmp_data, octave_idx_type m1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
311 double* s_vec, Complex* u,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
312 Complex* vt, octave_idx_type nrow_vt1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
313 ComplexMatrix& work, octave_idx_type& lwork,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
314 octave_idx_type* iwork, octave_idx_type& info)
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
315 {
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
316
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
317 octave_idx_type min_mn = std::min (m, n);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
318
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
319 octave_idx_type lrwork;
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
320 if (jobz == 'N')
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
321 lrwork = 7*min_mn;
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
322 else
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
323 lrwork = 5*min_mn*min_mn + 5*min_mn;
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
324 Matrix rwork (lrwork, 1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
325
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
326
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
327 GESDD_COMPLEX_STEP (zgesdd, ZGESDD, F77_DBLE_CMPLX_ARG);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
328
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
329 lwork = static_cast<octave_idx_type> (work(0).real ());
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
330 work.resize (lwork, 1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
331
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
332 GESDD_COMPLEX_STEP (zgesdd, ZGESDD, F77_DBLE_CMPLX_ARG);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
333 }
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
334
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
335 // CGESDD
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
336 template<>
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
337 void
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
338 svd<FloatComplexMatrix>::gesdd (char& jobz, octave_idx_type m,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
339 octave_idx_type n,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
340 FloatComplex* tmp_data, octave_idx_type m1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
341 float* s_vec, FloatComplex* u,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
342 FloatComplex* vt, octave_idx_type nrow_vt1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
343 FloatComplexMatrix& work,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
344 octave_idx_type& lwork, octave_idx_type* iwork,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
345 octave_idx_type& info)
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
346 {
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
347 octave_idx_type min_mn = std::min (m, n);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
348 octave_idx_type max_mn = std::max (m, n);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
349
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
350 octave_idx_type lrwork;
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
351 if (jobz == 'N')
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
352 lrwork = 5*min_mn;
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
353 else
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
354 lrwork = min_mn * std::max (5*min_mn+7, 2*max_mn+2*min_mn+1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
355 FloatMatrix rwork (lrwork, 1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
356
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
357 GESDD_COMPLEX_STEP (cgesdd, CGESDD, F77_CMPLX_ARG);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
358
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
359 lwork = static_cast<octave_idx_type> (work(0).real ());
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
360 work.resize (lwork, 1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
361
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
362 GESDD_COMPLEX_STEP (cgesdd, CGESDD, F77_CMPLX_ARG);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
363 }
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
364
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
365 #undef GESDD_REAL_STEP
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
366 #undef GESDD_COMPLEX_STEP
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
367
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
368
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
369 template<typename T>
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
370 svd<T>::svd (const T& a, svd::Type type,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
371 svd::Driver driver)
22228
4afe3705ea75 svd: do not shadow member variables with local variables.
Carnë Draug <carandraug@octave.org>
parents: 22204
diff changeset
372 : m_type (type), m_driver (driver), left_sm (), sigma (), right_sm ()
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
373 {
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
374 octave_idx_type info;
457
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
375
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
376 octave_idx_type m = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
377 octave_idx_type n = a.cols ();
457
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
378
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
379 if (m == 0 || n == 0)
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
380 {
22228
4afe3705ea75 svd: do not shadow member variables with local variables.
Carnë Draug <carandraug@octave.org>
parents: 22204
diff changeset
381 switch (m_type)
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
382 {
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
383 case svd::Type::std:
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
384 left_sm = T (m, m, 0);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
385 for (octave_idx_type i = 0; i < m; i++)
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
386 left_sm.xelem (i, i) = 1;
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
387 sigma = DM_T (m, n);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
388 right_sm = T (n, n, 0);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
389 for (octave_idx_type i = 0; i < n; i++)
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
390 right_sm.xelem (i, i) = 1;
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
391 break;
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
392
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
393 case svd::Type::economy:
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
394 left_sm = T (m, 0, 0);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
395 sigma = DM_T (0, 0);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
396 right_sm = T (0, n, 0);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
397 break;
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
398
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
399 case svd::Type::sigma_only:
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
400 default:
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
401 sigma = DM_T (0, 1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
402 break;
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
403 }
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
404 return;
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
405 }
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
406
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
407 T atmp = a;
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
408 P* tmp_data = atmp.fortran_vec ();
457
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
409
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
410 octave_idx_type min_mn = m < n ? m : n;
457
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
411
1930
d20ab06301e8 [project @ 1996-02-11 22:30:18 by jwe]
jwe
parents: 1882
diff changeset
412 char jobu = 'A';
d20ab06301e8 [project @ 1996-02-11 22:30:18 by jwe]
jwe
parents: 1882
diff changeset
413 char jobv = 'A';
537
4ecbfd3c3710 [project @ 1994-07-21 22:30:34 by jwe]
jwe
parents: 457
diff changeset
414
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
415 octave_idx_type ncol_u = m;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
416 octave_idx_type nrow_vt = n;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
417 octave_idx_type nrow_s = m;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
418 octave_idx_type ncol_s = n;
537
4ecbfd3c3710 [project @ 1994-07-21 22:30:34 by jwe]
jwe
parents: 457
diff changeset
419
22228
4afe3705ea75 svd: do not shadow member variables with local variables.
Carnë Draug <carandraug@octave.org>
parents: 22204
diff changeset
420 switch (m_type)
537
4ecbfd3c3710 [project @ 1994-07-21 22:30:34 by jwe]
jwe
parents: 457
diff changeset
421 {
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
422 case svd::Type::economy:
1930
d20ab06301e8 [project @ 1996-02-11 22:30:18 by jwe]
jwe
parents: 1882
diff changeset
423 jobu = jobv = 'S';
537
4ecbfd3c3710 [project @ 1994-07-21 22:30:34 by jwe]
jwe
parents: 457
diff changeset
424 ncol_u = nrow_vt = nrow_s = ncol_s = min_mn;
1543
d6e96e0bc681 [project @ 1995-10-06 05:49:21 by jwe]
jwe
parents: 1368
diff changeset
425 break;
d6e96e0bc681 [project @ 1995-10-06 05:49:21 by jwe]
jwe
parents: 1368
diff changeset
426
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
427 case svd::Type::sigma_only:
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
428
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
429 // Note: for this case, both jobu and jobv should be 'N', but
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
430 // there seems to be a bug in dgesvd from Lapack V2.0. To
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
431 // demonstrate the bug, set both jobu and jobv to 'N' and find
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
432 // the singular values of [eye(3), eye(3)]. The result is
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
433 // [-sqrt(2), -sqrt(2), -sqrt(2)].
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
434 //
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
435 // For Lapack 3.0, this problem seems to be fixed.
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
436
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
437 jobu = jobv = 'N';
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
438 ncol_u = nrow_vt = 1;
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
439 break;
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
440
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
441 default:
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
442 break;
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
443 }
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
444
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
445 if (! (jobu == 'N' || jobu == 'O'))
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
446 left_sm.resize (m, ncol_u);
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
447
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
448 P* u = left_sm.fortran_vec ();
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
449
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
450 sigma.resize (nrow_s, ncol_s);
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
451 DM_P* s_vec = sigma.fortran_vec ();
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
452
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
453 if (! (jobv == 'N' || jobv == 'O'))
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
454 right_sm.resize (nrow_vt, n);
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
455
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
456 P* vt = right_sm.fortran_vec ();
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
457
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
458 // Query _GESVD for the correct dimension of WORK.
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
459
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
460 octave_idx_type lwork = -1;
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
461
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
462 T work (1, 1);
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
463
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
464 octave_idx_type m1 = std::max (m, 1);
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
465 octave_idx_type nrow_vt1 = std::max (nrow_vt, 1);
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
466
22228
4afe3705ea75 svd: do not shadow member variables with local variables.
Carnë Draug <carandraug@octave.org>
parents: 22204
diff changeset
467 if (m_driver == svd::Driver::GESVD)
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
468 gesvd (jobu, jobv, m, n, tmp_data, m1, s_vec, u, vt, nrow_vt1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
469 work, lwork, info);
22228
4afe3705ea75 svd: do not shadow member variables with local variables.
Carnë Draug <carandraug@octave.org>
parents: 22204
diff changeset
470 else if (m_driver == svd::Driver::GESDD)
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
471 {
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
472 assert (jobu == jobv);
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
473 char jobz = jobu;
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
474
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
475 OCTAVE_LOCAL_BUFFER (octave_idx_type, iwork, 8 * std::min (m, n));
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
476
22204
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
477 gesdd (jobz, m, n, tmp_data, m1, s_vec, u, vt, nrow_vt1,
469c817eb256 svd: reduce code duplication with more use of template and macro.
Carnë Draug <carandraug@octave.org>
parents: 22135
diff changeset
478 work, lwork, iwork, info);
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
479 }
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
480 else
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
481 abort ();
3336
08ad797989f8 [project @ 1999-11-03 21:41:34 by jwe]
jwe
parents: 3335
diff changeset
482
7482
29980c6b8604 don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
483 if (! (jobv == 'N' || jobv == 'O'))
29980c6b8604 don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
484 right_sm = right_sm.transpose ();
457
3d4b4f0fa5ba [project @ 1994-06-06 00:33:33 by jwe]
jwe
parents:
diff changeset
485 }
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
486
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
487 // Instantiations we need.
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
488
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
489 template class svd<Matrix>;
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
490
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
491 template class svd<FloatMatrix>;
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
492
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
493 template class svd<ComplexMatrix>;
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
494
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
495 template class svd<FloatComplexMatrix>;