Mercurial > octave
annotate libinterp/corefcn/gsvd.cc @ 22235:63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
* libinterp/corefcn/gsvd.cc: New function to the interpreter. Imported
from the linear-algebra package.
* CmplxGSVD.cc, CmplxGSVD.h, dbleGSVD.cc, dbleGSVD.h: new classes
imported from the linear-algebra package to compute gsvd of Matrix
and ComplexMatrix.
* liboctave/operators/mx-defs.h, liboctave/operators/mx-ext.h: use new
classes.
* libinterp/corefcn/module.mk, liboctave/numeric/module.mk: Add to the
* scripts/help/__unimplemented__.m: Remove "gsvd" from list.
* doc/interpreter/linalg.txi: Add to manual.
build system.
* NEWS: Add function to list of new functions for 4.2.
author | Barbara Locsi <locsi.barbara@gmail.com> |
---|---|
date | Thu, 04 Aug 2016 07:50:31 +0200 |
parents | |
children | 065a44375723 |
rev | line source |
---|---|
22235
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
1 // Copyright (C) 1996, 1997 John W. Eaton |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
2 // Copyright (C) 2006, 2010 Pascal Dupuis <Pascal.Dupuis@uclouvain.be> |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
3 // |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
4 // This program is free software; you can redistribute it and/or modify it under |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
5 // the terms of the GNU General Public License as published by the Free Software |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
6 // Foundation; either version 3 of the License, or (at your option) any later |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
7 // version. |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
8 // |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
9 // This program is distributed in the hope that it will be useful, but WITHOUT |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
10 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
11 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
12 // details. |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
13 // |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
14 // You should have received a copy of the GNU General Public License along with |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
15 // this program; if not, see <http://www.gnu.org/licenses/>. |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
16 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
17 #ifdef HAVE_CONFIG_H |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
18 # include <config.h> |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
19 #endif |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
20 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
21 #include "defun.h" |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
22 #include "error.h" |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
23 #include "gripes.h" |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
24 #include "pr-output.h" |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
25 #include "utils.h" |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
26 #include "ovl.h" |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
27 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
28 #include "CmplxGSVD.h" |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
29 #include "dbleGSVD.h" |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
30 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
31 DEFUN (gsvd, args, nargout, |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
32 doc: /* -*- texinfo -*- |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
33 @deftypefn {Loadable Function} {@var{s} =} gsvd (@var{a}, @var{b}) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
34 @deftypefnx {Loadable Function} {[@var{u}, @var{v}, @var{c}, @var{s}, @var{x} [, @var{r}]] =} gsvd (@var{a}, @var{b}) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
35 @cindex generalised singular value decomposition |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
36 Compute the generalised singular value decomposition of (@var{a}, @var{b}): |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
37 @iftex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
38 @tex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
39 $$ |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
40 U^H A X = [I 0; 0 C] [0 R] |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
41 V^H B X = [0 S; 0 0] [0 R] |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
42 C*C + S*S = eye(columns(A)) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
43 I and 0 are padding matrices of suitable size |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
44 R is upper triangular |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
45 $$ |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
46 @end tex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
47 @end iftex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
48 @ifinfo |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
49 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
50 @example |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
51 u' * a * x = [I 0; 0 c] * [0 r] |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
52 v' * b * x = [0 s; 0 0] * [0 r] |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
53 c * c + s * s = eye(columns(a)) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
54 I and 0 are padding matrices of suitable size |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
55 r is upper triangular |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
56 @end example |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
57 @end ifinfo |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
58 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
59 The function @code{gsvd} normally returns the vector of generalised singular |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
60 values |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
61 @iftex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
62 @tex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
63 diag(C)./diag(S). |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
64 @end tex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
65 @end iftex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
66 @ifinfo |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
67 diag(r)./diag(s). |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
68 @end ifinfo |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
69 If asked for five return values, it computes |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
70 @iftex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
71 @tex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
72 $U$, $V$, and $X$. |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
73 @end tex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
74 @end iftex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
75 @ifinfo |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
76 U, V, and X. |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
77 @end ifinfo |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
78 With a sixth output argument, it also returns |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
79 @iftex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
80 @tex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
81 R, |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
82 @end tex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
83 @end iftex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
84 @ifinfo |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
85 r, |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
86 @end ifinfo |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
87 The common upper triangular right term. Other authors, like S. Van Huffel, |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
88 define this transformation as the simulatenous diagonalisation of the |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
89 input matrices, this can be achieved by multiplying |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
90 @iftex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
91 @tex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
92 X |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
93 @end tex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
94 @end iftex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
95 @ifinfo |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
96 x |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
97 @end ifinfo |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
98 by the inverse of |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
99 @iftex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
100 @tex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
101 [I 0; 0 R]. |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
102 @end tex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
103 @end iftex |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
104 @ifinfo |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
105 [I 0; 0 r]. |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
106 @end ifinfo |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
107 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
108 For example, |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
109 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
110 @example |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
111 gsvd (hilb (3), [1 2 3; 3 2 1]) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
112 @end example |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
113 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
114 @noindent |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
115 returns |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
116 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
117 @example |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
118 ans = |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
119 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
120 0.1055705 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
121 0.0031759 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
122 @end example |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
123 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
124 @noindent |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
125 and |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
126 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
127 @example |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
128 [u, v, c, s, x, r] = gsvd (hilb (3), [1 2 3; 3 2 1]) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
129 @end example |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
130 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
131 @noindent |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
132 returns |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
133 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
134 @example |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
135 u = |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
136 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
137 -0.965609 0.240893 0.097825 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
138 -0.241402 -0.690927 -0.681429 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
139 -0.096561 -0.681609 0.725317 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
140 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
141 v = |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
142 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
143 -0.41974 0.90765 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
144 -0.90765 -0.41974 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
145 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
146 c = |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
147 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
148 0.10499 0.00000 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
149 0.00000 0.00318 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
150 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
151 s = |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
152 0.99447 0.00000 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
153 0.00000 0.99999 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
154 x = |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
155 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
156 0.408248 0.902199 0.139179 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
157 -0.816497 0.429063 -0.386314 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
158 0.408248 -0.044073 -0.911806 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
159 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
160 r = |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
161 -0.14093 -1.24345 0.43737 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
162 0.00000 -3.90043 2.57818 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
163 0.00000 0.00000 -2.52599 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
164 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
165 @end example |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
166 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
167 The code is a wrapper to the corresponding Lapack dggsvd and zggsvd routines. |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
168 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
169 @end deftypefn */) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
170 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
171 octave_value_list retval; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
172 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
173 int nargin = args.length (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
174 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
175 if (nargin < 2 || nargin > 2 || (nargout > 1 && (nargout < 5 || nargout > 6))) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
176 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
177 print_usage (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
178 return retval; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
179 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
180 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
181 octave_value argA = args(0), argB = args(1); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
182 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
183 octave_idx_type nr = argA.rows (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
184 octave_idx_type nc = argA.columns (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
185 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
186 // octave_idx_type nn = argB.rows (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
187 octave_idx_type np = argB.columns (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
188 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
189 if (nr == 0 || nc == 0) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
190 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
191 if (nargout == 5) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
192 retval = ovl (identity_matrix (nc, nc), identity_matrix (nc, nc), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
193 Matrix (nr, nc), identity_matrix (nr, nr), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
194 identity_matrix (nr, nr)); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
195 else if (nargout == 6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
196 retval = ovl (identity_matrix (nc, nc), identity_matrix (nc, nc), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
197 Matrix (nr, nc), identity_matrix (nr, nr), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
198 identity_matrix (nr, nr), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
199 identity_matrix (nr, nr)); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
200 else |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
201 retval = ovl (Matrix (0, 1)); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
202 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
203 else |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
204 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
205 if ((nc != np)) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
206 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
207 print_usage (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
208 return retval; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
209 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
210 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
211 GSVD::type type = ((nargout == 0 || nargout == 1) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
212 ? GSVD::sigma_only |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
213 : (nargout > 5) ? GSVD::std : GSVD::economy ); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
214 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
215 if (argA.is_real_type () && argB.is_real_type ()) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
216 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
217 Matrix tmpA = argA.matrix_value (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
218 Matrix tmpB = argB.matrix_value (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
219 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
220 if (! error_state) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
221 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
222 if (tmpA.any_element_is_inf_or_nan ()) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
223 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
224 error ("gsvd: cannot take GSVD of matrix containing Inf or NaN values"); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
225 return retval; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
226 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
227 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
228 if (tmpB.any_element_is_inf_or_nan ()) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
229 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
230 error ("gsvd: cannot take GSVD of matrix containing Inf or NaN values"); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
231 return retval; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
232 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
233 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
234 GSVD result (tmpA, tmpB, type); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
235 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
236 // DiagMatrix sigma = result.singular_values (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
237 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
238 if (nargout == 0 || nargout == 1) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
239 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
240 DiagMatrix sigA = result.singular_values_A (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
241 DiagMatrix sigB = result.singular_values_B (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
242 for (int i = sigA.rows() - 1; i >=0; i--) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
243 sigA.dgxelem(i) /= sigB.dgxelem(i); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
244 retval = ovl (sigA.diag()); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
245 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
246 else |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
247 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
248 if (nargout > 5) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
249 retval = ovl (result.left_singular_matrix_A (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
250 result.left_singular_matrix_B (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
251 result.singular_values_A (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
252 result.singular_values_B (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
253 result.right_singular_matrix (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
254 result.R_matrix ()); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
255 else |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
256 retval = ovl (result.left_singular_matrix_A (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
257 result.left_singular_matrix_B (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
258 result.singular_values_A (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
259 result.singular_values_B (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
260 result.right_singular_matrix ()); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
261 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
262 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
263 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
264 else if (argA.is_complex_type () || argB.is_complex_type ()) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
265 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
266 ComplexMatrix ctmpA = argA.complex_matrix_value (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
267 ComplexMatrix ctmpB = argB.complex_matrix_value (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
268 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
269 if (! error_state) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
270 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
271 if (ctmpA.any_element_is_inf_or_nan ()) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
272 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
273 error ("gsvd: cannot take GSVD of matrix containing Inf or NaN values"); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
274 return retval; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
275 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
276 if (ctmpB.any_element_is_inf_or_nan ()) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
277 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
278 error ("gsvd: cannot take GSVD of matrix containing Inf or NaN values"); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
279 return retval; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
280 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
281 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
282 ComplexGSVD result (ctmpA, ctmpB, type); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
283 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
284 // DiagMatrix sigma = result.singular_values (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
285 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
286 if (nargout == 0 || nargout == 1) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
287 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
288 DiagMatrix sigA = result.singular_values_A (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
289 DiagMatrix sigB = result.singular_values_B (); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
290 for (int i = sigA.rows() - 1; i >=0; i--) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
291 sigA.dgxelem(i) /= sigB.dgxelem(i); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
292 retval = ovl (sigA.diag()); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
293 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
294 else |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
295 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
296 if (nargout > 5) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
297 retval = ovl (result.left_singular_matrix_A (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
298 result.left_singular_matrix_B (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
299 result.singular_values_A (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
300 result.singular_values_B (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
301 result.right_singular_matrix (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
302 result.R_matrix ()); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
303 else |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
304 retval = ovl (result.left_singular_matrix_A (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
305 result.left_singular_matrix_B (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
306 result.singular_values_A (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
307 result.singular_values_B (), |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
308 result.right_singular_matrix ()); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
309 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
310 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
311 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
312 else |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
313 { |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
314 gripe_wrong_type_arg ("gsvd", argA); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
315 gripe_wrong_type_arg ("gsvd", argB); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
316 return retval; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
317 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
318 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
319 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
320 return retval; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
321 } |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
322 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
323 /* |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
324 %# a few tests for gsvd.m |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
325 %!shared A, A0, B, B0, U, V, C, S, X, R, D1, D2 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
326 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
327 %! A0=randn(5, 3); B0=diag([1 2 4]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
328 %! A = A0; B = B0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
329 %! # disp('Full rank, 5x3 by 3x3 matrices'); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
330 %! # disp([rank(A) rank(B) rank([A' B'])]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
331 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
332 %! D1 = zeros(5, 3); D1(1:3, 1:3) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
333 %! D2 = S; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
334 %!assert(norm(diag(C).^2+diag(S).^2 - ones(3, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
335 %!assert(norm((U'*A*X)-D1*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
336 %!assert(norm((V'*B*X)-D2*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
337 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
338 %! # disp('A 5x3 full rank, B 3x3 rank deficient'); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
339 %! B(2, 2) = 0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
340 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
341 %! D1 = zeros(5, 3); D1(1, 1) = 1; D1(2:3, 2:3) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
342 %! D2 = [zeros(2, 1) S; zeros(1, 3)]; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
343 %!assert(norm(diag(C).^2+diag(S).^2 - ones(2, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
344 %!assert(norm((U'*A*X)-D1*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
345 %!assert(norm((V'*B*X)-D2*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
346 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
347 %! # disp('A 5x3 rank deficient, B 3x3 full rank'); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
348 %! B = B0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
349 %! A(:, 3) = 2*A(:, 1) - A(:, 2); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
350 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
351 %! D1 = zeros(5, 3); D1(1:3, 1:3) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
352 %! D2 = S; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
353 %!assert(norm(diag(C).^2+diag(S).^2 - ones(3, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
354 %!assert(norm((U'*A*X)-D1*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
355 %!assert(norm((V'*B*X)-D2*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
356 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
357 %! # disp("A 5x3, B 3x3, [A' B'] rank deficient"); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
358 %! B(:, 3) = 2*B(:, 1) - B(:, 2); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
359 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
360 %! D1 = zeros(5, 2); D1(1:2, 1:2) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
361 %! D2 = [S; zeros(1, 2)]; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
362 %!assert(norm(diag(C).^2+diag(S).^2 - ones(2, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
363 %!assert(norm((U'*A*X)-D1*[zeros(2, 1) R]) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
364 %!assert(norm((V'*B*X)-D2*[zeros(2, 1) R]) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
365 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
366 %! # now, A is 3x5 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
367 %! A = A0.'; B0=diag([1 2 4 8 16]); B = B0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
368 %! # disp('Full rank, 3x5 by 5x5 matrices'); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
369 %! # disp([rank(A) rank(B) rank([A' B'])]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
370 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
371 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
372 %! D1 = [C zeros(3,2)]; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
373 %! D2 = [S zeros(3,2); zeros(2, 3) eye(2)]; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
374 %!assert(norm(diag(C).^2+diag(S).^2 - ones(3, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
375 %!assert(norm((U'*A*X)-D1*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
376 %!assert(norm((V'*B*X)-D2*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
377 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
378 %! # disp('A 5x3 full rank, B 5x5 rank deficient'); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
379 %! B(2, 2) = 0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
380 %! # disp([rank(A) rank(B) rank([A' B'])]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
381 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
382 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
383 %! D1 = zeros(3, 5); D1(1, 1) = 1; D1(2:3, 2:3) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
384 %! D2 = zeros(5, 5); D2(1:2, 2:3) = S; D2(3:4, 4:5) = eye(2); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
385 %!assert(norm(diag(C).^2+diag(S).^2 - ones(2, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
386 %!assert(norm((U'*A*X)-D1*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
387 %!assert(norm((V'*B*X)-D2*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
388 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
389 %! # disp('A 3x5 rank deficient, B 5x5 full rank'); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
390 %! B = B0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
391 %! A(3, :) = 2*A(1, :) - A(2, :); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
392 %! # disp([rank(A) rank(B) rank([A' B'])]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
393 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
394 %! D1 = zeros(3, 5); D1(1:3, 1:3) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
395 %! D2 = zeros(5, 5); D2(1:3, 1:3) = S; D2(4:5, 4:5) = eye(2); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
396 %!assert(norm(diag(C).^2+diag(S).^2 - ones(3, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
397 %!assert(norm((U'*A*X)-D1*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
398 %!assert(norm((V'*B*X)-D2*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
399 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
400 %! # disp("A 5x3, B 5x5, [A' B'] rank deficient"); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
401 %! A = A0.'; B = B0.'; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
402 %! A(:, 3) = 2*A(:, 1) - A(:, 2); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
403 %! B(:, 3) = 2*B(:, 1) - B(:, 2); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
404 %! # disp([rank(A) rank(B) rank([A' B'])]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
405 %! [U, V, C, S, X, R]=gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
406 %! D1 = zeros(3, 4); D1(1:3, 1:3) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
407 %! D2 = eye(4); D2(1:3, 1:3) = S; D2(5,:) = 0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
408 %!assert(norm(diag(C).^2+diag(S).^2 - ones(3, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
409 %!assert(norm((U'*A*X)-D1*[zeros(4, 1) R]) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
410 %!assert(norm((V'*B*X)-D2*[zeros(4, 1) R]) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
411 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
412 %! A0 = A0 +j * randn(5, 3); B0 = B0=diag([1 2 4]) + j*diag([4 -2 -1]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
413 %! A = A0; B = B0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
414 %! # disp('Complex: Full rank, 5x3 by 3x3 matrices'); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
415 %! # disp([rank(A) rank(B) rank([A' B'])]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
416 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
417 %! D1 = zeros(5, 3); D1(1:3, 1:3) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
418 %! D2 = S; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
419 %!assert(norm(diag(C).^2+diag(S).^2 - ones(3, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
420 %!assert(norm((U'*A*X)-D1*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
421 %!assert(norm((V'*B*X)-D2*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
422 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
423 %! # disp('Complex: A 5x3 full rank, B 3x3 rank deficient'); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
424 %! B(2, 2) = 0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
425 %! # disp([rank(A) rank(B) rank([A' B'])]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
426 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
427 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
428 %! D1 = zeros(5, 3); D1(1, 1) = 1; D1(2:3, 2:3) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
429 %! D2 = [zeros(2, 1) S; zeros(1, 3)]; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
430 %!assert(norm(diag(C).^2+diag(S).^2 - ones(2, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
431 %!assert(norm((U'*A*X)-D1*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
432 %!assert(norm((V'*B*X)-D2*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
433 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
434 %! # disp('Complex: A 5x3 rank deficient, B 3x3 full rank'); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
435 %! B = B0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
436 %! A(:, 3) = 2*A(:, 1) - A(:, 2); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
437 %! # disp([rank(A) rank(B) rank([A' B'])]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
438 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
439 %! D1 = zeros(5, 3); D1(1:3, 1:3) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
440 %! D2 = S; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
441 %!assert(norm(diag(C).^2+diag(S).^2 - ones(3, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
442 %!assert(norm((U'*A*X)-D1*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
443 %!assert(norm((V'*B*X)-D2*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
444 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
445 %! # disp("Complex: A 5x3, B 3x3, [A' B'] rank deficient"); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
446 %! B(:, 3) = 2*B(:, 1) - B(:, 2); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
447 %! # disp([rank(A) rank(B) rank([A' B'])]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
448 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
449 %! D1 = zeros(5, 2); D1(1:2, 1:2) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
450 %! D2 = [S; zeros(1, 2)]; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
451 %!assert(norm(diag(C).^2+diag(S).^2 - ones(2, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
452 %!assert(norm((U'*A*X)-D1*[zeros(2, 1) R]) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
453 %!assert(norm((V'*B*X)-D2*[zeros(2, 1) R]) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
454 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
455 %! # now, A is 3x5 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
456 %! A = A0.'; B0=diag([1 2 4 8 16])+j*diag([-5 4 -3 2 -1]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
457 %! B = B0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
458 %! # disp('Complex: Full rank, 3x5 by 5x5 matrices'); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
459 %! # disp([rank(A) rank(B) rank([A' B'])]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
460 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
461 %! D1 = [C zeros(3,2)]; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
462 %! D2 = [S zeros(3,2); zeros(2, 3) eye(2)]; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
463 %!assert(norm(diag(C).^2+diag(S).^2 - ones(3, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
464 %!assert(norm((U'*A*X)-D1*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
465 %!assert(norm((V'*B*X)-D2*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
466 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
467 %! # disp('Complex: A 5x3 full rank, B 5x5 rank deficient'); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
468 %! B(2, 2) = 0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
469 %! # disp([rank(A) rank(B) rank([A' B'])]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
470 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
471 %! D1 = zeros(3, 5); D1(1, 1) = 1; D1(2:3, 2:3) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
472 %! D2 = zeros(5,5); D2(1:2, 2:3) = S; D2(3:4, 4:5) = eye(2); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
473 %!assert(norm(diag(C).^2+diag(S).^2 - ones(2, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
474 %!assert(norm((U'*A*X)-D1*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
475 %!assert(norm((V'*B*X)-D2*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
476 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
477 %! # disp('Complex: A 3x5 rank deficient, B 5x5 full rank'); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
478 %! B = B0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
479 %! A(3, :) = 2*A(1, :) - A(2, :); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
480 %! # disp([rank(A) rank(B) rank([A' B'])]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
481 %! [U, V, C, S, X, R] = gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
482 %! D1 = zeros(3, 5); D1(1:3, 1:3) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
483 %! D2 = zeros(5,5); D2(1:3, 1:3) = S; D2(4:5, 4:5) = eye(2); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
484 %!assert(norm(diag(C).^2+diag(S).^2 - ones(3, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
485 %!assert(norm((U'*A*X)-D1*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
486 %!assert(norm((V'*B*X)-D2*R) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
487 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
488 %! # disp("Complex: A 5x3, B 5x5, [A' B'] rank deficient"); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
489 %! A = A0.'; B = B0.'; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
490 %! A(:, 3) = 2*A(:, 1) - A(:, 2); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
491 %! B(:, 3) = 2*B(:, 1) - B(:, 2); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
492 %! # disp([rank(A) rank(B) rank([A' B'])]); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
493 %! [U, V, C, S, X, R]=gsvd(A, B); |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
494 %! D1 = zeros(3, 4); D1(1:3, 1:3) = C; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
495 %! D2 = eye(4); D2(1:3, 1:3) = S; D2(5,:) = 0; |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
496 %!assert(norm(diag(C).^2+diag(S).^2 - ones(3, 1)) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
497 %!assert(norm((U'*A*X)-D1*[zeros(4, 1) R]) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
498 %!assert(norm((V'*B*X)-D2*[zeros(4, 1) R]) <= 1e-6) |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
499 |
63b41167ef1e
gsvd: new function imported from Octave-Forge linear-algebra package.
Barbara Locsi <locsi.barbara@gmail.com>
parents:
diff
changeset
|
500 */ |