Mercurial > hg > octave-nkf
annotate libinterp/corefcn/schur.cc @ 20771:87b557ee8e5d
clean up and vectorize code for dense output in ode45
* scripts/ode/private/ode_rk_interpolate.m: new file
* scripts/ode/private/ode_rk_interpolate.m(hermite_quartic_interpolation):
move to internal function, use vectorization and broadcasting.
* scripts/ode/private/hermite_quartic_interpolation.m: remove file
* scripts/ode/module.mk: list added and removed files
* scripts/ode/private/integrate_adaptive.m: use new interpolation code.
author | Carlo de Falco <carlo.defalco@polimi.it> |
---|---|
date | Tue, 06 Oct 2015 19:28:59 +0200 |
parents | f90c8372b7ba |
children | ba2b07c13913 |
rev | line source |
---|---|
2928 | 1 /* |
2 | |
19898
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
19600
diff
changeset
|
3 Copyright (C) 1996-2015 John W. Eaton |
2928 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
2928 | 11 |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
2928 | 20 |
21 */ | |
22 | |
23 #ifdef HAVE_CONFIG_H | |
24 #include <config.h> | |
25 #endif | |
26 | |
27 #include <string> | |
28 | |
29 #include "CmplxSCHUR.h" | |
30 #include "dbleSCHUR.h" | |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
31 #include "fCmplxSCHUR.h" |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
32 #include "floatSCHUR.h" |
2928 | 33 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
34 #include "defun.h" |
2928 | 35 #include "error.h" |
36 #include "gripes.h" | |
37 #include "oct-obj.h" | |
38 #include "utils.h" | |
39 | |
10617
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
40 template <class Matrix> |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
41 static octave_value |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
42 mark_upper_triangular (const Matrix& a) |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
43 { |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
44 octave_value retval = a; |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
45 |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
46 octave_idx_type n = a.rows (); |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
47 assert (a.columns () == n); |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
48 |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
49 const typename Matrix::element_type zero = typename Matrix::element_type (); |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
50 |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
51 for (octave_idx_type i = 0; i < n; i++) |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
52 if (a(i,i) == zero) |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
53 return retval; |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
54 |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
55 retval.matrix_type (MatrixType::Upper); |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
56 |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
57 return retval; |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
58 } |
9c9e07f5eb1c
make schur mark triangular matrices on output
Jaroslav Hajek <highegg@gmail.com>
parents:
10607
diff
changeset
|
59 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
60 DEFUN (schur, args, nargout, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
61 "-*- texinfo -*-\n\ |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
62 @deftypefn {Built-in Function} {@var{S} =} schur (@var{A})\n\ |
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
63 @deftypefnx {Built-in Function} {@var{S} =} schur (@var{A}, \"real\")\n\ |
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
64 @deftypefnx {Built-in Function} {@var{S} =} schur (@var{A}, \"complex\")\n\ |
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
65 @deftypefnx {Built-in Function} {@var{S} =} schur (@var{A}, @var{opt})\n\ |
19208
b155fad47055
Fix error messages and %!fail tests for schur().
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
66 @deftypefnx {Built-in Function} {[@var{U}, @var{S}] =} schur (@dots{})\n\ |
3372 | 67 @cindex Schur decomposition\n\ |
20382
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
68 Compute the Schur@tie{}decomposition of @var{A}.\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
69 \n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
70 The Schur@tie{}decomposition is defined as\n\ |
3372 | 71 @tex\n\ |
12584
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
72 $$\n\ |
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
73 S = U^T A U\n\ |
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
74 $$\n\ |
3372 | 75 @end tex\n\ |
8517
81d6ab3ac93c
Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents:
7814
diff
changeset
|
76 @ifnottex\n\ |
12584
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
77 \n\ |
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
78 @example\n\ |
11553
01f703952eff
Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
79 @code{@var{S} = @var{U}' * @var{A} * @var{U}}\n\ |
12584
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
80 @end example\n\ |
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
81 \n\ |
8517
81d6ab3ac93c
Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents:
7814
diff
changeset
|
82 @end ifnottex\n\ |
12584
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
83 where @var{U} is a unitary matrix\n\ |
3372 | 84 @tex\n\ |
85 ($U^T U$ is identity)\n\ | |
86 @end tex\n\ | |
8517
81d6ab3ac93c
Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents:
7814
diff
changeset
|
87 @ifnottex\n\ |
11553
01f703952eff
Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
88 (@code{@var{U}'* @var{U}} is identity)\n\ |
8517
81d6ab3ac93c
Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents:
7814
diff
changeset
|
89 @end ifnottex\n\ |
12584
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
90 and @var{S} is upper triangular. The eigenvalues of @var{A} (and @var{S})\n\ |
20382
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
91 are the diagonal elements of @var{S}. If the matrix @var{A} is real, then\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
92 the real Schur@tie{}decomposition is computed, in which the matrix @var{U}\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
93 is orthogonal and @var{S} is block upper triangular with blocks of size at\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
94 most\n\ |
3372 | 95 @tex\n\ |
12584
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
96 $2 \\times 2$\n\ |
3372 | 97 @end tex\n\ |
8517
81d6ab3ac93c
Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents:
7814
diff
changeset
|
98 @ifnottex\n\ |
3372 | 99 @code{2 x 2}\n\ |
8517
81d6ab3ac93c
Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents:
7814
diff
changeset
|
100 @end ifnottex\n\ |
12584
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
101 along the diagonal. The diagonal elements of @var{S}\n\ |
3372 | 102 (or the eigenvalues of the\n\ |
103 @tex\n\ | |
12584
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
104 $2 \\times 2$\n\ |
3372 | 105 @end tex\n\ |
8517
81d6ab3ac93c
Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents:
7814
diff
changeset
|
106 @ifnottex\n\ |
3372 | 107 @code{2 x 2}\n\ |
8517
81d6ab3ac93c
Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents:
7814
diff
changeset
|
108 @end ifnottex\n\ |
12584
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
109 blocks, when appropriate) are the eigenvalues of @var{A} and @var{S}.\n\ |
2928 | 110 \n\ |
13224
0a67c717c652
Add support for additional argument "real" to schur() (Bug #34012).
Rik <octave@nomad.inbox5.com>
parents:
12642
diff
changeset
|
111 The default for real matrices is a real Schur@tie{}decomposition.\n\ |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
17268
diff
changeset
|
112 A complex decomposition may be forced by passing the flag\n\ |
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
17268
diff
changeset
|
113 @qcode{\"complex\"}.\n\ |
10607
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
114 \n\ |
20382
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
115 The eigenvalues are optionally ordered along the diagonal according to the\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
116 value of @var{opt}. @code{@var{opt} = \"a\"} indicates that all eigenvalues\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
117 with negative real parts should be moved to the leading block of @var{S}\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
118 (used in @code{are}), @code{@var{opt} = \"d\"} indicates that all\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
119 eigenvalues with magnitude less than one should be moved to the leading\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
120 block of @var{S} (used in @code{dare}), and @code{@var{opt} = \"u\"}, the\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
121 default, indicates that no ordering of eigenvalues should occur. The\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
122 leading @var{k} columns of @var{U} always span the @var{A}-invariant\n\ |
12584
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
123 subspace corresponding to the @var{k} leading eigenvalues of @var{S}.\n\ |
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
124 \n\ |
20382
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
125 The Schur@tie{}decomposition is used to compute eigenvalues of a square\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
126 matrix, and has applications in the solution of algebraic Riccati equations\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19952
diff
changeset
|
127 in control (see @code{are} and @code{dare}).\n\ |
19952
56157a7505ed
Add new ordschur function.
Sébastien Villemot <sebastien@debian.org>
parents:
19898
diff
changeset
|
128 @seealso{rsf2csf, ordschur, lu, chol, hess, qr, qz, svd}\n\ |
3372 | 129 @end deftypefn") |
2928 | 130 { |
131 octave_value_list retval; | |
132 | |
133 int nargin = args.length (); | |
134 | |
135 if (nargin < 1 || nargin > 2 || nargout > 2) | |
136 { | |
5823 | 137 print_usage (); |
2928 | 138 return retval; |
139 } | |
140 | |
141 octave_value arg = args(0); | |
142 | |
3523 | 143 std::string ord; |
2928 | 144 |
145 if (nargin == 2) | |
146 { | |
19600
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
19226
diff
changeset
|
147 if (args(1).is_string ()) |
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
19226
diff
changeset
|
148 ord = args(1).string_value (); |
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
19226
diff
changeset
|
149 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
150 { |
11553
01f703952eff
Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
151 error ("schur: second argument must be a string"); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
152 return retval; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
153 } |
2928 | 154 } |
155 | |
10607
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
156 bool force_complex = false; |
2928 | 157 |
13224
0a67c717c652
Add support for additional argument "real" to schur() (Bug #34012).
Rik <octave@nomad.inbox5.com>
parents:
12642
diff
changeset
|
158 if (ord == "real") |
0a67c717c652
Add support for additional argument "real" to schur() (Bug #34012).
Rik <octave@nomad.inbox5.com>
parents:
12642
diff
changeset
|
159 { |
0a67c717c652
Add support for additional argument "real" to schur() (Bug #34012).
Rik <octave@nomad.inbox5.com>
parents:
12642
diff
changeset
|
160 ord = std::string (); |
0a67c717c652
Add support for additional argument "real" to schur() (Bug #34012).
Rik <octave@nomad.inbox5.com>
parents:
12642
diff
changeset
|
161 } |
0a67c717c652
Add support for additional argument "real" to schur() (Bug #34012).
Rik <octave@nomad.inbox5.com>
parents:
12642
diff
changeset
|
162 else if (ord == "complex") |
10607
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
163 { |
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
164 force_complex = true; |
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
165 ord = std::string (); |
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
166 } |
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
167 else |
2928 | 168 { |
10607
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
169 char ord_char = ord.empty () ? 'U' : ord[0]; |
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
170 |
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
171 if (ord_char != 'U' && ord_char != 'A' && ord_char != 'D' |
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
172 && ord_char != 'u' && ord_char != 'a' && ord_char != 'd') |
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
173 { |
19208
b155fad47055
Fix error messages and %!fail tests for schur().
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
174 warning ("schur: incorrect ordered schur argument '%s'", |
10607
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
175 ord.c_str ()); |
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
176 return retval; |
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
177 } |
2928 | 178 } |
179 | |
5275 | 180 octave_idx_type nr = arg.rows (); |
181 octave_idx_type nc = arg.columns (); | |
2928 | 182 |
183 if (nr != nc) | |
184 { | |
185 gripe_square_matrix_required ("schur"); | |
186 return retval; | |
187 } | |
188 | |
10607
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
189 if (! arg.is_numeric_type ()) |
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
190 gripe_wrong_type_arg ("schur", arg); |
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
191 else if (arg.is_single_type ()) |
2928 | 192 { |
10607
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
193 if (! force_complex && arg.is_real_type ()) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
194 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
195 FloatMatrix tmp = arg.float_matrix_value (); |
2928 | 196 |
20762
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
197 if (nargout == 0 || nargout == 1) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
198 { |
20762
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
199 FloatSCHUR result (tmp, ord, false); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
200 retval(0) = result.schur_matrix (); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
201 } |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
202 else |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
203 { |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
204 FloatSCHUR result (tmp, ord, true); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
205 retval(1) = result.schur_matrix (); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
206 retval(0) = result.unitary_matrix (); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
207 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
208 } |
10607
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
209 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
210 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
211 FloatComplexMatrix ctmp = arg.float_complex_matrix_value (); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
212 |
20762
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
213 if (nargout == 0 || nargout == 1) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
214 { |
20762
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
215 FloatComplexSCHUR result (ctmp, ord, false); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
216 retval(0) = mark_upper_triangular (result.schur_matrix ()); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
217 } |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
218 else |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
219 { |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
220 FloatComplexSCHUR result (ctmp, ord, true); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
221 retval(1) = mark_upper_triangular (result.schur_matrix ()); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
222 retval(0) = result.unitary_matrix (); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
223 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
224 } |
2928 | 225 } |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
226 else |
2928 | 227 { |
10607
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
228 if (! force_complex && arg.is_real_type ()) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
229 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
230 Matrix tmp = arg.matrix_value (); |
2928 | 231 |
20762
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
232 if (nargout == 0 || nargout == 1) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
233 { |
20762
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
234 SCHUR result (tmp, ord, false); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
235 retval(0) = result.schur_matrix (); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
236 } |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
237 else |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
238 { |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
239 SCHUR result (tmp, ord, true); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
240 retval(1) = result.schur_matrix (); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
241 retval(0) = result.unitary_matrix (); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
242 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
243 } |
10607
f7501986e42d
make schur more Matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
244 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
245 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
246 ComplexMatrix ctmp = arg.complex_matrix_value (); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
247 |
20762
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
248 if (nargout == 0 || nargout == 1) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
249 { |
20762
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
250 ComplexSCHUR result (ctmp, ord, false); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
251 retval(0) = mark_upper_triangular (result.schur_matrix ()); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
252 } |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
253 else |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
254 { |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
255 ComplexSCHUR result (ctmp, ord, true); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
256 retval(1) = mark_upper_triangular (result.schur_matrix ()); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
257 retval(0) = result.unitary_matrix (); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
258 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9758
diff
changeset
|
259 } |
2928 | 260 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
261 |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
262 return retval; |
2928 | 263 } |
264 | |
265 /* | |
7814
87865ed7405f
Second set of single precision test code and fix of resulting bugs
David Bateman <dbateman@free.fr>
parents:
7789
diff
changeset
|
266 %!test |
87865ed7405f
Second set of single precision test code and fix of resulting bugs
David Bateman <dbateman@free.fr>
parents:
7789
diff
changeset
|
267 %! a = [1, 2, 3; 4, 5, 9; 7, 8, 6]; |
87865ed7405f
Second set of single precision test code and fix of resulting bugs
David Bateman <dbateman@free.fr>
parents:
7789
diff
changeset
|
268 %! [u, s] = schur (a); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14460
diff
changeset
|
269 %! assert (u' * a * u, s, sqrt (eps)); |
7814
87865ed7405f
Second set of single precision test code and fix of resulting bugs
David Bateman <dbateman@free.fr>
parents:
7789
diff
changeset
|
270 |
87865ed7405f
Second set of single precision test code and fix of resulting bugs
David Bateman <dbateman@free.fr>
parents:
7789
diff
changeset
|
271 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14460
diff
changeset
|
272 %! a = single ([1, 2, 3; 4, 5, 9; 7, 8, 6]); |
7814
87865ed7405f
Second set of single precision test code and fix of resulting bugs
David Bateman <dbateman@free.fr>
parents:
7789
diff
changeset
|
273 %! [u, s] = schur (a); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14460
diff
changeset
|
274 %! assert (u' * a * u, s, sqrt (eps ("single"))); |
7814
87865ed7405f
Second set of single precision test code and fix of resulting bugs
David Bateman <dbateman@free.fr>
parents:
7789
diff
changeset
|
275 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14460
diff
changeset
|
276 %!error schur () |
19208
b155fad47055
Fix error messages and %!fail tests for schur().
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
277 %!error schur (1,2,3) |
b155fad47055
Fix error messages and %!fail tests for schur().
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
278 %!error [a,b,c] = schur (1) |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14460
diff
changeset
|
279 %!error <argument must be a square matrix> schur ([1, 2, 3; 4, 5, 6]) |
19208
b155fad47055
Fix error messages and %!fail tests for schur().
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
280 %!error <wrong type argument 'cell'> schur ({1}) |
19226
f707835af867
Rewrite schur built-in test as a %!warning to stop failure during 'make check'
Rik <rik@octave.org>
parents:
19208
diff
changeset
|
281 %!warning <incorrect ordered schur argument> schur ([1, 2; 3, 4], "bad_opt"); |
f707835af867
Rewrite schur built-in test as a %!warning to stop failure during 'make check'
Rik <rik@octave.org>
parents:
19208
diff
changeset
|
282 |
2928 | 283 */ |
10822 | 284 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
285 DEFUN (rsf2csf, args, nargout, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
286 "-*- texinfo -*-\n\ |
10822 | 287 @deftypefn {Function File} {[@var{U}, @var{T}] =} rsf2csf (@var{UR}, @var{TR})\n\ |
11553
01f703952eff
Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
288 Convert a real, upper quasi-triangular Schur@tie{}form @var{TR} to a complex,\n\ |
01f703952eff
Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
289 upper triangular Schur@tie{}form @var{T}.\n\ |
10822 | 290 \n\ |
12642
f96b9b9f141b
doc: Periodic grammarcheck and spellcheck of documentation.
Rik <octave@nomad.inbox5.com>
parents:
12584
diff
changeset
|
291 Note that the following relations hold:\n\ |
10822 | 292 \n\ |
12584
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
293 @tex\n\ |
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
294 $UR \\cdot TR \\cdot {UR}^T = U T U^{\\dagger}$ and\n\ |
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
295 $U^{\\dagger} U$ is the identity matrix I.\n\ |
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
296 @end tex\n\ |
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
297 @ifnottex\n\ |
17268
1c21f264d26f
doc: Rename @xcode macro to @tcode (transpose code) for clarity.
Rik <rik@octave.org>
parents:
16920
diff
changeset
|
298 @tcode{@var{UR} * @var{TR} * @var{UR}' = @var{U} * @var{T} * @var{U}'} and\n\ |
11553
01f703952eff
Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
299 @code{@var{U}' * @var{U}} is the identity matrix I.\n\ |
12584
7ef7e20057fa
Improve documentation strings in Linear Algebra chapter.
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
300 @end ifnottex\n\ |
10822 | 301 \n\ |
11553
01f703952eff
Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
302 Note also that @var{U} and @var{T} are not unique.\n\ |
01f703952eff
Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
303 @seealso{schur}\n\ |
10822 | 304 @end deftypefn") |
305 { | |
306 octave_value_list retval; | |
307 | |
308 if (args.length () == 2 && nargout <= 2) | |
309 { | |
310 if (! args(0).is_numeric_type ()) | |
311 gripe_wrong_type_arg ("rsf2csf", args(0)); | |
312 else if (! args(1).is_numeric_type ()) | |
313 gripe_wrong_type_arg ("rsf2csf", args(1)); | |
314 else if (args(0).is_complex_type () || args(1).is_complex_type ()) | |
11553
01f703952eff
Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
315 error ("rsf2csf: UR and TR must be real matrices"); |
10822 | 316 else |
317 { | |
318 | |
319 if (args(0).is_single_type () || args(1).is_single_type ()) | |
320 { | |
321 FloatMatrix u = args(0).float_matrix_value (); | |
322 FloatMatrix t = args(1).float_matrix_value (); | |
20762
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
323 |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
324 FloatComplexSCHUR cs (FloatSCHUR (t, u)); |
10822 | 325 |
20762
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
326 retval(1) = cs.schur_matrix (); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
327 retval(0) = cs.unitary_matrix (); |
10822 | 328 } |
329 else | |
330 { | |
331 Matrix u = args(0).matrix_value (); | |
332 Matrix t = args(1).matrix_value (); | |
20762
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
333 |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
334 ComplexSCHUR cs (SCHUR (t, u)); |
10822 | 335 |
20762
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
336 retval(1) = cs.schur_matrix (); |
f90c8372b7ba
eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20382
diff
changeset
|
337 retval(0) = cs.unitary_matrix (); |
10822 | 338 } |
339 } | |
340 } | |
341 else | |
342 print_usage (); | |
343 | |
344 return retval; | |
345 } | |
346 | |
347 /* | |
348 %!test | |
349 %! A = [1, 1, 1, 2; 1, 2, 1, 1; 1, 1, 3, 1; -2, 1, 1, 1]; | |
350 %! [u, t] = schur (A); | |
351 %! [U, T] = rsf2csf (u, t); | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14460
diff
changeset
|
352 %! assert (norm (u * t * u' - U * T * U'), 0, 1e-12); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14460
diff
changeset
|
353 %! assert (norm (A - U * T * U'), 0, 1e-12); |
10822 | 354 |
355 %!test | |
356 %! A = rand (10); | |
357 %! [u, t] = schur (A); | |
358 %! [U, T] = rsf2csf (u, t); | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14460
diff
changeset
|
359 %! assert (norm (tril (T, -1)), 0); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14460
diff
changeset
|
360 %! assert (norm (U * U'), 1, 1e-14); |
10822 | 361 |
14460
6c3441f3146b
Fix logm for complex matrix with real eigenvalues (bug #34893).
Marco Caliari <marco.caliari@univr.it>
parents:
14138
diff
changeset
|
362 %!test |
6c3441f3146b
Fix logm for complex matrix with real eigenvalues (bug #34893).
Marco Caliari <marco.caliari@univr.it>
parents:
14138
diff
changeset
|
363 %! A = [0, 1;-1, 0]; |
6c3441f3146b
Fix logm for complex matrix with real eigenvalues (bug #34893).
Marco Caliari <marco.caliari@univr.it>
parents:
14138
diff
changeset
|
364 %! [u, t] = schur (A); |
6c3441f3146b
Fix logm for complex matrix with real eigenvalues (bug #34893).
Marco Caliari <marco.caliari@univr.it>
parents:
14138
diff
changeset
|
365 %! [U, T] = rsf2csf (u,t); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14460
diff
changeset
|
366 %! assert (U * T * U', A, 1e-14); |
10822 | 367 */ |