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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 //
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 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