annotate liboctave/Matrix-ext.cc @ 233:0e77ff277fdc

[project @ 1993-11-16 10:52:17 by jwe]
author jwe
date Tue, 16 Nov 1993 10:52:17 +0000
parents 1a48a1b91489
children 780cbbc57b7c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1 // Extra Matrix manipulations. -*- C++ -*-
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
2 /*
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
4 Copyright (C) 1992 John W. Eaton
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
5
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
7
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
11 later version.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
12
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
16 for more details.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
17
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, write to the Free
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
20 Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
21
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
22 */
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
23
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
24 #ifdef __GNUG__
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
25 #pragma implementation
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
26 #endif
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
27
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
28 #include "Matrix.h"
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
29 #include "mx-inlines.cc"
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
30 #include "lo-error.h"
233
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
31 #include "f77-uscore.h"
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
32
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
33 // Fortran functions we call.
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
34
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
35 extern "C"
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
36 {
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
37 int F77_FCN (dgesv) (const int*, const int*, double*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
38 int*, double*, const int*, int*);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
39
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
40 int F77_FCN (dgeqrf) (const int*, const int*, double*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
41 double*, double*, const int*, int*);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
42
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
43 int F77_FCN (dorgqr) (const int*, const int*, const int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
44 const int*, double*, double*, const int*, int*);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
45
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
46 int F77_FCN (dgeev) (const char*, const char*, const int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
47 const int*, double*, double*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
48 const int*, double*, const int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
49 const int*, int*, long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
50
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
51 int F77_FCN (dgeesx) (const char*, const char*, int (*)(), const char*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
52 const int*, double*, const int*, int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
53 double*, double*, const int*, double*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
54 double*, const int*, int*, const int*, int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
55 int*, long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
56
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
57 int F77_FCN (dgebal) (const char*, const int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
58 const int*, int*, int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
59 int*, long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
60
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
61 int F77_FCN (dgebak) (const char*, const char*, const int*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
62 const int*, double*, const int*, double*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
63 int*, long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
64
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
65 int F77_FCN (dgehrd) (const int*, const int*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
66 double*, const int*, double*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
67 const int*, int*, long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
68
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
69 int F77_FCN (dorghr) (const int*, const int*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
70 double*, const int*, double*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
71 const int*, int*, long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
72
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
73 int F77_FCN (dgesvd) (const char*, const char*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
74 const int*, double*, const int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
75 double*, const int*, double*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
76 double*, const int*, int*, long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
77
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
78 int F77_FCN (dpotrf) (const char*, const int*, double*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
79 int*, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
80
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
81 //
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
82 // fortran functions for generalized eigenvalue problems
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
83 //
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
84 int F77_FCN (reduce) (const int*, const int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
85 const int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
86 int*, int*, double*, double*);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
87
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
88 int F77_FCN (scaleg) (const int*, const int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
89 const int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
90 const int*, const int*, double*, double*, double*);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
91
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
92 int F77_FCN (gradeq) (const int*, const int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
93 const int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
94 int*, int*, double*, double*);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
95
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
96 /*
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
97 * f2c translates complex*16 as
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
98 *
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
99 * typedef struct { doublereal re, im; } doublecomplex;
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
100 *
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
101 * and Complex.h from libg++ uses
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
102 *
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
103 * protected:
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
104 * double re;
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
105 * double im;
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
106 *
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
107 * as the only data members, so this should work (fingers crossed that
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
108 * things don't change).
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
109 */
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
110
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
111 int F77_FCN (zgesv) (const int*, const int*, Complex*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
112 int*, Complex*, const int*, int*);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
113
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
114 int F77_FCN (zgeqrf) (const int*, const int*, Complex*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
115 Complex*, Complex*, const int*, int*);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
116
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
117 int F77_FCN (zgeesx) (const char*, const char*, int (*)(), const char*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
118 const int*, Complex*, const int*, int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
119 Complex*, Complex*, const int*, double*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
120 Complex*, const int*, double*, int*, int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
121 long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
122
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
123 int F77_FCN (zgebal) (const char*, const int*, Complex*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
124 int*, int*, double*, int*, long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
125
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
126 int F77_FCN (zgebak) (const char*, const char*, const int*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
127 const int*, double*, const int*, Complex*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
128 const int*, int*, long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
129
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
130 int F77_FCN (zgehrd) (const int*, const int*, const int*, Complex*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
131 const int*, Complex*, Complex*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
132 int*, long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
133
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
134 int F77_FCN (zunghr) (const int*, const int*, const int*, Complex*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
135 const int*, Complex*, Complex*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
136 int*, long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
137
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
138 int F77_FCN (zungqr) (const int*, const int*, const int*, Complex*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
139 const int*, Complex*, Complex*, const int*, int*);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
140
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
141 int F77_FCN (zgeev) (const char*, const char*, const int*, Complex*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
142 const int*, Complex*, Complex*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
143 Complex*, const int*, Complex*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
144 double*, int*, long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
145
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
146 int F77_FCN (zgesvd) (const char*, const char*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
147 const int*, Complex*, const int*, double*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
148 Complex*, const int*, Complex*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
149 Complex*, const int*, double*, int*, long, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
150
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
151 int F77_FCN (zpotrf) (const char*, const int*, Complex*, const int*,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
152 int*, long);
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
153 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
154
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
155 /*
22
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
156 * AEPBALANCE operations
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
157 */
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
158
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
159 int
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
160 AEPBALANCE::init (const Matrix& a, const char *balance_job)
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
161 {
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
162 if (a.nr != a.nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
163 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
164 (*current_liboctave_error_handler) ("AEPBALANCE requires square matrix");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
165 return -1;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
166 }
22
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
167
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
168 int n = a.nc;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
169
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
170 // Parameters for balance call.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
171
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
172 int info;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
173 int ilo;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
174 int ihi;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
175 double *scale = new double [n];
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
176
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
177 // Copy matrix into local structure.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
178
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
179 balanced_mat = a;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
180
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
181 F77_FCN (dgebal) (balance_job, &n, balanced_mat.fortran_vec (),
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
182 &n, &ilo, &ihi, scale, &info, 1L, 1L);
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
183
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
184 // Initialize balancing matrix to identity.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
185
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
186 balancing_mat = Matrix (n, n, 0.0);
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
187 for (int i = 0; i < n; i++)
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
188 balancing_mat.elem (i ,i) = 1.0;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
189
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
190 F77_FCN (dgebak) (balance_job, "R", &n, &ilo, &ihi, scale, &n,
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
191 balancing_mat.fortran_vec (), &n, &info, 1L, 1L);
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
192
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
193 delete [] scale;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
194
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
195 return info;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
196 }
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
197
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
198 int
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
199 ComplexAEPBALANCE::init (const ComplexMatrix& a, const char *balance_job)
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
200 {
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
201
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
202 int n = a.nc;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
203
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
204 // Parameters for balance call.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
205
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
206 int info;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
207 int ilo;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
208 int ihi;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
209 double *scale = new double [n];
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
210
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
211 // Copy matrix into local structure.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
212
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
213 balanced_mat = a;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
214
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
215 F77_FCN (zgebal) (balance_job, &n, balanced_mat.fortran_vec (),
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
216 &n, &ilo, &ihi, scale, &info, 1L, 1L);
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
217
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
218 // Initialize balancing matrix to identity.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
219
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
220 balancing_mat = Matrix (n, n, 0.0);
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
221 for (int i = 0; i < n; i++)
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
222 balancing_mat (i, i) = 1.0;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
223
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
224 F77_FCN (zgebak) (balance_job, "R", &n, &ilo, &ihi, scale, &n,
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
225 balancing_mat.fortran_vec(), &n, &info, 1L, 1L);
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
226
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
227 delete [] scale;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
228
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
229 return info;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
230 }
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
231
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
232 /*
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
233 * GEPBALANCE operations
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
234 */
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
235
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
236 int
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
237 GEPBALANCE::init (const Matrix& a, const Matrix& b, const char *balance_job)
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
238 {
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
239 if (a.nr != a.nc || a.nr != b.nr || b.nr != b.nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
240 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
241 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
242 ("GEPBALANCE requires square matrices of the same size");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
243 return -1;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
244 }
22
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
245
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
246 int n = a.nc;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
247
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
248 // Parameters for balance call.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
249
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
250 int info;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
251 int ilo;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
252 int ihi;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
253 double *cscale = new double [n];
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
254 double *cperm = new double [n];
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
255 Matrix wk (n, 6, 0.0);
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
256
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
257 // Back out the permutations:
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
258 //
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
259 // cscale contains the exponents of the column scaling factors in its
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
260 // ilo through ihi locations and the reducing column permutations in
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
261 // its first ilo-1 and its ihi+1 through n locations.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
262 //
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
263 // cperm contains the column permutations applied in grading the a and b
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
264 // submatrices in its ilo through ihi locations.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
265 //
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
266 // wk contains the exponents of the row scaling factors in its ilo
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
267 // through ihi locations, the reducing row permutations in its first
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
268 // ilo-1 and its ihi+1 through n locations, and the row permutations
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
269 // applied in grading the a and b submatrices in its n+ilo through
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
270 // n+ihi locations.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
271
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
272 // Copy matrices into local structure.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
273
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
274 balanced_a_mat = a;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
275 balanced_b_mat = b;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
276
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
277 // Initialize balancing matrices to identity.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
278
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
279 left_balancing_mat = Matrix(n,n,0.0);
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
280 for (int i = 0; i < n; i++)
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
281 left_balancing_mat (i, i) = 1.0;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
282
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
283 right_balancing_mat = left_balancing_mat;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
284
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
285 // Check for permutation option.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
286
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
287 if (*balance_job == 'P' || *balance_job == 'B')
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
288 {
233
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
289 F77_FCN (reduce) (&n, &n, balanced_a_mat.fortran_vec (),
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
290 &n, balanced_b_mat.fortran_vec (), &ilo, &ihi,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
291 cscale, wk.fortran_vec ());
22
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
292 }
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
293 else
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
294 {
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
295
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
296 // Set up for scaling later.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
297
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
298 ilo = 1;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
299 ihi = n;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
300 }
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
301
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
302 // Check for scaling option.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
303
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
304 if ((*balance_job == 'S' || *balance_job == 'B') && ilo != ihi)
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
305 {
233
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
306 F77_FCN (scaleg) (&n, &n, balanced_a_mat.fortran_vec (),
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
307 &n, balanced_b_mat.fortran_vec (), &ilo, &ihi,
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
308 cscale, cperm, wk.fortran_vec ());
22
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
309 }
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
310 else
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
311 {
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
312
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
313 // Set scaling data to 0's.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
314
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
315 for (int tmp = ilo-1; tmp < ihi; tmp++)
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
316 {
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
317 cscale[tmp] = 0.0;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
318 wk.elem(tmp,0) = 0.0;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
319 }
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
320 }
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
321
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
322 // Scaleg returns exponents, not values, so...
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
323
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
324 for (int tmp = ilo-1; tmp < ihi; tmp++)
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
325 {
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
326 cscale[tmp] = pow(2.0,cscale[tmp]);
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
327 wk.elem(tmp,0) = pow(2.0,-wk.elem(tmp,0));
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
328 }
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
329
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
330 // Column permutations/scaling.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
331
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
332 F77_FCN (dgebak) (balance_job, "R", &n, &ilo, &ihi, cscale, &n,
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
333 right_balancing_mat.fortran_vec (), &n, &info, 1L,
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
334 1L);
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
335
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
336 // Row permutations/scaling.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
337
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
338 F77_FCN (dgebak) (balance_job, "L", &n, &ilo, &ihi, &wk.elem (0, 0), &n,
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
339 left_balancing_mat.fortran_vec (), &n, &info, 1L, 1L);
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
340
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
341 // XXX FIXME XXX --- these four lines need to be added and debugged.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
342 // GEPBALANCE::init will work without them, though, so here they are.
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
343
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
344 #if 0
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
345 if ((*balance_job == 'P' || *balance_job == 'B') && ilo != ihi)
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
346 {
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
347 F77_FCN (gradeq) (&n, &n, balanced_a_mat.fortran_vec (),
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
348 &n, balanced_b_mat.fortran_vec (), &ilo, &ihi,
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
349 cperm, &wk.elem (0, 1));
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
350 }
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
351 #endif
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
352
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
353 // Transpose for aa = cc*a*dd convention...
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
354 left_balancing_mat = left_balancing_mat.transpose ();
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
355
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
356 delete [] cscale;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
357 delete [] cperm;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
358
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
359 return info;
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
360 }
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
361
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
362 /*
182
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
363 * CHOL stuff
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
364 */
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
365
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
366 int
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
367 CHOL::init (const Matrix& a)
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
368 {
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
369 if (a.nr != a.nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
370 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
371 (*current_liboctave_error_handler) ("CHOL requires square matrix");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
372 return -1;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
373 }
182
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
374
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
375 char uplo = 'U';
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
376
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
377 int n = a.nc;
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
378 int info;
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
379
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
380 double *h = dup (a.data, a.len);
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
381
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
382 F77_FCN (dpotrf) (&uplo, &n, h, &n, &info, 1L);
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
383
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
384 chol_mat = Matrix (h, n, n);
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
385
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
386 // If someone thinks of a more graceful way of doing this (or faster for
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
387 // that matter :-)), please let me know!
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
388
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
389 if (n > 1)
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
390 for (int j = 0; j < a.nc; j++)
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
391 for (int i = j+1; i < a.nr; i++)
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
392 chol_mat.elem (i, j) = 0.0;
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
393
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
394
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
395 return info;
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
396 }
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
397
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
398
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
399 int
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
400 ComplexCHOL::init (const ComplexMatrix& a)
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
401 {
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
402 if (a.nr != a.nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
403 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
404 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
405 ("ComplexCHOL requires square matrix");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
406 return -1;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
407 }
182
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
408
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
409 char uplo = 'U';
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
410
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
411 int n = a.nc;
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
412 int info;
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
413
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
414 Complex *h = dup (a.data, a.len);
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
415
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
416 F77_FCN (zpotrf) (&uplo, &n, h, &n, &info, 1L);
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
417
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
418 chol_mat = ComplexMatrix (h, n, n);
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
419
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
420 // If someone thinks of a more graceful way of doing this (or faster for
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
421 // that matter :-)), please let me know!
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
422
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
423 if (n > 1)
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
424 for (int j = 0; j < a.nc; j++)
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
425 for (int i = j+1; i < a.nr; i++)
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
426 chol_mat.elem (i, j) = 0.0;
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
427
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
428 return info;
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
429 }
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
430
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
431
2db13bf4f3e2 [project @ 1993-10-23 22:51:34 by jwe]
jwe
parents: 22
diff changeset
432 /*
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
433 * HESS stuff
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
434 */
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
435
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
436 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
437 HESS::init (const Matrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
438 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
439 if (a.nr != a.nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
440 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
441 (*current_liboctave_error_handler) ("HESS requires square matrix");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
442 return -1;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
443 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
444
22
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
445 char jobbal = 'N';
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
446 char side = 'R';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
447
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
448 int n = a.nc;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
449 int lwork = 32 * n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
450 int info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
451 int ilo;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
452 int ihi;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
453
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
454 double *h = dup(a.data, a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
455
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
456 double *tau = new double [n+1];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
457 double *scale = new double [n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
458 double *z = new double [n*n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
459 double *work = new double [lwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
460
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
461 F77_FCN (dgebal) (&jobbal, &n, h, &n, &ilo, &ihi, scale, &info,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
462 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
463
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
464 F77_FCN (dgehrd) (&n, &ilo, &ihi, h, &n, tau, work, &lwork, &info,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
465 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
466
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
467 copy(z,h,n*n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
468
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
469 F77_FCN (dorghr) (&n, &ilo, &ihi, z, &n, tau, work, &lwork, &info,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
470 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
471
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
472 F77_FCN (dgebak) (&jobbal, &side, &n, &ilo, &ihi, scale, &n, z, &n,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
473 &info, 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
474
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
475 // We need to clear out all of the area below the sub-diagonal which was used
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
476 // to store the unitary matrix.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
477
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
478 hess_mat = Matrix(h,n,n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
479 unitary_hess_mat = Matrix(z,n,n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
480
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
481 // If someone thinks of a more graceful way of doing this (or faster for
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
482 // that matter :-)), please let me know!
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
483
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
484 if (n > 2)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
485 for (int j = 0; j < a.nc; j++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
486 for (int i = j+2; i < a.nr; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
487 hess_mat.elem(i,j) = 0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
488
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
489 delete [] tau;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
490 delete [] work;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
491 delete [] scale;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
492
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
493 return info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
494 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
495
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
496
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
497 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
498 ComplexHESS::init (const ComplexMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
499 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
500 if (a.nr != a.nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
501 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
502 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
503 ("ComplexHESS requires square matrix");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
504 return -1;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
505 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
506
22
2cd2476fb32d [project @ 1993-08-10 20:28:05 by jwe]
jwe
parents: 3
diff changeset
507 char job = 'N';
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
508 char side = 'R';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
509
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
510 int n = a.nc;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
511 int lwork = 32 * n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
512 int info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
513 int ilo;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
514 int ihi;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
515
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
516 Complex *h = dup(a.data,a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
517
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
518 double *scale = new double [n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
519 Complex *tau = new Complex [n-1];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
520 Complex *work = new Complex [lwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
521 Complex *z = new Complex [n*n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
522
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
523 F77_FCN (zgebal) (&job, &n, h, &n, &ilo, &ihi, scale, &info, 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
524
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
525 F77_FCN (zgehrd) (&n, &ilo, &ihi, h, &n, tau, work, &lwork, &info, 1L,
233
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
526 1L);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
527
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
528 copy(z,h,n*n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
529
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
530 F77_FCN (zunghr) (&n, &ilo, &ihi, z, &n, tau, work, &lwork, &info, 1L,
233
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
531 1L);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
532
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
533 F77_FCN (zgebak) (&job, &side, &n, &ilo, &ihi, scale, &n, z, &n, &info,
233
0e77ff277fdc [project @ 1993-11-16 10:52:17 by jwe]
jwe
parents: 227
diff changeset
534 1L, 1L);
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
535
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
536 hess_mat = ComplexMatrix (h,n,n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
537 unitary_hess_mat = ComplexMatrix (z,n,n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
538
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
539 // If someone thinks of a more graceful way of doing this (or faster for
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
540 // that matter :-)), please let me know!
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
541
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
542 if (n > 2)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
543 for (int j = 0; j < a.nc; j++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
544 for (int i = j+2; i < a.nr; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
545 hess_mat.elem(i,j) = 0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
546
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
547 delete [] work;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
548 delete [] tau;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
549 delete [] scale;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
550
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
551 return info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
552 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
553
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
554 /*
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
555 * SCHUR stuff
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
556 */
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
557
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
558 static int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
559 select_ana (double *a, double *b)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
560 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
561 return (*a < 0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
562 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
563
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
564 static int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
565 select_dig (double *a, double *b)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
566 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
567 return (hypot (*a, *b) < 1.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
568 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
569
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
570 // GAG.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
571 extern "C" { static int (*dummy_select)(); }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
572
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
573 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
574 SCHUR::init (const Matrix& a, const char *ord)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
575 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
576 if (a.nr != a.nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
577 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
578 (*current_liboctave_error_handler) ("SCHUR requires square matrix");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
579 return -1;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
580 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
581
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
582 char jobvs = 'V';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
583 char sort;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
584
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
585 if (*ord == 'A' || *ord == 'D' || *ord == 'a' || *ord == 'd')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
586 sort = 'S';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
587 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
588 sort = 'N';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
589
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
590 char sense = 'N';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
591
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
592 int n = a.nc;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
593 int lwork = 8 * n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
594 int liwork = 1;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
595 int info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
596 int sdim;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
597 double rconde;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
598 double rcondv;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
599
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
600 double *s = dup(a.data,a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
601
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
602 double *wr = new double [n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
603 double *wi = new double [n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
604 double *q = new double [n*n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
605 double *work = new double [lwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
606
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
607 // These are not referenced for the non-ordered Schur routine.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
608
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
609 int *iwork = (int *) NULL;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
610 int *bwork = (int *) NULL;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
611 if (*ord == 'A' || *ord == 'D' || *ord == 'a' || *ord == 'd')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
612 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
613 iwork = new int [liwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
614 bwork = new int [n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
615 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
616
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
617 if (*ord == 'A' || *ord == 'a')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
618 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
619 F77_FCN (dgeesx) (&jobvs, &sort, select_ana, &sense, &n, s, &n,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
620 &sdim, wr, wi, q, &n, &rconde, &rcondv, work,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
621 &lwork, iwork, &liwork, bwork, &info, 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
622 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
623 else if (*ord == 'D' || *ord == 'd')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
624 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
625 F77_FCN (dgeesx) (&jobvs, &sort, select_dig, &sense, &n, s, &n,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
626 &sdim, wr, wi, q, &n, &rconde, &rcondv, work,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
627 &lwork, iwork, &liwork, bwork, &info, 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
628
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
629 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
630 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
631 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
632 F77_FCN (dgeesx) (&jobvs, &sort, dummy_select, &sense, &n, s,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
633 &n, &sdim, wr, wi, q, &n, &rconde, &rcondv,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
634 work, &lwork, iwork, &liwork, bwork, &info,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
635 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
636 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
637
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
638
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
639 schur_mat = Matrix (s, n, n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
640 unitary_mat = Matrix (q, n, n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
641
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
642 delete [] wr;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
643 delete [] wi;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
644 delete [] work;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
645 delete [] iwork;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
646 delete [] bwork;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
647
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
648 return info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
649 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
650
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
651 static int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
652 complex_select_ana (Complex *a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
653 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
654 return (real (*a) < 0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
655 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
656
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
657 static int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
658 complex_select_dig (Complex *a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
659 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
660 return (abs (*a) < 1.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
661 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
662
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
663 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
664 ComplexSCHUR::init (const ComplexMatrix& a, const char *ord)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
665 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
666 if (a.nr != a.nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
667 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
668 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
669 ("ComplexSCHUR requires square matrix");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
670 return -1;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
671 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
672
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
673 char jobvs = 'V';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
674 char sort;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
675 if (*ord == 'A' || *ord == 'D' || *ord == 'a' || *ord == 'd')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
676 sort = 'S';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
677 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
678 sort = 'N';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
679
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
680 char sense = 'N';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
681
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
682 int n = a.nc;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
683 int lwork = 8 * n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
684 int info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
685 int sdim;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
686 double rconde;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
687 double rcondv;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
688
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
689 double *rwork = new double [n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
690
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
691 // bwork is not referenced for non-ordered Schur.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
692
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
693 int *bwork = (int *) NULL;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
694 if (*ord == 'A' || *ord == 'D' || *ord == 'a' || *ord == 'd')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
695 bwork = new int [n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
696
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
697 Complex *s = dup(a.data,a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
698
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
699 Complex *work = new Complex [lwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
700 Complex *q = new Complex [n*n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
701 Complex *w = new Complex [n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
702
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
703 if (*ord == 'A' || *ord == 'a')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
704 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
705 F77_FCN (zgeesx) (&jobvs, &sort, complex_select_ana, &sense,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
706 &n, s, &n, &sdim, w, q, &n, &rconde, &rcondv,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
707 work, &lwork, rwork, bwork, &info, 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
708 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
709 else if (*ord == 'D' || *ord == 'd')
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
710 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
711 F77_FCN (zgeesx) (&jobvs, &sort, complex_select_dig, &sense,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
712 &n, s, &n, &sdim, w, q, &n, &rconde, &rcondv,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
713 work, &lwork, rwork, bwork, &info, 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
714 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
715 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
716 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
717 F77_FCN (zgeesx) (&jobvs, &sort, dummy_select, &sense, &n, s,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
718 &n, &sdim, w, q, &n, &rconde, &rcondv, work,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
719 &lwork, rwork, bwork, &info, 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
720 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
721
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
722 schur_mat = ComplexMatrix (s,n,n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
723 unitary_mat = ComplexMatrix (q,n,n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
724
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
725 delete [] w;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
726 delete [] work;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
727 delete [] rwork;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
728 delete [] bwork;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
729
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
730 return info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
731 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
732
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
733 ostream&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
734 operator << (ostream& os, const SCHUR& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
735 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
736 os << a.schur_matrix () << "\n";
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
737 os << a.unitary_matrix () << "\n";
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
738
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
739 return os;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
740 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
741
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
742 /*
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
743 * SVD stuff
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
744 */
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
745
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
746 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
747 SVD::init (const Matrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
748 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
749 int info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
750
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
751 int m = a.nr;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
752 int n = a.nc;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
753
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
754 char jobu = 'A';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
755 char jobv = 'A';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
756
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
757 double *tmp_data = dup (a.data, a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
758
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
759 int min_mn = m < n ? m : n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
760 int max_mn = m > n ? m : n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
761
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
762 double *u = new double[m*m];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
763 double *s_vec = new double[min_mn];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
764 double *vt = new double[n*n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
765
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
766 int tmp1 = 3*min_mn + max_mn;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
767 int tmp2 = 5*min_mn - 4;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
768 int lwork = tmp1 > tmp2 ? tmp1 : tmp2;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
769 double *work = new double[lwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
770
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
771 F77_FCN (dgesvd) (&jobu, &jobv, &m, &n, tmp_data, &m, s_vec, u, &m,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
772 vt, &n, work, &lwork, &info, 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
773
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
774 left_sm = Matrix (u, m, m);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
775 sigma = DiagMatrix (s_vec, m, n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
776 Matrix vt_m (vt, n, n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
777 right_sm = Matrix (vt_m.transpose ());
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
778
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
779 delete [] tmp_data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
780 delete [] work;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
781
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
782 return info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
783 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
784
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
785 ostream&
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
786 operator << (ostream& os, const SVD& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
787 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
788 os << a.left_singular_matrix () << "\n";
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
789 os << a.singular_values () << "\n";
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
790 os << a.right_singular_matrix () << "\n";
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
791
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
792 return os;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
793 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
794
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
795 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
796 ComplexSVD::init (const ComplexMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
797 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
798 int info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
799
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
800 int m = a.nr;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
801 int n = a.nc;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
802
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
803 char jobu = 'A';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
804 char jobv = 'A';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
805
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
806 Complex *tmp_data = dup (a.data, a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
807
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
808 int min_mn = m < n ? m : n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
809 int max_mn = m > n ? m : n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
810
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
811 Complex *u = new Complex[m*m];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
812 double *s_vec = new double[min_mn];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
813 Complex *vt = new Complex[n*n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
814
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
815 int lwork = 2*min_mn + max_mn;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
816 Complex *work = new Complex[lwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
817
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
818 int lrwork = 5*max_mn;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
819 double *rwork = new double[lrwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
820
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
821 F77_FCN (zgesvd) (&jobu, &jobv, &m, &n, tmp_data, &m, s_vec, u, &m,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
822 vt, &n, work, &lwork, rwork, &info, 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
823
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
824 left_sm = ComplexMatrix (u, m, m);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
825 sigma = DiagMatrix (s_vec, m, n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
826 ComplexMatrix vt_m (vt, n, n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
827 right_sm = ComplexMatrix (vt_m.hermitian ());
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
828
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
829 delete [] tmp_data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
830 delete [] work;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
831
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
832 return info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
833 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
834
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
835 /*
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
836 * EIG stuff.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
837 */
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
838
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
839 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
840 EIG::init (const Matrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
841 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
842 if (a.nr != a.nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
843 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
844 (*current_liboctave_error_handler) ("EIG requires square matrix");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
845 return -1;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
846 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
847
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
848 int n = a.nr;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
849
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
850 int info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
851
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
852 char jobvl = 'N';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
853 char jobvr = 'V';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
854
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
855 double *tmp_data = dup (a.data, a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
856 double *wr = new double[n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
857 double *wi = new double[n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
858 Matrix vr (n, n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
859 double *pvr = vr.fortran_vec ();
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
860 int lwork = 8*n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
861 double *work = new double[lwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
862
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
863 double dummy;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
864 int idummy = 1;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
865
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
866 F77_FCN (dgeev) (&jobvl, &jobvr, &n, tmp_data, &n, wr, wi, &dummy,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
867 &idummy, pvr, &n, work, &lwork, &info, 1L, 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
868
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
869 lambda.resize (n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
870 v.resize (n, n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
871
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
872 for (int j = 0; j < n; j++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
873 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
874 if (wi[j] == 0.0)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
875 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
876 lambda.elem (j) = Complex (wr[j]);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
877 for (int i = 0; i < n; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
878 v.elem (i, j) = vr.elem (i, j);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
879 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
880 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
881 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
882 if (j+1 >= n)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
883 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
884 (*current_liboctave_error_handler) ("EIG: internal error");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
885 return -1;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
886 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
887
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
888 for (int i = 0; i < n; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
889 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
890 lambda.elem (j) = Complex (wr[j], wi[j]);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
891 lambda.elem (j+1) = Complex (wr[j+1], wi[j+1]);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
892 double real_part = vr.elem (i, j);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
893 double imag_part = vr.elem (i, j+1);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
894 v.elem (i, j) = Complex (real_part, imag_part);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
895 v.elem (i, j+1) = Complex (real_part, -imag_part);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
896 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
897 j++;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
898 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
899 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
900
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
901 delete [] tmp_data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
902 delete [] wr;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
903 delete [] wi;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
904 delete [] work;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
905
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
906 return info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
907 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
908
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
909 int
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
910 EIG::init (const ComplexMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
911 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
912
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
913 if (a.nr != a.nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
914 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
915 (*current_liboctave_error_handler) ("EIG requires square matrix");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
916 return -1;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
917 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
918
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
919 int n = a.nr;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
920
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
921 int info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
922
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
923 char jobvl = 'N';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
924 char jobvr = 'V';
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
925
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
926 lambda.resize (n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
927 v.resize (n, n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
928
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
929 Complex *pw = lambda.fortran_vec ();
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
930 Complex *pvr = v.fortran_vec ();
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
931
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
932 Complex *tmp_data = dup (a.data, a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
933
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
934 int lwork = 8*n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
935 Complex *work = new Complex[lwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
936 double *rwork = new double[4*n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
937
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
938 Complex dummy;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
939 int idummy = 1;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
940
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
941 F77_FCN (zgeev) (&jobvl, &jobvr, &n, tmp_data, &n, pw, &dummy,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
942 &idummy, pvr, &n, work, &lwork, rwork, &info, 1L,
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
943 1L);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
944
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
945 delete [] tmp_data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
946 delete [] work;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
947 delete [] rwork;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
948
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
949 return info;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
950 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
951
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
952 /*
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
953 * LU stuff.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
954 */
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
955
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
956 LU::LU (const Matrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
957 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
958 if (a.nr == 0 || a.nc == 0 || a.nr != a.nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
959 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
960 (*current_liboctave_error_handler) ("LU requires square matrix");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
961 return;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
962 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
963
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
964 int n = a.nr;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
965
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
966 int *ipvt = new int [n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
967 int *pvt = new int [n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
968 double *tmp_data = dup (a.data, a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
969 int info = 0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
970 int zero = 0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
971 double b;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
972
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
973 F77_FCN (dgesv) (&n, &zero, tmp_data, &n, ipvt, &b, &n, &info);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
974
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
975 Matrix A_fact (tmp_data, n, n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
976
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
977 int i;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
978
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
979 for (i = 0; i < n; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
980 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
981 ipvt[i] -= 1;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
982 pvt[i] = i;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
983 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
984
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
985 for (i = 0; i < n - 1; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
986 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
987 int k = ipvt[i];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
988 if (k != i)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
989 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
990 int tmp = pvt[k];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
991 pvt[k] = pvt[i];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
992 pvt[i] = tmp;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
993 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
994 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
995
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
996 l.resize (n, n, 0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
997 u.resize (n, n, 0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
998 p.resize (n, n, 0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
999
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1000 for (i = 0; i < n; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1001 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1002 p.elem (i, pvt[i]) = 1.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1003
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1004 int j;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1005
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1006 l.elem (i, i) = 1.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1007 for (j = 0; j < i; j++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1008 l.elem (i, j) = A_fact.elem (i, j);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1009
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1010 for (j = i; j < n; j++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1011 u.elem (i, j) = A_fact.elem (i, j);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1012 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1013
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1014 delete [] ipvt;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1015 delete [] pvt;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1016 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1017
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1018 ComplexLU::ComplexLU (const ComplexMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1019 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1020 if (a.nr == 0 || a.nc == 0 || a.nr != a.nc)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
1021 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
1022 (*current_liboctave_error_handler) ("ComplexLU requires square matrix");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
1023 return;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
1024 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1025
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1026 int n = a.nr;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1027
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1028 int *ipvt = new int [n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1029 int *pvt = new int [n];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1030 Complex *tmp_data = dup (a.data, a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1031 int info = 0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1032 int zero = 0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1033 Complex b;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1034
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1035 F77_FCN (zgesv) (&n, &zero, tmp_data, &n, ipvt, &b, &n, &info);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1036
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1037 ComplexMatrix A_fact (tmp_data, n, n);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1038
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1039 int i;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1040
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1041 for (i = 0; i < n; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1042 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1043 ipvt[i] -= 1;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1044 pvt[i] = i;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1045 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1046
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1047 for (i = 0; i < n - 1; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1048 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1049 int k = ipvt[i];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1050 if (k != i)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1051 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1052 int tmp = pvt[k];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1053 pvt[k] = pvt[i];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1054 pvt[i] = tmp;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1055 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1056 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1057
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1058 l.resize (n, n, 0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1059 u.resize (n, n, 0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1060 p.resize (n, n, 0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1061
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1062 for (i = 0; i < n; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1063 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1064 p.elem (i, pvt[i]) = 1.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1065
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1066 int j;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1067
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1068 l.elem (i, i) = 1.0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1069 for (j = 0; j < i; j++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1070 l.elem (i, j) = A_fact.elem (i, j);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1071
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1072 for (j = i; j < n; j++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1073 u.elem (i, j) = A_fact.elem (i, j);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1074 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1075
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1076 delete [] ipvt;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1077 delete [] pvt;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1078 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1079
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1080 /*
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1081 * QR stuff.
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1082 */
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1083
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1084 QR::QR (const Matrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1085 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1086 int m = a.nr;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1087 int n = a.nc;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1088
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1089 if (m == 0 || n == 0)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
1090 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
1091 (*current_liboctave_error_handler) ("QR must have non-empty matrix");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
1092 return;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
1093 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1094
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1095 double *tmp_data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1096 int min_mn = m < n ? m : n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1097 double *tau = new double[min_mn];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1098 int lwork = 32*n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1099 double *work = new double[lwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1100 int info = 0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1101
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1102 if (m > n)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1103 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1104 tmp_data = new double [m*m];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1105 copy (tmp_data, a.data, a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1106 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1107 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1108 tmp_data = dup (a.data, a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1109
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1110 F77_FCN (dgeqrf) (&m, &n, tmp_data, &m, tau, work, &lwork, &info);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1111
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1112 delete [] work;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1113
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1114 r.resize (m, n, 0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1115 for (int j = 0; j < n; j++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1116 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1117 int limit = j < min_mn-1 ? j : min_mn-1;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1118 for (int i = 0; i <= limit; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1119 r.elem (i, j) = tmp_data[m*j+i];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1120 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1121
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1122 lwork = 32*m;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1123 work = new double[lwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1124
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1125 F77_FCN (dorgqr) (&m, &m, &min_mn, tmp_data, &m, tau, work, &lwork, &info);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1126
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1127 q = Matrix (tmp_data, m, m);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1128
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1129 delete [] tau;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1130 delete [] work;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1131 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1132
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1133 ComplexQR::ComplexQR (const ComplexMatrix& a)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1134 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1135 int m = a.nr;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1136 int n = a.nc;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1137
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1138 if (m == 0 || n == 0)
227
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
1139 {
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
1140 (*current_liboctave_error_handler)
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
1141 ("ComplexQR must have non-empty matrix");
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
1142 return;
1a48a1b91489 [project @ 1993-11-15 10:10:35 by jwe]
jwe
parents: 182
diff changeset
1143 }
3
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1144
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1145 Complex *tmp_data;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1146 int min_mn = m < n ? m : n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1147 Complex *tau = new Complex[min_mn];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1148 int lwork = 32*n;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1149 Complex *work = new Complex[lwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1150 int info = 0;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1151
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1152 if (m > n)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1153 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1154 tmp_data = new Complex [m*m];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1155 copy (tmp_data, a.data, a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1156 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1157 else
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1158 tmp_data = dup (a.data, a.len);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1159
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1160 F77_FCN (zgeqrf) (&m, &n, tmp_data, &m, tau, work, &lwork, &info);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1161
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1162 delete [] work;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1163
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1164 r.resize (m, n, 0.0);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1165 for (int j = 0; j < n; j++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1166 {
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1167 int limit = j < min_mn-1 ? j : min_mn-1;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1168 for (int i = 0; i <= limit; i++)
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1169 r.elem (i, j) = tmp_data[m*j+i];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1170 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1171
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1172 lwork = 32*m;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1173 work = new Complex[lwork];
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1174
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1175 F77_FCN (zungqr) (&m, &m, &min_mn, tmp_data, &m, tau, work, &lwork, &info);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1176
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1177 q = ComplexMatrix (tmp_data, m, m);
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1178
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1179 delete [] tau;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1180 delete [] work;
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1181 }
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1182
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1183 /*
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1184 ;;; Local Variables: ***
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1185 ;;; mode: C++ ***
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1186 ;;; page-delimiter: "^/\\*" ***
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1187 ;;; End: ***
9a4c07481e61 [project @ 1993-08-08 01:20:23 by jwe]
jwe
parents:
diff changeset
1188 */