Mercurial > octave
annotate libinterp/corefcn/gsvd.cc @ 30564:796f54d4ddbf stable
update Octave Project Developers copyright for the new year
In files that have the "Octave Project Developers" copyright notice,
update for 2021.
In all .txi and .texi files except gpl.txi and gpl.texi in the
doc/liboctave and doc/interpreter directories, change the copyright
to "Octave Project Developers", the same as used for other source
files. Update copyright notices for 2022 (not done since 2019). For
gpl.txi and gpl.texi, change the copyright notice to be "Free Software
Foundation, Inc." and leave the date at 2007 only because this file
only contains the text of the GPL, not anything created by the Octave
Project Developers.
Add Paul Thomas to contributors.in.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 28 Dec 2021 18:22:40 -0500 |
parents | 2c7a8040f4f2 |
children | e88a07dec498 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
30564
796f54d4ddbf
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
30311
diff
changeset
|
3 // Copyright (C) 1997-2022 The Octave Project Developers |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
25 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
26 #ifdef HAVE_CONFIG_H |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
27 # include <config.h> |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
28 #endif |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
29 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
30 #include "dMatrix.h" |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
31 #include "CMatrix.h" |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
32 #include "dDiagMatrix.h" |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
33 #include "gsvd.h" |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
34 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
35 #include "defun.h" |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
36 #include "defun-int.h" |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
37 #include "error.h" |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
38 #include "errwarn.h" |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
39 #include "utils.h" |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
40 #include "ovl.h" |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
41 #include "ov.h" |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
42 |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
43 OCTAVE_NAMESPACE_BEGIN |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
44 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
45 template <typename T> |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
46 static typename math::gsvd<T>::Type |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
47 gsvd_type (int nargout, int nargin) |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
48 { |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
49 if (nargout == 0 || nargout == 1) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
50 return octave::math::gsvd<T>::Type::sigma_only; |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
51 else if (nargin < 3) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
52 return octave::math::gsvd<T>::Type::std; |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
53 else |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
54 return octave::math::gsvd<T>::Type::economy; |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
55 } |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
56 |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
57 // Named do_gsvd to avoid conflicts with the gsvd class itself. |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
58 template <typename T> |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
59 static octave_value_list |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
60 do_gsvd (const T& A, const T& B, |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
61 const octave_idx_type nargout, const octave_idx_type nargin, |
22664
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
62 bool is_single = false) |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
63 { |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
64 math::gsvd<T> result (A, B, gsvd_type<T> (nargout, nargin)); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
65 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
66 octave_value_list retval (nargout); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
67 if (nargout <= 1) |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
68 { |
22664
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
69 if (is_single) |
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
70 { |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
71 FloatMatrix sigA = result.singular_values_A (); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
72 FloatMatrix sigB = result.singular_values_B (); |
22664
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
73 for (int i = sigA.rows () - 1; i >= 0; i--) |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
74 sigA.xelem (i) /= sigB.xelem (i); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
75 retval(0) = sigA.sort (); |
22664
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
76 } |
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
77 else |
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
78 { |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
79 Matrix sigA = result.singular_values_A (); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
80 Matrix sigB = result.singular_values_B (); |
22664
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
81 for (int i = sigA.rows () - 1; i >= 0; i--) |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
82 sigA.xelem (i) /= sigB.xelem (i); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
83 retval(0) = sigA.sort (); |
22664
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
84 } |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
85 } |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
86 else |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
87 { |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
88 switch (nargout) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
89 { |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
90 case 5: |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
91 retval(4) = result.singular_values_B (); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
92 OCTAVE_FALLTHROUGH; |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
93 |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
94 case 4: |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
95 retval(3) = result.singular_values_A (); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
96 OCTAVE_FALLTHROUGH; |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
97 |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
98 case 3: |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
99 retval(2) = result.right_singular_matrix (); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
100 } |
30303
cd63a97cb9be
eliminate unnecessary use of OCTAVE_FALLTHOUGH
John W. Eaton <jwe@octave.org>
parents:
30300
diff
changeset
|
101 |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
102 retval(1) = result.left_singular_matrix_B (); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
103 retval(0) = result.left_singular_matrix_A (); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
104 } |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
105 |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
106 return retval; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
107 } |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
108 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
109 DEFUN (gsvd, args, nargout, |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
110 doc: /* -*- texinfo -*- |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
111 @deftypefn {} {@var{S} =} gsvd (@var{A}, @var{B}) |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
112 @deftypefnx {} {[@var{U}, @var{V}, @var{X}, @var{C}, @var{S}] =} gsvd (@var{A}, @var{B}) |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
113 @deftypefnx {} {[@var{U}, @var{V}, @var{X}, @var{C}, @var{S}] =} gsvd (@var{A}, @var{B}, 0) |
25106
d7ad543255c5
doc: Shorten very long first sentences of docstrings (bug #53388).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
114 Compute the generalized singular value decomposition of (@var{A}, @var{B}). |
d7ad543255c5
doc: Shorten very long first sentences of docstrings (bug #53388).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
115 |
d7ad543255c5
doc: Shorten very long first sentences of docstrings (bug #53388).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
116 The generalized singular value decomposition is defined by the following |
d7ad543255c5
doc: Shorten very long first sentences of docstrings (bug #53388).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
117 relations: |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
118 |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
119 @tex |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
120 $$ A = U C X^\dagger $$ |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
121 $$ B = V S X^\dagger $$ |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
122 $$ C^\dagger C + S^\dagger S = eye (columns (A)) $$ |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
123 @end tex |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
124 @ifnottex |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
125 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
126 @example |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
127 @group |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
128 A = U*C*X' |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
129 B = V*S*X' |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
130 C'*C + S'*S = eye (columns (A)) |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
131 @end group |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
132 @end example |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
133 |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
134 @end ifnottex |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
135 |
23565
3a730821e4a2
doc: Peridoc grammarcheck of documentation.
Rik <rik@octave.org>
parents:
23221
diff
changeset
|
136 The function @code{gsvd} normally returns just the vector of generalized |
3a730821e4a2
doc: Peridoc grammarcheck of documentation.
Rik <rik@octave.org>
parents:
23221
diff
changeset
|
137 singular values |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
138 @tex |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
139 $$ \sqrt{{{diag (C^\dagger C)} \over {diag (S^\dagger S)}}} $$ |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
140 @end tex |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
141 @ifnottex |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
142 @code{sqrt (diag (C'*C) ./ diag (S'*S))}. |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
143 @end ifnottex |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
144 If asked for five return values, it also computes |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
145 @tex |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
146 $U$, $V$, $X$, and $C$. |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
147 @end tex |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
148 @ifnottex |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
149 U, V, X, and C. |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
150 @end ifnottex |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
151 |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
152 If the optional third input is present, @code{gsvd} constructs the |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
153 "economy-sized" decomposition where the number of columns of @var{U}, @var{V} |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
154 and the number of rows of @var{C}, @var{S} is less than or equal to the number |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
155 of columns of @var{A}. This option is not yet implemented. |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
156 |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
157 Programming Note: the code is a wrapper to the corresponding @sc{lapack} dggsvd |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
158 and zggsvd routines. If matrices @var{A} and @var{B} are @emph{both} rank |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
159 deficient then @sc{lapack} will return an incorrect factorization. Programmers |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
160 should avoid this combination. |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
161 @seealso{svd} |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
162 @end deftypefn */) |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
163 { |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
164 int nargin = args.length (); |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
165 |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
166 if (nargin < 2 || nargin > 3) |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
167 print_usage (); |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
168 else if (nargin == 3) |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
169 { |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
170 // FIXME: when "economy" is implemented delete this code |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
171 warning ("gsvd: economy-sized decomposition is not yet implemented, returning full decomposition"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
172 nargin = 2; |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
173 } |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
174 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
175 octave_value_list retval; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
176 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
177 octave_value argA = args(0); |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
178 octave_value argB = args(1); |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
179 |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
180 if (argA.columns () != argB.columns ()) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
181 error ("gsvd: A and B must have the same number of columns"); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
182 |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
183 if (argA.is_single_type () || argB.is_single_type ()) |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
184 { |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
185 if (argA.isreal () && argB.isreal ()) |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
186 { |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
187 FloatMatrix tmpA = argA.xfloat_matrix_value ("gsvd: A must be a real or complex matrix"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
188 FloatMatrix tmpB = argB.xfloat_matrix_value ("gsvd: B must be a real or complex matrix"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
189 |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
190 if (tmpA.any_element_is_inf_or_nan ()) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
191 error ("gsvd: A cannot have Inf or NaN values"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
192 if (tmpB.any_element_is_inf_or_nan ()) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
193 error ("gsvd: B cannot have Inf or NaN values"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
194 |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
195 retval = do_gsvd (tmpA, tmpB, nargout, nargin, true); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
196 } |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
197 else if (argA.iscomplex () || argB.iscomplex ()) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
198 { |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
199 FloatComplexMatrix ctmpA = argA.xfloat_complex_matrix_value ("gsvd: A must be a real or complex matrix"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
200 FloatComplexMatrix ctmpB = argB.xfloat_complex_matrix_value ("gsvd: B must be a real or complex matrix"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
201 |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
202 if (ctmpA.any_element_is_inf_or_nan ()) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
203 error ("gsvd: A cannot have Inf or NaN values"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
204 if (ctmpB.any_element_is_inf_or_nan ()) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
205 error ("gsvd: B cannot have Inf or NaN values"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
206 |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
207 retval = do_gsvd (ctmpA, ctmpB, nargout, nargin, true); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
208 } |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
209 else |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
210 error ("gsvd: A and B must be real or complex matrices"); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
211 } |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
212 else |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
213 { |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
214 if (argA.isreal () && argB.isreal ()) |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
215 { |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
216 Matrix tmpA = argA.xmatrix_value ("gsvd: A must be a real or complex matrix"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
217 Matrix tmpB = argB.xmatrix_value ("gsvd: B must be a real or complex matrix"); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
218 |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
219 if (tmpA.any_element_is_inf_or_nan ()) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
220 error ("gsvd: A cannot have Inf or NaN values"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
221 if (tmpB.any_element_is_inf_or_nan ()) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
222 error ("gsvd: B cannot have Inf or NaN values"); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
223 |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
224 retval = do_gsvd (tmpA, tmpB, nargout, nargin); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
225 } |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
226 else if (argA.iscomplex () || argB.iscomplex ()) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
227 { |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
228 ComplexMatrix ctmpA = argA.xcomplex_matrix_value ("gsvd: A must be a real or complex matrix"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
229 ComplexMatrix ctmpB = argB.xcomplex_matrix_value ("gsvd: B must be a real or complex matrix"); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
230 |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
231 if (ctmpA.any_element_is_inf_or_nan ()) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
232 error ("gsvd: A cannot have Inf or NaN values"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
233 if (ctmpB.any_element_is_inf_or_nan ()) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
234 error ("gsvd: B cannot have Inf or NaN values"); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
235 |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
236 retval = do_gsvd (ctmpA, ctmpB, nargout, nargin); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
237 } |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
238 else |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
239 error ("gsvd: A and B must be real or complex matrices"); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
240 } |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
241 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
242 return retval; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
243 } |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
244 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
245 /* |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
246 |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
247 ## Basic tests of decomposition |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
248 %!test <60273> |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
249 %! A = reshape (1:15,5,3); |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
250 %! B = magic (3); |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
251 %! [U,V,X,C,S] = gsvd (A,B); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
252 %! assert (size (U), [5, 5]); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
253 %! assert (size (V), [3, 3]); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
254 %! assert (size (X), [3, 3]); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
255 %! assert (size (C), [5, 3]); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
256 %! assert (C(4:5, :), zeros (2,3)); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
257 %! assert (size (S), [3, 3]); |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
258 %! assert (U*C*X', A, 50*eps); |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
259 %! assert (V*S*X', B, 50*eps); |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
260 %! S0 = gsvd (A, B); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
261 %! assert (size (S0), [3, 1]); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
262 %! S1 = sort (svd (A / B)); |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
263 %! assert (S0, S1, 10*eps); |
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
264 |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
265 %!test <60273> |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
266 %! A = reshape (1:15,3,5); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
267 %! B = magic (5); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
268 %! [U,V,X,C,S] = gsvd (A,B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
269 %! assert (size (U), [3, 3]); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
270 %! assert (size (V), [5, 5]); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
271 %! assert (size (X), [5, 5]); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
272 %! assert (size (C), [3, 5]); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
273 %! assert (C(:, 4:5), zeros (3,2)); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
274 %! assert (size (S), [5, 5]); |
30311
2c7a8040f4f2
Increase tolerances on BIST tests for gsvd (bug #60273)
Rik <rik@octave.org>
parents:
30303
diff
changeset
|
275 %! assert (U*C*X', A, 120*eps); # less accurate in this orientation |
2c7a8040f4f2
Increase tolerances on BIST tests for gsvd (bug #60273)
Rik <rik@octave.org>
parents:
30303
diff
changeset
|
276 %! assert (V*S*X', B, 150*eps); # for some reason. |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
277 %! S0 = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
278 %! assert (size (S0), [5, 1]); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
279 %! S0 = S0(3:end); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
280 %! S1 = sort (svd (A / B)); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
281 %! assert (S0, S1, 20*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
282 |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
283 ## a few tests for gsvd.m |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
284 %!shared A, A0, B, B0, U, V, C, S, X, old_state, restore_state |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
285 %! old_state = randn ("state"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
286 %! restore_state = onCleanup (@() randn ("state", old_state)); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
287 %! randn ("state", 40); # initialize generator to make behavior reproducible |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
288 %! A0 = randn (5, 3); |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
289 %! B0 = diag ([1 2 4]); |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
290 %! A = A0; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
291 %! B = B0; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
292 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
293 ## A (5x3) and B (3x3) are full rank |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
294 %!test <48807> |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
295 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
296 %! assert (C'*C + S'*S, eye (3), 5*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
297 %! assert (U*C*X', A, 10*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
298 %! assert (V*S*X', B, 20*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
299 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
300 ## A: 5x3 full rank, B: 3x3 rank deficient |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
301 %!test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
302 %! B(2, 2) = 0; |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
303 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
304 %! assert (C'*C + S'*S, eye (3), 5*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
305 %! assert (U*C*X', A, 10*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
306 %! assert (V*S*X', B, 20*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
307 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
308 ## A: 5x3 rank deficient, B: 3x3 full rank |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
309 %!test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
310 %! B = B0; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
311 %! A(:, 3) = 2*A(:, 1) - A(:, 2); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
312 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
313 %! assert (C'*C + S'*S, eye (3), 5*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
314 %! assert (U*C*X', A, 10*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
315 %! assert (V*S*X', B, 20*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
316 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
317 ## A and B are both rank deficient |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
318 ## FIXME: LAPACK seems to be completely broken for this case |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
319 %!#test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
320 %! B(:, 3) = 2*B(:, 1) - B(:, 2); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
321 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
322 %! assert (C'*C + S'*S, eye (3), 5*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
323 %! assert (U*C*X', A, 10*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
324 %! assert (V*S*X', B, 20*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
325 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
326 ## A (now 3x5) and B (now 5x5) are full rank |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
327 %!test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
328 %! A = A0.'; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
329 %! B0 = diag ([1 2 4 8 16]); |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
330 %! B = B0; |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
331 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
332 %! assert (C'*C + S'*S, eye (5), 5*eps); |
30311
2c7a8040f4f2
Increase tolerances on BIST tests for gsvd (bug #60273)
Rik <rik@octave.org>
parents:
30303
diff
changeset
|
333 %! assert (U*C*X', A, 15*eps); |
2c7a8040f4f2
Increase tolerances on BIST tests for gsvd (bug #60273)
Rik <rik@octave.org>
parents:
30303
diff
changeset
|
334 %! assert (V*S*X', B, 85*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
335 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
336 ## A: 3x5 full rank, B: 5x5 rank deficient |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
337 %!test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
338 %! B(2, 2) = 0; |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
339 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
340 %! assert (C'*C + S'*S, eye (5), 5*eps); |
30311
2c7a8040f4f2
Increase tolerances on BIST tests for gsvd (bug #60273)
Rik <rik@octave.org>
parents:
30303
diff
changeset
|
341 %! assert (U*C*X', A, 15*eps); |
2c7a8040f4f2
Increase tolerances on BIST tests for gsvd (bug #60273)
Rik <rik@octave.org>
parents:
30303
diff
changeset
|
342 %! assert (V*S*X', B, 85*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
343 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
344 ## A: 3x5 rank deficient, B: 5x5 full rank |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
345 %!test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
346 %! B = B0; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
347 %! A(3, :) = 2*A(1, :) - A(2, :); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
348 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
349 %! assert (C'*C + S'*S, eye (5), 5*eps); |
30311
2c7a8040f4f2
Increase tolerances on BIST tests for gsvd (bug #60273)
Rik <rik@octave.org>
parents:
30303
diff
changeset
|
350 %! assert (U*C*X', A, 15*eps); |
2c7a8040f4f2
Increase tolerances on BIST tests for gsvd (bug #60273)
Rik <rik@octave.org>
parents:
30303
diff
changeset
|
351 %! assert (V*S*X', B, 85*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
352 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
353 ## A and B are both rank deficient |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
354 ## FIXME: LAPACK seems to be completely broken for this case |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
355 %!#test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
356 %! A = A0.'; B = B0.'; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
357 %! A(:, 3) = 2*A(:, 1) - A(:, 2); |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
358 %! B(:, 3) = 2*B(:, 1) - B(:, 2); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
359 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
360 %! assert (C'*C + S'*S, eye (3), 5*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
361 %! assert (U*C*X', A, 10*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
362 %! assert (V*S*X', B, 20*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
363 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
364 ## A: 5x3 complex full rank, B: 3x3 complex full rank |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
365 %!test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
366 %! A0 = A0 + j*randn (5, 3); |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
367 %! B0 = diag ([1 2 4]) + j*diag ([4 -2 -1]); |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
368 %! A = A0; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
369 %! B = B0; |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
370 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
371 %! assert (C'*C + S'*S, eye (3), 5*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
372 %! assert (U*C*X', A, 10*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
373 %! assert (V*S*X', B, 25*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
374 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
375 ## A: 5x3 complex full rank, B: 3x3 complex rank deficient |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
376 %!test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
377 %! B(2, 2) = 0; |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
378 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
379 %! assert (C'*C + S'*S, eye (3), 5*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
380 %! assert (U*C*X', A, 10*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
381 %! assert (V*S*X', B, 25*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
382 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
383 ## A: 5x3 complex rank deficient, B: 3x3 complex full rank |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
384 %!test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
385 %! B = B0; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
386 %! A(:, 3) = 2*A(:, 1) - A(:, 2); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
387 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
388 %! assert (C'*C + S'*S, eye (3), 5*eps); |
30311
2c7a8040f4f2
Increase tolerances on BIST tests for gsvd (bug #60273)
Rik <rik@octave.org>
parents:
30303
diff
changeset
|
389 %! assert (U*C*X', A, 15*eps); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
390 %! assert (V*S*X', B, 25*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
391 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
392 ## A (5x3) and B (3x3) are both complex rank deficient |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
393 ## FIXME: LAPACK seems to be completely broken for this case |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
394 %!#test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
395 %! B(:, 3) = 2*B(:, 1) - B(:, 2); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
396 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
397 %! assert (C'*C + S'*S, eye (3), 5*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
398 %! assert (U*C*X', A, 10*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
399 %! assert (V*S*X', B, 20*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
400 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
401 ## A (now 3x5) complex and B (now 5x5) complex are full rank |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
402 ## now, A is 3x5 |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
403 %!test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
404 %! A = A0.'; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
405 %! B0 = diag ([1 2 4 8 16]) + j*diag ([-5 4 -3 2 -1]); |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
406 %! B = B0; |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
407 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
408 %! assert (C'*C + S'*S, eye (5), 5*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
409 %! assert (U*C*X', A, 25*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
410 %! assert (V*S*X', B, 85*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
411 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
412 ## A: 3x5 complex full rank, B: 5x5 complex rank deficient |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
413 %!test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
414 %! B(2, 2) = 0; |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
415 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
416 %! assert (C'*C + S'*S, eye (5), 5*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
417 %! assert (U*C*X', A, 10*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
418 %! assert (V*S*X', B, 85*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
419 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
420 ## A: 3x5 complex rank deficient, B: 5x5 complex full rank |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
421 %!test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
422 %! B = B0; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
423 %! A(3, :) = 2*A(1, :) - A(2, :); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
424 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
425 %! assert (C'*C + S'*S, eye (5), 5*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
426 %! assert (U*C*X', A, 10*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
427 %! assert (V*S*X', B, 85*eps); |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
428 |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
429 ## A and B are both complex rank deficient |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
430 ## FIXME: LAPACK seems to be completely broken for this case |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
431 %!#test <48807> |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
432 %! A = A0.'; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
433 %! B = B0.'; |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
434 %! A(:, 3) = 2*A(:, 1) - A(:, 2); |
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
435 %! B(:, 3) = 2*B(:, 1) - B(:, 2); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
436 %! [U, V, X, C, S] = gsvd (A, B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
437 %! assert (C'*C + S'*S, eye (5), 5*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
438 %! assert (U*C*X', A, 10*eps); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
439 %! assert (V*S*X', B, 85*eps); |
22580
98eeed41f372
gsvd.cc: Update gsvd implementation in preparation for Matlab compatibility (bug #48807).
Rik <rik@octave.org>
parents:
22572
diff
changeset
|
440 |
22664
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
441 ## Test that single inputs produce single outputs |
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
442 %!test |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
443 %! s = gsvd (single (eye (5)), B); |
22664
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
444 %! assert (class (s), "single"); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
445 %! [U,V,X,C,S] = gsvd (single (eye(5)), B); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
446 %! assert (class (U), "single"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
447 %! assert (class (V), "single"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
448 %! assert (class (X), "single"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
449 %! assert (class (C), "single"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
450 %! assert (class (S), "single"); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
451 %! |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
452 %! s = gsvd (A, single (eye (5))); |
22664
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
453 %! assert (class (s), "single"); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
454 %! [U,V,X,C,S] = gsvd (A, single (eye (5))); |
22664
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
455 %! assert (class (U), "single"); |
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
456 %! assert (class (V), "single"); |
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
457 %! assert (class (X), "single"); |
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
458 %! assert (class (C), "single"); |
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
459 %! assert (class (S), "single"); |
30300
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
460 |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
461 ## Test input validation |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
462 %!error <Invalid call> gsvd () |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
463 %!error <Invalid call> gsvd (1) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
464 %!error <Invalid call> gsvd (1,2,3,4) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
465 %!warning <economy-sized decomposition is not yet implemented> gsvd (1,2,0); |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
466 %!error <A and B must have the same number of columns> gsvd (1,[1, 2]) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
467 ## Test input validation for single (real and complex) inputs. |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
468 %!error <A cannot have Inf or NaN values> gsvd (Inf, single (2)) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
469 %!error <A cannot have Inf or NaN values> gsvd (NaN, single (2)) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
470 %!error <B cannot have Inf or NaN values> gsvd (single (1), Inf) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
471 %!error <B cannot have Inf or NaN values> gsvd (single (1), NaN) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
472 %!error <A must be a real or complex matrix> gsvd ({1}, single (2i)) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
473 %!error <B must be a real or complex matrix> gsvd (single (i), {2}) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
474 %!error <A cannot have Inf or NaN values> gsvd (Inf, single (2i)) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
475 %!error <A cannot have Inf or NaN values> gsvd (NaN, single (2i)) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
476 %!error <B cannot have Inf or NaN values> gsvd (single (i), Inf) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
477 %!error <B cannot have Inf or NaN values> gsvd (single (i), NaN) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
478 ## Test input validation for single, but not real or complex, inputs. |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
479 %!error <A and B must be real or complex matrices> gsvd ({1}, single (2)) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
480 %!error <A and B must be real or complex matrices> gsvd (single (1), {2}) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
481 ## Test input validation for double (real and complex) inputs. |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
482 %!error <A cannot have Inf or NaN values> gsvd (Inf, 2) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
483 %!error <A cannot have Inf or NaN values> gsvd (NaN, 2) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
484 %!error <B cannot have Inf or NaN values> gsvd (1, Inf) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
485 %!error <B cannot have Inf or NaN values> gsvd (1, NaN) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
486 %!error <A must be a real or complex matrix> gsvd ({1}, 2i) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
487 %!error <B must be a real or complex matrix> gsvd (i, {2}) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
488 %!error <A cannot have Inf or NaN values> gsvd (Inf, 2i) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
489 %!error <A cannot have Inf or NaN values> gsvd (NaN, 2i) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
490 %!error <B cannot have Inf or NaN values> gsvd (i, Inf) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
491 %!error <B cannot have Inf or NaN values> gsvd (i, NaN) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
492 ## Test input validation for double, but not real or complex, inputs. |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
493 %!error <A and B must be real or complex matrices> gsvd ({1}, double (2)) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
494 %!error <A and B must be real or complex matrices> gsvd (double (1), {2}) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
495 ## Test input validation in liboctave/numeric/gsvd.cc |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
496 %!error <A and B cannot be empty matrices> gsvd (zeros (0,1), 1) |
4ee01c14fccd
Rewrite gsvd function and return *correct* 3rd output (bug #60273).
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
497 %!error <A and B cannot be empty matrices> gsvd (1, zeros (0,1)) |
22664
f1bb2f0bcfec
Connect C++ gsvd to float version in liboctave (bug #48807).
Rik <rik@octave.org>
parents:
22580
diff
changeset
|
498 |
22572
d65ed83dfd13
gsvd: backout cset 73a85c6cacd1.
Carnë Draug <carandraug@octave.org>
parents:
diff
changeset
|
499 */ |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
500 |
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
501 OCTAVE_NAMESPACE_END |