annotate src/balance.cc @ 712:36ba0576bd1b

[project @ 1994-09-19 14:18:15 by jwe]
author jwe
date Mon, 19 Sep 1994 14:18:48 +0000
parents 0a81458ef677
children e81d3a66725e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
519
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
1 // f-balance.cc -*- C++ -*-
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
2 /*
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
3
453
393e95f46b51 [project @ 1994-06-06 00:05:20 by jwe]
jwe
parents: 240
diff changeset
4 Copyright (C) 1993, 1994 John W. Eaton
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
5
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
7
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
11 later version.
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
12
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
16 for more details.
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
17
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, write to the Free
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
20 Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
21
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
22 */
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
23
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
24 // Written by A. S. Hodel <scotte@eng.auburn.edu>
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
25
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 162
diff changeset
26 #ifdef HAVE_CONFIG_H
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 162
diff changeset
27 #include "config.h"
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
28 #endif
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
29
453
393e95f46b51 [project @ 1994-06-06 00:05:20 by jwe]
jwe
parents: 240
diff changeset
30 #include "dMatrix.h"
393e95f46b51 [project @ 1994-06-06 00:05:20 by jwe]
jwe
parents: 240
diff changeset
31 #include "CMatrix.h"
393e95f46b51 [project @ 1994-06-06 00:05:20 by jwe]
jwe
parents: 240
diff changeset
32 #include "dbleAEPBAL.h"
393e95f46b51 [project @ 1994-06-06 00:05:20 by jwe]
jwe
parents: 240
diff changeset
33 #include "CmplxAEPBAL.h"
393e95f46b51 [project @ 1994-06-06 00:05:20 by jwe]
jwe
parents: 240
diff changeset
34 #include "dbleAEPBAL.h"
393e95f46b51 [project @ 1994-06-06 00:05:20 by jwe]
jwe
parents: 240
diff changeset
35 #include "CmplxAEPBAL.h"
393e95f46b51 [project @ 1994-06-06 00:05:20 by jwe]
jwe
parents: 240
diff changeset
36 #include "dbleGEPBAL.h"
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
37
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
38 #include "tree-const.h"
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
39 #include "user-prefs.h"
49
445ea777560a [project @ 1993-08-11 20:44:08 by jwe]
jwe
parents: 16
diff changeset
40 #include "gripes.h"
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
41 #include "error.h"
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
42 #include "utils.h"
544
20fbad23ae51 [project @ 1994-07-22 05:04:44 by jwe]
jwe
parents: 519
diff changeset
43 #include "help.h"
519
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
44 #include "defun-dld.h"
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
45
701
0a81458ef677 [project @ 1994-09-15 02:23:24 by jwe]
jwe
parents: 636
diff changeset
46 DEFUN_DLD_BUILTIN ("balance", Fbalance, Sbalance, 4, 4,
519
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
47 "AA = balance (A [, OPT]) or [[DD,] AA] = balance (A [, OPT])\n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
48 \n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
49 generalized eigenvalue problem:\n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
50 \n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
51 [cc, dd, aa, bb] = balance (a, b [, opt])\n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
52 \n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
53 where OPT is an optional single character argument as follows: \n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
54 \n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
55 N: no balancing; arguments copied, transformation(s) set to identity\n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
56 P: permute argument(s) to isolate eigenvalues where possible\n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
57 S: scale to improve accuracy of computed eigenvalues\n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
58 B: (default) permute and scale, in that order. Rows/columns\n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
59 of a (and b) that are isolated by permutation are not scaled\n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
60 \n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
61 [DD, AA] = balance (A, OPT) returns aa = dd\a*dd,\n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
62 \n\
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
63 [CC, DD, AA, BB] = balance (A, B, OPT) returns AA (BB) = CC*A*DD (CC*B*DD)")
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
64 {
497
88614b380d6e [project @ 1994-07-08 02:00:57 by jwe]
jwe
parents: 453
diff changeset
65 Octave_object retval;
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
66
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 503
diff changeset
67 int nargin = args.length ();
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 503
diff changeset
68
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 701
diff changeset
69 if (nargin < 1 || nargin > 3 || nargout < 0 || nargout > 4)
519
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
70 {
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
71 print_usage ("balance");
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
72 return retval;
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
73 }
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
74
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
75 char *bal_job;
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
76 int my_nargin; // # args w/o optional string arg
b9284136189a [project @ 1994-07-19 14:40:20 by jwe]
jwe
parents: 516
diff changeset
77
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
78 // Determine if balancing option is listed. Set my_nargin to the
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
79 // number of matrix inputs.
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
80
610
14b2a186a5c0 [project @ 1994-08-14 00:55:49 by jwe]
jwe
parents: 544
diff changeset
81 if (args(nargin-1).is_string ())
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
82 {
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
83 bal_job = args(nargin-1).string_value ();
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 701
diff changeset
84 my_nargin = nargin-1;
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
85 }
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
86 else
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
87 {
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
88 bal_job = "B";
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 701
diff changeset
89 my_nargin = nargin;
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
90 }
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
91
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 701
diff changeset
92 tree_constant arg_a = args(0);
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
93
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
94 int a_nr = arg_a.rows ();
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
95 int a_nc = arg_a.columns ();
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
96
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
97 // Check argument 1 dimensions.
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
98
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
99 if (empty_arg ("balance", a_nr, a_nc) < 0)
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
100 return retval;
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
101
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
102 if (a_nr != a_nc)
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
103 {
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
104 gripe_square_matrix_required ("balance");
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
105 return retval;
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
106 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
107
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
108 // Extract argument 1 parameter for both AEP and GEP.
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
109
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
110 Matrix aa;
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
111 ComplexMatrix caa;
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
112 if (arg_a.is_complex_type ())
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
113 caa = arg_a.complex_matrix_value ();
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
114 else
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
115 aa = arg_a.matrix_value ();
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
116
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
117 if (error_state)
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
118 return retval;
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
119
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
120 // Treat AEP/ GEP cases.
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
121
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
122 switch (my_nargin)
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
123 {
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
124 case 1:
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
125
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
126 // Algebraic eigenvalue problem.
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
127
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
128 if (arg_a.is_complex_type ())
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
129 {
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
130 ComplexAEPBALANCE result (caa, bal_job);
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
131
497
88614b380d6e [project @ 1994-07-08 02:00:57 by jwe]
jwe
parents: 453
diff changeset
132 if (nargout == 0 || nargout == 1)
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
133 retval(0) = result.balanced_matrix ();
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
134 else
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
135 {
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
136 retval(1) = result.balanced_matrix ();
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
137 retval(0) = result.balancing_matrix ();
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
138 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
139 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
140 else
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
141 {
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
142 AEPBALANCE result (aa, bal_job);
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
143
497
88614b380d6e [project @ 1994-07-08 02:00:57 by jwe]
jwe
parents: 453
diff changeset
144 if (nargout == 0 || nargout == 1)
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
145 retval(0) = result.balanced_matrix ();
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
146 else
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
147 {
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
148 retval(1) = result.balanced_matrix ();
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
149 retval(0) = result.balancing_matrix ();
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
150 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
151 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
152 break;
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
153
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
154 case 2:
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
155 {
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
156 // Generalized eigenvalue problem.
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
157
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
158 // 1st we have to check argument 2 dimensions and type...
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
159
712
36ba0576bd1b [project @ 1994-09-19 14:18:15 by jwe]
jwe
parents: 701
diff changeset
160 tree_constant arg_b = args(1);
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
161
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
162 int b_nr = arg_b.rows ();
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
163 int b_nc = arg_b.columns ();
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
164
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
165 // Check argument 2 dimensions -- must match arg 1.
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
166
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
167 if (b_nr != b_nc || b_nr != a_nr)
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
168 {
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
169 gripe_nonconformant ();
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
170 return retval;
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
171 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
172
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
173 // Now, extract the second matrix...
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
174 // Extract argument 1 parameter for both AEP and GEP.
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
175
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
176 Matrix bb;
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
177 ComplexMatrix cbb;
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
178 if (arg_b.is_complex_type ())
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
179 cbb = arg_b.complex_matrix_value ();
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
180 else
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
181 bb = arg_b.matrix_value ();
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
182
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
183 if (error_state)
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
184 return retval;
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
185
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
186 // Both matrices loaded, now let's check what kind of arithmetic:
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
187
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
188 if (arg_a.is_complex_type () || arg_b.is_complex_type ())
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
189 {
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
190 if (arg_a.is_real_type ())
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
191 caa = aa;
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
192
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
193 if (arg_b.is_real_type ())
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
194 cbb = bb;
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
195
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
196 // Compute magnitudes of elements for balancing purposes.
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
197 // Surely there's a function I can call someplace!
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
198
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
199 for (int i = 0; i < a_nr; i++)
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
200 for (int j = 0; j < a_nc; j++)
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
201 {
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
202 aa.elem (i, j) = abs (caa.elem (i, j));
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
203 bb.elem (i, j) = abs (cbb.elem (i, j));
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
204 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
205 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
206
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 162
diff changeset
207 GEPBALANCE result (aa, bb, bal_job);
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
208
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
209 if (arg_a.is_complex_type () || arg_b.is_complex_type ())
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
210 {
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
211 caa = result.left_balancing_matrix () * caa
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
212 * result.right_balancing_matrix ();
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
213
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
214 cbb = result.left_balancing_matrix () * cbb
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
215 * result.right_balancing_matrix ();
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
216
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
217 switch (nargout)
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
218 {
503
dbb8a47acc3a [project @ 1994-07-08 23:41:39 by jwe]
jwe
parents: 497
diff changeset
219 case 0:
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
220 case 1:
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
221 warning ("balance: should use two output arguments");
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
222 retval(0) = caa;
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
223 break;
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
224
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
225 case 2:
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
226 retval(1) = cbb;
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
227 retval(0) = caa;
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
228 break;
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
229
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
230 case 4:
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
231 retval(3) = cbb;
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
232 retval(2) = caa;
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
233 retval(1) = result.right_balancing_matrix ();
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
234 retval(0) = result.left_balancing_matrix ();
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
235 break;
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
236
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
237 default:
503
dbb8a47acc3a [project @ 1994-07-08 23:41:39 by jwe]
jwe
parents: 497
diff changeset
238 error ("balance: invalid number of output arguments");
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
239 break;
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
240 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
241 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
242 else
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
243 {
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
244 switch (nargout)
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
245 {
503
dbb8a47acc3a [project @ 1994-07-08 23:41:39 by jwe]
jwe
parents: 497
diff changeset
246 case 0:
dbb8a47acc3a [project @ 1994-07-08 23:41:39 by jwe]
jwe
parents: 497
diff changeset
247 case 1:
dbb8a47acc3a [project @ 1994-07-08 23:41:39 by jwe]
jwe
parents: 497
diff changeset
248 warning ("balance: should use two output arguments");
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
249 retval(0) = result.balanced_a_matrix ();
503
dbb8a47acc3a [project @ 1994-07-08 23:41:39 by jwe]
jwe
parents: 497
diff changeset
250 break;
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
251
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
252 case 2:
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
253 retval(1) = result.balanced_b_matrix ();
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
254 retval(0) = result.balanced_a_matrix ();
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
255 break;
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
256
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
257 case 4:
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
258 retval(3) = result.balanced_b_matrix ();
516
309fc59f66ee [project @ 1994-07-13 02:31:31 by jwe]
jwe
parents: 506
diff changeset
259 retval(2) = result.balanced_a_matrix ();
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
260 retval(1) = result.right_balancing_matrix ();
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
261 retval(0) = result.left_balancing_matrix ();
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
262 break;
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
263
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
264 default:
503
dbb8a47acc3a [project @ 1994-07-08 23:41:39 by jwe]
jwe
parents: 497
diff changeset
265 error ("balance: invalid number of output arguments");
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
266 break;
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
267 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
268 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
269 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
270 break;
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
271
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
272 default:
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
273 error ("balance requires one (AEP) or two (GEP) numeric arguments");
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
274 break;
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
275 }
636
fae2bd91c027 [project @ 1994-08-23 18:39:50 by jwe]
jwe
parents: 610
diff changeset
276
16
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
277 return retval;
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
278 }
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
279
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
280 /*
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
281 ;;; Local Variables: ***
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
282 ;;; mode: C++ ***
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
283 ;;; page-delimiter: "^/\\*" ***
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
284 ;;; End: ***
77d2552fbb8b [project @ 1993-08-10 20:08:02 by jwe]
jwe
parents:
diff changeset
285 */