annotate src/DLD-FUNCTIONS/balance.cc @ 7482:29980c6b8604

don't check f77_exception_encountered
author John W. Eaton <jwe@octave.org>
date Thu, 14 Feb 2008 21:57:50 -0500
parents 81bed50b9feb
children 82be108cc558
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
1 /*
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
2
7017
a1dbe9d80eee [project @ 2007-10-12 21:27:11 by jwe]
jwe
parents: 7016
diff changeset
3 Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2005, 2006,
a1dbe9d80eee [project @ 2007-10-12 21:27:11 by jwe]
jwe
parents: 7016
diff changeset
4 2007 John W. Eaton
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
5
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
7
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5823
diff changeset
10 Free Software Foundation; either version 3 of the License, or (at your
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5823
diff changeset
11 option) any later version.
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
12
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
16 for more details.
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
17
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5823
diff changeset
19 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5823
diff changeset
20 <http://www.gnu.org/licenses/>.
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
21
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
22 */
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
23
3911
8389e78e67d4 [project @ 2002-04-28 02:15:38 by jwe]
jwe
parents: 3887
diff changeset
24 // Author: A. S. Hodel <scotte@eng.auburn.edu>
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
25
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
26 #ifdef HAVE_CONFIG_H
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
27 #include <config.h>
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
28 #endif
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
29
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
30 #include <string>
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
31
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
32 #include "CmplxAEPBAL.h"
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
33 #include "CmplxAEPBAL.h"
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
34 #include "dbleAEPBAL.h"
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
35 #include "dbleAEPBAL.h"
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 3911
diff changeset
36 #include "quit.h"
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
37
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
38 #include "defun-dld.h"
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
39 #include "error.h"
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
40 #include "f77-fcn.h"
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
41 #include "gripes.h"
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
42 #include "oct-obj.h"
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
43 #include "utils.h"
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
44
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
45 extern "C"
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
46 {
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
47 F77_RET_T
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
48 F77_FUNC (dggbal, DGGBAL) (F77_CONST_CHAR_ARG_DECL, const octave_idx_type& N,
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
49 double* A, const octave_idx_type& LDA, double* B,
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
50 const octave_idx_type& LDB, octave_idx_type& ILO, octave_idx_type& IHI,
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
51 double* LSCALE, double* RSCALE,
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
52 double* WORK, octave_idx_type& INFO
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
53 F77_CHAR_ARG_LEN_DECL);
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
54
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
55 F77_RET_T
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
56 F77_FUNC (dggbak, DGGBAK) (F77_CONST_CHAR_ARG_DECL,
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
57 F77_CONST_CHAR_ARG_DECL,
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
58 const octave_idx_type& N, const octave_idx_type& ILO,
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
59 const octave_idx_type& IHI, const double* LSCALE,
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
60 const double* RSCALE, octave_idx_type& M, double* V,
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
61 const octave_idx_type& LDV, octave_idx_type& INFO
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
62 F77_CHAR_ARG_LEN_DECL
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
63 F77_CHAR_ARG_LEN_DECL);
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
64
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
65 F77_RET_T
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
66 F77_FUNC (zggbal, ZGGBAL) (F77_CONST_CHAR_ARG_DECL, const octave_idx_type& N,
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
67 Complex* A, const octave_idx_type& LDA, Complex* B,
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
68 const octave_idx_type& LDB, octave_idx_type& ILO, octave_idx_type& IHI,
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
69 double* LSCALE, double* RSCALE,
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
70 double* WORK, octave_idx_type& INFO
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
71 F77_CHAR_ARG_LEN_DECL);
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
72 }
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
73
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
74 DEFUN_DLD (balance, args, nargout,
3548
ab7fa5a8f23f [project @ 2000-02-03 01:17:15 by jwe]
jwe
parents: 3523
diff changeset
75 "-*- texinfo -*-\n\
3372
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
76 @deftypefn {Loadable Function} {@var{aa} =} balance (@var{a}, @var{opt})\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
77 @deftypefnx {Loadable Function} {[@var{dd}, @var{aa}] =} balance (@var{a}, @var{opt})\n\
3402
9610d364e444 [project @ 2000-01-05 04:36:38 by jwe]
jwe
parents: 3372
diff changeset
78 @deftypefnx {Loadable Function} {[@var{cc}, @var{dd}, @var{aa}, @var{bb}] =} balance (@var{a}, @var{b}, @var{opt})\n\
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
79 \n\
7096
81bed50b9feb [project @ 2007-11-02 16:13:43 by jwe]
jwe
parents: 7017
diff changeset
80 Compute @code{aa = dd \\ a * dd} in which @code{aa} is a matrix whose\n\
81bed50b9feb [project @ 2007-11-02 16:13:43 by jwe]
jwe
parents: 7017
diff changeset
81 row and column norms are roughly equal in magnitude, and\n\
81bed50b9feb [project @ 2007-11-02 16:13:43 by jwe]
jwe
parents: 7017
diff changeset
82 @code{dd} = @code{p * d}, in which @code{p} is a permutation\n\
3372
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
83 matrix and @code{d} is a diagonal matrix of powers of two. This allows\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
84 the equilibration to be computed without roundoff. Results of\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
85 eigenvalue calculation are typically improved by balancing first.\n\
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
86 \n\
7096
81bed50b9feb [project @ 2007-11-02 16:13:43 by jwe]
jwe
parents: 7017
diff changeset
87 If four output values are requested, compute @code{aa = cc*a*dd} and\n\
81bed50b9feb [project @ 2007-11-02 16:13:43 by jwe]
jwe
parents: 7017
diff changeset
88 @code{bb = cc*b*dd)}, in which @code{aa} and @code{bb} have non-zero\n\
3372
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
89 elements of approximately the same magnitude and @code{cc} and @code{dd}\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
90 are permuted diagonal matrices as in @code{dd} for the algebraic\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
91 eigenvalue problem.\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
92 \n\
7096
81bed50b9feb [project @ 2007-11-02 16:13:43 by jwe]
jwe
parents: 7017
diff changeset
93 The eigenvalue balancing option @code{opt} may be one of:\n\
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
94 \n\
3372
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
95 @table @asis\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
96 @item @code{\"N\"}, @code{\"n\"}\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
97 No balancing; arguments copied, transformation(s) set to identity.\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
98 \n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
99 @item @code{\"P\"}, @code{\"p\"}\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
100 Permute argument(s) to isolate eigenvalues where possible.\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
101 \n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
102 @item @code{\"S\"}, @code{\"s\"}\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
103 Scale to improve accuracy of computed eigenvalues.\n\
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
104 \n\
3372
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
105 @item @code{\"B\"}, @code{\"b\"}\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
106 Permute and scale, in that order. Rows/columns of a (and b)\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
107 that are isolated by permutation are not scaled. This is the default\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
108 behavior.\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
109 @end table\n\
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
110 \n\
3372
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
111 Algebraic eigenvalue balancing uses standard @sc{Lapack} routines.\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
112 \n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
113 Generalized eigenvalue problem balancing uses Ward's algorithm\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
114 (SIAM Journal on Scientific and Statistical Computing, 1981).\n\
f16c2ce14886 [project @ 1999-11-23 19:07:09 by jwe]
jwe
parents: 3221
diff changeset
115 @end deftypefn")
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
116 {
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
117 octave_value_list retval;
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
118
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
119 int nargin = args.length ();
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
120
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
121 if (nargin < 1 || nargin > 3 || nargout < 0 || nargout > 4)
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
122 {
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5307
diff changeset
123 print_usage ();
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
124 return retval;
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
125 }
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
126
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
127 // determine if it's AEP or GEP
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
128 int AEPcase = nargin == 1 ? 1 : args(1).is_string ();
3523
b80bbb43a1a9 [project @ 2000-02-02 10:25:52 by jwe]
jwe
parents: 3402
diff changeset
129 std::string bal_job;
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
130
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
131 // problem dimension
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
132 octave_idx_type nn = args(0).rows ();
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
133
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
134 octave_idx_type arg_is_empty = empty_arg ("balance", nn, args(0).columns());
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
135
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
136 if (arg_is_empty < 0)
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
137 return retval;
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
138
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
139 if (arg_is_empty > 0)
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
140 return octave_value_list (2, Matrix ());
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
141
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
142 if (nn != args(0).columns())
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
143 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
144 gripe_square_matrix_required ("balance");
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
145 return retval;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
146 }
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
147
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
148 // Extract argument 1 parameter for both AEP and GEP.
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
149 Matrix aa;
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
150 ComplexMatrix caa;
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
151
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
152 if (args(0).is_complex_type ())
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
153 caa = args(0).complex_matrix_value ();
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
154 else
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
155 aa = args(0).matrix_value ();
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
156
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
157 if (error_state)
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
158 return retval;
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
159
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
160 // Treat AEP/GEP cases.
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
161 if (AEPcase)
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
162 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
163 // Algebraic eigenvalue problem.
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
164
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
165 if (nargin == 1)
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
166 bal_job = "B";
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
167 else if (args(1).is_string ())
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
168 bal_job = args(1).string_value ();
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
169 else
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
170 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
171 error ("balance: AEP argument 2 must be a string");
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
172 return retval;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
173 }
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
174
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
175 // balance the AEP
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
176 if (args(0).is_complex_type ())
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
177 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
178 ComplexAEPBALANCE result (caa, bal_job);
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
179
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
180 if (nargout == 0 || nargout == 1)
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
181 retval(0) = result.balanced_matrix ();
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
182 else
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
183 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
184 retval(1) = result.balanced_matrix ();
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
185 retval(0) = result.balancing_matrix ();
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
186 }
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
187 }
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
188 else
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
189 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
190 AEPBALANCE result (aa, bal_job);
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
191
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
192 if (nargout == 0 || nargout == 1)
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
193 retval(0) = result.balanced_matrix ();
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
194 else
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
195 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
196 retval(1) = result.balanced_matrix ();
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
197 retval(0) = result.balancing_matrix ();
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
198 }
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
199 }
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
200 }
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
201 else
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
202 {
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
203 // Generalized eigenvalue problem.
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
204 if (nargin == 2)
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
205 bal_job = "B";
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
206 else if (args(2).is_string ())
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
207 bal_job = args(2).string_value ();
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
208 else
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
209 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
210 error ("balance: GEP argument 3 must be a string");
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
211 return retval;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
212 }
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
213
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
214 if ((nn != args(1).columns ()) || (nn != args(1).rows ()))
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
215 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
216 gripe_nonconformant ();
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
217 return retval;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
218 }
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
219
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
220 Matrix bb;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
221 ComplexMatrix cbb;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
222
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
223 if (args(1).is_complex_type ())
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
224 cbb = args(1).complex_matrix_value ();
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
225 else
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
226 bb = args(1).matrix_value ();
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
227
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
228 if (error_state)
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
229 return retval;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
230
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
231 // Both matrices loaded, now let's check what kind of arithmetic:
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
232 // first, declare variables used in both the real and complex case
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
233
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
234 octave_idx_type ilo, ihi, info;
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
235 RowVector lscale(nn), rscale(nn), work(6*nn);
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
236 char job = bal_job[0];
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
237
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
238 static octave_idx_type complex_case
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
239 = (args(0).is_complex_type () || args(1).is_complex_type ());
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
240
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
241 // now balance
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
242 if (complex_case)
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
243 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
244 if (args(0).is_real_type ())
3587
b11f9c33558f [project @ 2000-02-08 05:54:21 by jwe]
jwe
parents: 3548
diff changeset
245 caa = ComplexMatrix (aa);
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
246
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
247 if (args(1).is_real_type ())
3587
b11f9c33558f [project @ 2000-02-08 05:54:21 by jwe]
jwe
parents: 3548
diff changeset
248 cbb = ComplexMatrix (bb);
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
249
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
250 F77_XFCN (zggbal, ZGGBAL,
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
251 (F77_CONST_CHAR_ARG2 (&job, 1),
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
252 nn, caa.fortran_vec (), nn, cbb.fortran_vec (),
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
253 nn, ilo, ihi, lscale.fortran_vec (),
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
254 rscale.fortran_vec (), work.fortran_vec (), info
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
255 F77_CHAR_ARG_LEN (1)));
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
256 }
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
257 else
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
258 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
259 // real matrices case
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
260
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
261 F77_XFCN (dggbal, DGGBAL,
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
262 (F77_CONST_CHAR_ARG2 (&job, 1),
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
263 nn, aa.fortran_vec (), nn, bb.fortran_vec (),
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
264 nn, ilo, ihi, lscale.fortran_vec (),
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
265 rscale.fortran_vec (), work.fortran_vec (), info
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
266 F77_CHAR_ARG_LEN (1)));
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
267 }
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
268
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
269 // Since we just want the balancing matrices, we can use dggbal
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
270 // for both the real and complex cases.
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
271
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
272 Matrix Pl(nn,nn), Pr(nn,nn);
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
273
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
274 for (octave_idx_type ii = 0; ii < nn; ii++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4628
diff changeset
275 for (octave_idx_type jj = 0; jj < nn; jj++)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 3911
diff changeset
276 {
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 3911
diff changeset
277 OCTAVE_QUIT;
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 3911
diff changeset
278
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 3911
diff changeset
279 Pl(ii,jj) = Pr(ii,jj) = (ii == jj ? 1.0 : 0.0);
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 3911
diff changeset
280 }
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
281
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
282 // left first
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
283 F77_XFCN (dggbak, DGGBAK,
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
284 (F77_CONST_CHAR_ARG2 (&job, 1),
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
285 F77_CONST_CHAR_ARG2 ("L", 1),
4628
c0121a3b9cbe [project @ 2003-11-17 20:19:07 by jwe]
jwe
parents: 4566
diff changeset
286 nn, ilo, ihi, lscale.data (), rscale.data (),
c0121a3b9cbe [project @ 2003-11-17 20:19:07 by jwe]
jwe
parents: 4566
diff changeset
287 nn, Pl.fortran_vec (), nn, info
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
288 F77_CHAR_ARG_LEN (1)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
289 F77_CHAR_ARG_LEN (1)));
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
290
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
291 // then right
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
292 F77_XFCN (dggbak, DGGBAK,
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
293 (F77_CONST_CHAR_ARG2 (&job, 1),
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
294 F77_CONST_CHAR_ARG2 ("R", 1),
4628
c0121a3b9cbe [project @ 2003-11-17 20:19:07 by jwe]
jwe
parents: 4566
diff changeset
295 nn, ilo, ihi, lscale.data (), rscale.data (),
c0121a3b9cbe [project @ 2003-11-17 20:19:07 by jwe]
jwe
parents: 4566
diff changeset
296 nn, Pr.fortran_vec (), nn, info
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
297 F77_CHAR_ARG_LEN (1)
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4153
diff changeset
298 F77_CHAR_ARG_LEN (1)));
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
299
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
300 switch (nargout)
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
301 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
302 case 0:
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
303 case 1:
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
304 warning ("balance: used GEP, should have two output arguments");
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
305 if (complex_case)
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
306 retval(0) = caa;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
307 else
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
308 retval(0) = aa;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
309 break;
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
310
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
311 case 2:
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
312 if (complex_case)
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
313 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
314 retval(1) = cbb;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
315 retval(0) = caa;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
316 }
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
317 else
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
318 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
319 retval(1) = bb;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
320 retval(0) = aa;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
321 }
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
322 break;
3181
3f6a813eb09e [project @ 1998-09-25 02:50:29 by jwe]
jwe
parents: 3179
diff changeset
323
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
324 case 4:
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
325 if (complex_case)
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
326 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
327 retval(3) = cbb;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
328 retval(2) = caa;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
329 }
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
330 else
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
331 {
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
332 retval(3) = bb;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
333 retval(2) = aa;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
334 }
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
335 retval(1) = Pr;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
336 retval(0) = Pl.transpose (); // so that aa_bal = cc*aa*dd, etc.
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
337 break;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
338
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
339 default:
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
340 error ("balance: invalid number of output arguments");
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
341 break;
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
342 }
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
343 }
3185
9580887dd160 [project @ 1998-09-26 02:45:55 by jwe]
jwe
parents: 3181
diff changeset
344
2928
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
345 return retval;
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
346 }
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
347
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
348 /*
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
349 ;;; Local Variables: ***
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
350 ;;; mode: C++ ***
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
351 ;;; End: ***
295f037b4b3e [project @ 1997-05-05 05:32:33 by jwe]
jwe
parents:
diff changeset
352 */