Mercurial > octave
annotate liboctave/numeric/gsvd.cc @ 27919:1891570abac8
update Octave Project Developers copyright for the new year
In files that have the "Octave Project Developers" copyright notice,
update for 2020.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 06 Jan 2020 22:29:51 -0500 |
parents | b442ec6dda5c |
children | bd51beb6205e |
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 |
27919
1891570abac8
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
27918
diff
changeset
|
3 Copyright (C) 1997-2020 The Octave Project Developers |
27918
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
4 |
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
5 See the file COPYRIGHT.md in the top-level directory of this distribution |
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
6 or <https://octave.org/COPYRIGHT.html/>. |
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
7 |
22755
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 This file is part of Octave. |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
10 |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24520
diff
changeset
|
11 Octave is free software: you can redistribute it and/or modify it |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
12 under the terms of the GNU General Public License as published by |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24520
diff
changeset
|
13 the Free Software Foundation, either version 3 of the License, or |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
14 (at your option) any later version. |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
15 |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
16 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
|
17 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
19 GNU General Public License for more details. |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
20 |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
21 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
|
22 along with Octave; see the file COPYING. If not, see |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24520
diff
changeset
|
23 <https://www.gnu.org/licenses/>. |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
24 |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22437
diff
changeset
|
25 */ |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
26 |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
27 #ifdef HAVE_CONFIG_H |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
28 # include <config.h> |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
29 #endif |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
30 |
22436
09005ac7d56c
gsvd<T>: add class template support for FloatMatrix and FloatComplexMatrix.
Carnë Draug <carandraug@octave.org>
parents:
22402
diff
changeset
|
31 #include <vector> |
09005ac7d56c
gsvd<T>: add class template support for FloatMatrix and FloatComplexMatrix.
Carnë Draug <carandraug@octave.org>
parents:
22402
diff
changeset
|
32 |
23475
d691ed308237
maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
33 #include "CMatrix.h" |
d691ed308237
maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
34 #include "dDiagMatrix.h" |
d691ed308237
maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
35 #include "dMatrix.h" |
d691ed308237
maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
36 #include "fCMatrix.h" |
d691ed308237
maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
37 #include "fDiagMatrix.h" |
d691ed308237
maint: Clean up #includes in liboctave/numeric directory.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
38 #include "fMatrix.h" |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
39 #include "gsvd.h" |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
40 #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
|
41 #include "lo-lapack-proto.h" |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
42 #include "oct-shlib.h" |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
43 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
44 namespace octave |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
45 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
46 static std::map<std::string, void *> gsvd_fcn; |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
47 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
48 static bool have_DGGSVD3 = false; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
49 static bool gsvd_initialized = false; |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
50 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
51 /* Hack to stringize macro results. */ |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
52 #define xSTRINGIZE(x) #x |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
53 #define STRINGIZE(x) xSTRINGIZE(x) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
54 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
55 static void initialize_gsvd (void) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
56 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
57 if (gsvd_initialized) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
58 return; |
24677
69b89e81d3d3
Fix unloading dynamic libraries (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24653
diff
changeset
|
59 |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27101
diff
changeset
|
60 dynamic_library libs (""); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
61 if (! libs) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
62 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
63 // FIXME: Should we throw an error if we cannot check the libraries? |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
64 have_DGGSVD3 = false; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
65 return; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
66 } |
24677
69b89e81d3d3
Fix unloading dynamic libraries (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24653
diff
changeset
|
67 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
68 have_DGGSVD3 = (libs.search (STRINGIZE (F77_FUNC (dggsvd3, DGGSVD3))) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
69 != nullptr); |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
70 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
71 if (have_DGGSVD3) |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
72 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
73 gsvd_fcn["dg"] = libs.search (STRINGIZE (F77_FUNC (dggsvd3, DGGSVD3))); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
74 gsvd_fcn["sg"] = libs.search (STRINGIZE (F77_FUNC (sggsvd3, SGGSVD3))); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
75 gsvd_fcn["zg"] = libs.search (STRINGIZE (F77_FUNC (zggsvd3, ZGGSVD3))); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
76 gsvd_fcn["cg"] = libs.search (STRINGIZE (F77_FUNC (cggsvd3, CGGSVD3))); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
77 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
78 else |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
79 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
80 gsvd_fcn["dg"] = libs.search (STRINGIZE (F77_FUNC (dggsvd, DGGSVD))); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
81 gsvd_fcn["sg"] = libs.search (STRINGIZE (F77_FUNC (sggsvd, SGGSVD))); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
82 gsvd_fcn["zg"] = libs.search (STRINGIZE (F77_FUNC (zggsvd, ZGGSVD))); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
83 gsvd_fcn["cg"] = libs.search (STRINGIZE (F77_FUNC (cggsvd, CGGSVD))); |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
84 } |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
85 gsvd_initialized = true; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
86 } |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
87 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
88 template<class T1> |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
89 struct real_ggsvd_ptr |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
90 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
91 typedef F77_RET_T (*type) |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
92 (F77_CONST_CHAR_ARG_DECL, // JOBU |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
93 F77_CONST_CHAR_ARG_DECL, // JOBV |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
94 F77_CONST_CHAR_ARG_DECL, // JOBQ |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
95 const F77_INT&, // M |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
96 const F77_INT&, // N |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
97 const F77_INT&, // P |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
98 F77_INT &, // K |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
99 F77_INT &, // L |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
100 T1*, // A(LDA,N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
101 const F77_INT&, // LDA |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
102 T1*, // B(LDB,N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
103 const F77_INT&, // LDB |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
104 T1*, // ALPHA(N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
105 T1*, // BETA(N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
106 T1*, // U(LDU,M) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
107 const F77_INT&, // LDU |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
108 T1*, // V(LDV,P) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
109 const F77_INT&, // LDV |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
110 T1*, // Q(LDQ,N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
111 const F77_INT&, // LDQ |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
112 T1*, // WORK |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
113 F77_INT*, // IWORK(N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
114 F77_INT& // INFO |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
115 F77_CHAR_ARG_LEN_DECL |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
116 F77_CHAR_ARG_LEN_DECL |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
117 F77_CHAR_ARG_LEN_DECL); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
118 }; |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
119 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
120 template<class T1> |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
121 struct real_ggsvd3_ptr |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
122 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
123 typedef F77_RET_T (*type) |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
124 (F77_CONST_CHAR_ARG_DECL, // JOBU |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
125 F77_CONST_CHAR_ARG_DECL, // JOBV |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
126 F77_CONST_CHAR_ARG_DECL, // JOBQ |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
127 const F77_INT&, // M |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
128 const F77_INT&, // N |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
129 const F77_INT&, // P |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
130 F77_INT &, // K |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
131 F77_INT &, // L |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
132 T1*, // A(LDA,N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
133 const F77_INT&, // LDA |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
134 T1*, // B(LDB,N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
135 const F77_INT&, // LDB |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
136 T1*, // ALPHA(N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
137 T1*, // BETA(N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
138 T1*, // U(LDU,M) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
139 const F77_INT&, // LDU |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
140 T1*, // V(LDV,P) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
141 const F77_INT&, // LDV |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
142 T1*, // Q(LDQ,N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
143 const F77_INT&, // LDQ |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
144 T1*, // WORK |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
145 const F77_INT&, // LWORK |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
146 F77_INT*, // IWORK(N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
147 F77_INT& // INFO |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
148 F77_CHAR_ARG_LEN_DECL |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
149 F77_CHAR_ARG_LEN_DECL |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
150 F77_CHAR_ARG_LEN_DECL); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
151 }; |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
152 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
153 template<class T1, class T2> |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
154 struct comp_ggsvd_ptr |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
155 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
156 typedef F77_RET_T (*type) |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
157 (F77_CONST_CHAR_ARG_DECL, // JOBU |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
158 F77_CONST_CHAR_ARG_DECL, // JOBV |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
159 F77_CONST_CHAR_ARG_DECL, // JOBQ |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
160 const F77_INT&, // M |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
161 const F77_INT&, // N |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
162 const F77_INT&, // P |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
163 F77_INT &, // K |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
164 F77_INT &, // L |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
165 T1*, // A(LDA,N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
166 const F77_INT&, // LDA |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
167 T1*, // B(LDB,N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
168 const F77_INT&, // LDB |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
169 T2*, // ALPHA(N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
170 T2*, // BETA(N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
171 T1*, // U(LDU,M) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
172 const F77_INT&, // LDU |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
173 T1*, // V(LDV,P) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
174 const F77_INT&, // LDV |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
175 T1*, // Q(LDQ,N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
176 const F77_INT&, // LDQ |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
177 T1*, // WORK |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
178 T2*, // RWORK |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
179 F77_INT*, // IWORK(N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
180 F77_INT& // INFO |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
181 F77_CHAR_ARG_LEN_DECL |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
182 F77_CHAR_ARG_LEN_DECL |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
183 F77_CHAR_ARG_LEN_DECL); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
184 }; |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
185 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
186 template<class T1, class T2> |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
187 struct comp_ggsvd3_ptr |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
188 { |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
189 typedef F77_RET_T (*type) |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
190 (F77_CONST_CHAR_ARG_DECL, // JOBU |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
191 F77_CONST_CHAR_ARG_DECL, // JOBV |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
192 F77_CONST_CHAR_ARG_DECL, // JOBQ |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
193 const F77_INT&, // M |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
194 const F77_INT&, // N |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
195 const F77_INT&, // P |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
196 F77_INT &, // K |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
197 F77_INT &, // L |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
198 T1*, // A(LDA,N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
199 const F77_INT&, // LDA |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
200 T1*, // B(LDB,N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
201 const F77_INT&, // LDB |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
202 T2*, // ALPHA(N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
203 T2*, // BETA(N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
204 T1*, // U(LDU,M) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
205 const F77_INT&, // LDU |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
206 T1*, // V(LDV,P) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
207 const F77_INT&, // LDV |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
208 T1*, // Q(LDQ,N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
209 const F77_INT&, // LDQ |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
210 T1*, // WORK |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
211 const F77_INT&, // LWORK |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
212 T2*, // RWORK |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
213 F77_INT*, // IWORK(N) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
214 F77_INT& // INFO |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
215 F77_CHAR_ARG_LEN_DECL |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
216 F77_CHAR_ARG_LEN_DECL |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
217 F77_CHAR_ARG_LEN_DECL); |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
218 }; |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
219 |
27101
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
220 // template specializations |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
221 typedef real_ggsvd3_ptr<F77_DBLE>::type dggsvd3_type; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
222 typedef real_ggsvd_ptr<F77_DBLE>::type dggsvd_type; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
223 typedef real_ggsvd3_ptr<F77_REAL>::type sggsvd3_type; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
224 typedef real_ggsvd_ptr<F77_REAL>::type sggsvd_type; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
225 typedef comp_ggsvd3_ptr<F77_DBLE_CMPLX, F77_DBLE>::type zggsvd3_type; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
226 typedef comp_ggsvd_ptr<F77_DBLE_CMPLX, F77_DBLE>::type zggsvd_type; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
227 typedef comp_ggsvd3_ptr<F77_CMPLX, F77_REAL>::type cggsvd3_type; |
097774bed4ed
move some static functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
228 typedef comp_ggsvd_ptr<F77_CMPLX, F77_REAL>::type cggsvd_type; |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
229 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
230 namespace math |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
231 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
232 template <> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
233 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
|
234 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
|
235 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
|
236 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
|
237 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
|
238 F77_INT nrow_u, double *v, F77_INT nrow_v, double *q, |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
239 F77_INT nrow_q, Matrix& work, F77_INT lwork, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
240 F77_INT *iwork, F77_INT& info) |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
241 { |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
242 if (! gsvd_initialized) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
243 initialize_gsvd (); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
244 |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
245 if (have_DGGSVD3) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
246 { |
24677
69b89e81d3d3
Fix unloading dynamic libraries (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24653
diff
changeset
|
247 dggsvd3_type f_ptr = reinterpret_cast<dggsvd3_type> (gsvd_fcn["dg"]); |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
248 f_ptr (F77_CONST_CHAR_ARG2 (&jobu, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
249 F77_CONST_CHAR_ARG2 (&jobv, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
250 F77_CONST_CHAR_ARG2 (&jobq, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
251 m, n, p, k, l, tmp_dataA, m1, tmp_dataB, p1, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
252 alpha.fortran_vec (), beta.fortran_vec (), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
253 u, nrow_u, v, nrow_v, q, nrow_q, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
254 work.fortran_vec (), lwork, iwork, info |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
255 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
256 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
257 F77_CHAR_ARG_LEN (1)); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
258 } |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
259 else |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
260 { |
24677
69b89e81d3d3
Fix unloading dynamic libraries (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24653
diff
changeset
|
261 dggsvd_type f_ptr = reinterpret_cast<dggsvd_type> (gsvd_fcn["dg"]); |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
262 f_ptr (F77_CONST_CHAR_ARG2 (&jobu, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
263 F77_CONST_CHAR_ARG2 (&jobv, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
264 F77_CONST_CHAR_ARG2 (&jobq, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
265 m, n, p, k, l, tmp_dataA, m1, tmp_dataB, p1, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
266 alpha.fortran_vec (), beta.fortran_vec (), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
267 u, nrow_u, v, nrow_v, q, nrow_q, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
268 work.fortran_vec (), iwork, info |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
269 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
270 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
271 F77_CHAR_ARG_LEN (1)); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
272 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
273 } |
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 template <> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
276 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
|
277 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
|
278 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
|
279 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
|
280 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
|
281 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
|
282 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
|
283 F77_INT nrow_q, FloatMatrix& work, |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
284 F77_INT lwork, F77_INT *iwork, F77_INT& info) |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
285 { |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
286 if (! gsvd_initialized) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
287 initialize_gsvd (); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
288 |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
289 if (have_DGGSVD3) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
290 { |
24677
69b89e81d3d3
Fix unloading dynamic libraries (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24653
diff
changeset
|
291 sggsvd3_type f_ptr = reinterpret_cast<sggsvd3_type> (gsvd_fcn["sg"]); |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
292 f_ptr (F77_CONST_CHAR_ARG2 (&jobu, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
293 F77_CONST_CHAR_ARG2 (&jobv, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
294 F77_CONST_CHAR_ARG2 (&jobq, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
295 m, n, p, k, l, tmp_dataA, m1, tmp_dataB, p1, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
296 alpha.fortran_vec (), beta.fortran_vec (), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
297 u, nrow_u, v, nrow_v, q, nrow_q, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
298 work.fortran_vec (), lwork, iwork, info |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
299 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
300 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
301 F77_CHAR_ARG_LEN (1)); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
302 } |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
303 else |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
304 { |
24677
69b89e81d3d3
Fix unloading dynamic libraries (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24653
diff
changeset
|
305 sggsvd_type f_ptr = reinterpret_cast<sggsvd_type> (gsvd_fcn["sg"]); |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
306 f_ptr (F77_CONST_CHAR_ARG2 (&jobu, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
307 F77_CONST_CHAR_ARG2 (&jobv, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
308 F77_CONST_CHAR_ARG2 (&jobq, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
309 m, n, p, k, l, tmp_dataA, m1, tmp_dataB, p1, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
310 alpha.fortran_vec (), beta.fortran_vec (), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
311 u, nrow_u, v, nrow_v, q, nrow_q, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
312 work.fortran_vec (), iwork, info |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
313 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
314 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
315 F77_CHAR_ARG_LEN (1)); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
316 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
317 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
318 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
319 template <> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
320 void |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
321 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
|
322 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
|
323 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
|
324 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
|
325 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
|
326 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
|
327 F77_INT nrow_q, ComplexMatrix& work, |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
328 F77_INT lwork, F77_INT *iwork, F77_INT& info) |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
329 { |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
330 if (! gsvd_initialized) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
331 initialize_gsvd (); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
332 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
333 Matrix rwork(2*n, 1); |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
334 if (have_DGGSVD3) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
335 { |
24677
69b89e81d3d3
Fix unloading dynamic libraries (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24653
diff
changeset
|
336 zggsvd3_type f_ptr = reinterpret_cast<zggsvd3_type> (gsvd_fcn["zg"]); |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
337 f_ptr (F77_CONST_CHAR_ARG2 (&jobu, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
338 F77_CONST_CHAR_ARG2 (&jobv, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
339 F77_CONST_CHAR_ARG2 (&jobq, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
340 m, n, p, k, l, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
341 F77_DBLE_CMPLX_ARG (tmp_dataA), m1, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
342 F77_DBLE_CMPLX_ARG (tmp_dataB), p1, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
343 alpha.fortran_vec (), beta.fortran_vec (), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
344 F77_DBLE_CMPLX_ARG (u), nrow_u, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
345 F77_DBLE_CMPLX_ARG (v), nrow_v, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
346 F77_DBLE_CMPLX_ARG (q), nrow_q, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
347 F77_DBLE_CMPLX_ARG (work.fortran_vec ()), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
348 lwork, rwork.fortran_vec (), iwork, info |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
349 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
350 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
351 F77_CHAR_ARG_LEN (1)); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
352 } |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
353 else |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
354 { |
24677
69b89e81d3d3
Fix unloading dynamic libraries (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24653
diff
changeset
|
355 zggsvd_type f_ptr = reinterpret_cast<zggsvd_type> (gsvd_fcn["zg"]); |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
356 f_ptr (F77_CONST_CHAR_ARG2 (&jobu, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
357 F77_CONST_CHAR_ARG2 (&jobv, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
358 F77_CONST_CHAR_ARG2 (&jobq, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
359 m, n, p, k, l, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
360 F77_DBLE_CMPLX_ARG (tmp_dataA), m1, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
361 F77_DBLE_CMPLX_ARG (tmp_dataB), p1, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
362 alpha.fortran_vec (), beta.fortran_vec (), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
363 F77_DBLE_CMPLX_ARG (u), nrow_u, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
364 F77_DBLE_CMPLX_ARG (v), nrow_v, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
365 F77_DBLE_CMPLX_ARG (q), nrow_q, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
366 F77_DBLE_CMPLX_ARG (work.fortran_vec ()), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
367 rwork.fortran_vec (), iwork, info |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
368 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
369 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
370 F77_CHAR_ARG_LEN (1)); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
371 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
372 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
373 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
374 template <> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
375 void |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
376 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
|
377 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
|
378 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
|
379 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
|
380 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
|
381 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
|
382 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
|
383 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
|
384 FloatComplex *q, F77_INT nrow_q, |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
385 FloatComplexMatrix& work, F77_INT lwork, |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23221
diff
changeset
|
386 F77_INT *iwork, F77_INT& info) |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
387 { |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
388 if (! gsvd_initialized) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
389 initialize_gsvd (); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
390 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
391 FloatMatrix rwork(2*n, 1); |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
392 if (have_DGGSVD3) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
393 { |
24677
69b89e81d3d3
Fix unloading dynamic libraries (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24653
diff
changeset
|
394 cggsvd3_type f_ptr = reinterpret_cast<cggsvd3_type> (gsvd_fcn["cg"]); |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
395 f_ptr (F77_CONST_CHAR_ARG2 (&jobu, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
396 F77_CONST_CHAR_ARG2 (&jobv, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
397 F77_CONST_CHAR_ARG2 (&jobq, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
398 m, n, p, k, l, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
399 F77_CMPLX_ARG (tmp_dataA), m1, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
400 F77_CMPLX_ARG (tmp_dataB), p1, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
401 alpha.fortran_vec (), beta.fortran_vec (), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
402 F77_CMPLX_ARG (u), nrow_u, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
403 F77_CMPLX_ARG (v), nrow_v, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
404 F77_CMPLX_ARG (q), nrow_q, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
405 F77_CMPLX_ARG (work.fortran_vec ()), lwork, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
406 rwork.fortran_vec (), iwork, info |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
407 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
408 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
409 F77_CHAR_ARG_LEN (1)); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
410 } |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
411 else |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
412 { |
24677
69b89e81d3d3
Fix unloading dynamic libraries (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24653
diff
changeset
|
413 cggsvd_type f_ptr = reinterpret_cast<cggsvd_type> (gsvd_fcn["cg"]); |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
414 f_ptr (F77_CONST_CHAR_ARG2 (&jobu, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
415 F77_CONST_CHAR_ARG2 (&jobv, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
416 F77_CONST_CHAR_ARG2 (&jobq, 1), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
417 m, n, p, k, l, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
418 F77_CMPLX_ARG (tmp_dataA), m1, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
419 F77_CMPLX_ARG (tmp_dataB), p1, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
420 alpha.fortran_vec (), beta.fortran_vec (), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
421 F77_CMPLX_ARG (u), nrow_u, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
422 F77_CMPLX_ARG (v), nrow_v, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
423 F77_CMPLX_ARG (q), nrow_q, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
424 F77_CMPLX_ARG (work.fortran_vec ()), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
425 rwork.fortran_vec (), iwork, info |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
426 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
427 F77_CHAR_ARG_LEN (1) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
428 F77_CHAR_ARG_LEN (1)); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
429 } |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
430 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
431 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
432 template <typename T> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
433 T |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
434 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
|
435 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
436 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
|
437 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
438 (*current_liboctave_error_handler) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
439 ("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
|
440 return T (); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
441 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
442 else |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
443 return left_smA; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
444 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
445 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
446 template <typename T> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
447 T |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
448 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
|
449 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
450 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
|
451 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
452 (*current_liboctave_error_handler) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
453 ("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
|
454 return T (); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
455 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
456 else |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
457 return left_smB; |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
458 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
459 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
460 template <typename T> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
461 T |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
462 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
|
463 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
464 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
|
465 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
466 (*current_liboctave_error_handler) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
467 ("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
|
468 return T (); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
469 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
470 else |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
471 return right_sm; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
472 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
473 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
474 template <typename T> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
475 T |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
476 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
|
477 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
478 if (type != gsvd::Type::std) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
479 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
480 (*current_liboctave_error_handler) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
481 ("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
|
482 return T (); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
483 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
484 else |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
485 return R; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
486 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
487 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
488 template <typename T> |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
489 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
|
490 { |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
491 F77_INT info; |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
492 |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23475
diff
changeset
|
493 F77_INT m = to_f77_int (a.rows ()); |
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23475
diff
changeset
|
494 F77_INT n = to_f77_int (a.cols ()); |
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23475
diff
changeset
|
495 F77_INT p = 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
|
496 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
497 T atmp = a; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
498 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
|
499 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
500 T btmp = b; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
501 P *tmp_dataB = btmp.fortran_vec (); |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
502 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
503 char jobu = 'U'; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
504 char jobv = 'V'; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
505 char jobq = 'Q'; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
506 |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
507 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
|
508 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
|
509 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
|
510 |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
511 F77_INT k, l; |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
512 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
513 switch (gsvd_type) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
514 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
515 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
|
516 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
517 // 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
|
518 // 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
|
519 // 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
|
520 // 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
|
521 // [-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
|
522 // |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
523 // 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
|
524 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
525 jobu = 'N'; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
526 jobv = 'N'; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
527 jobq = 'N'; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
528 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
|
529 break; |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
530 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
531 default: |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
532 break; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
533 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
534 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
535 type = gsvd_type; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
536 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
537 if (! (jobu == 'N' || jobu == 'O')) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
538 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
|
539 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
540 P *u = left_smA.fortran_vec (); |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
541 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
542 if (! (jobv == 'N' || jobv == 'O')) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
543 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
|
544 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
545 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
|
546 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
547 if (! (jobq == 'N' || jobq == 'O')) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
548 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
|
549 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
550 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
|
551 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
552 real_matrix alpha (n, 1); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
553 real_matrix beta (n, 1); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
554 |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
555 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
|
556 |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
557 if (! gsvd_initialized) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
558 initialize_gsvd (); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
559 |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
560 F77_INT lwork; |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
561 if (have_DGGSVD3) |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
562 { |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
563 lwork = -1; |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
564 T work_tmp (1, 1); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
565 |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
566 gsvd<T>::ggsvd (jobu, jobv, jobq, m, n, p, k, l, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
567 tmp_dataA, m, tmp_dataB, p, alpha, beta, u, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
568 nrow_u, v, nrow_v, q, nrow_q, work_tmp, lwork, |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
569 iwork.data (), info); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
570 |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
571 lwork = static_cast<F77_INT> (std::abs (work_tmp(0, 0))); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
572 } |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
573 else |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
574 { |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
575 lwork = 3*n; |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
576 lwork = (lwork > m ? lwork : m); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
577 lwork = (lwork > p ? lwork : p) + n; |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
578 } |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
579 info = 0; |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
580 |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
581 T work (lwork, 1); |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
582 |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
583 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
|
584 tmp_dataA, m, tmp_dataB, p, alpha, beta, u, |
24653
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
585 nrow_u, v, nrow_v, q, nrow_q, work, lwork, iwork.data (), |
f0de21a6a426
Use new LAPACK functions in gsvd if available (bug #50463).
Markus Mützel <markus.muetzel@gmx.de>
parents:
24534
diff
changeset
|
586 info); |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
587 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
588 if (info < 0) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
589 (*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
|
590 -info); |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
591 else |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
592 { |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
593 if (info > 0) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
594 (*current_liboctave_error_handler) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
595 ("*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
|
596 else |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
597 { |
22945
eb01d0178188
use F77_INT instead of octave_idx_type for liboctave gsvd class
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
598 F77_INT i, j; |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
599 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
600 if (gsvd<T>::Type::std == gsvd_type) |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
601 { |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
602 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
|
603 int astart = n-k-l; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
604 if (m - k - l >= 0) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
605 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
606 astart = n-k-l; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
607 // 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
|
608 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
|
609 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
|
610 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
|
611 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
612 else |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
613 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
614 // (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
|
615 // ( 0 R22 R23 ) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
616 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
617 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
|
618 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
|
619 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
|
620 // 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
|
621 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
|
622 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
623 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
|
624 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
|
625 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
|
626 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
|
627 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
628 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
629 } |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
630 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
631 if (m-k-l >= 0) |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
632 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
633 // Fills in C and S |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
634 sigmaA.resize (l, l); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
635 sigmaB.resize (l, l); |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
636 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
|
637 { |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
638 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
|
639 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
|
640 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
641 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
642 else |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
643 { |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
644 // Fills in C and S |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
645 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
|
646 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
|
647 for (i = 0; i < m-k; i++) |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
648 { |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
649 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
|
650 sigmaB.dgxelem(i) = beta.elem(k+i); |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
651 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
652 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
653 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
654 } |
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
655 } |
22437
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
656 |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
657 // Instantiations we need. |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
658 template class gsvd<Matrix>; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
659 template class gsvd<FloatMatrix>; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
660 template class gsvd<ComplexMatrix>; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
661 template class gsvd<FloatComplexMatrix>; |
0aee8b620864
gsvd: move new class into the octave::math namespace.
Carnë Draug <carandraug@octave.org>
parents:
22436
diff
changeset
|
662 } |
22236
065a44375723
gsvd: reduce code duplication with templates.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
663 } |