annotate src/pt-const.cc @ 513:3c95cec7dd05

[project @ 1994-07-12 19:52:40 by jwe]
author jwe
date Tue, 12 Jul 1994 19:55:11 +0000
parents f13cce2fda30
children 7ea224e713cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1 // The constants for the tree class. -*- C++ -*-
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
3
296
3c23b8ea9099 [project @ 1994-01-17 02:49:15 by jwe]
jwe
parents: 279
diff changeset
4 Copyright (C) 1992, 1993, 1994 John W. Eaton
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
5
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
7
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
11 later version.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
12
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
16 for more details.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
17
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, write to the Free
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
20 Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
21
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
22 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
23
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 217
diff changeset
24 #ifdef HAVE_CONFIG_H
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 217
diff changeset
25 #include "config.h"
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
26 #endif
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
27
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
28 #if defined (__GNUG__)
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
29 #pragma implementation
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
30 #endif
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
31
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
32 #include <strstream.h>
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
33 #include <iostream.h>
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
34 #include <fstream.h>
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
35 #include <string.h>
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
36 #include <ctype.h>
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
37
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
38 #include "EIG.h"
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
39
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
40 #include "unwind-prot.h"
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
41 #include "tree-const.h"
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
42 #include "user-prefs.h"
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
43 #include "variables.h"
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
44 #include "octave.h"
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
45 #include "error.h"
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
46 #include "gripes.h"
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
47 #include "input.h"
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
48 #include "octave-hist.h"
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
49 #include "pager.h"
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
50 #include "utils.h"
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
51 #include "parse.h"
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
52 #include "lex.h"
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
53
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
54 #ifndef MAX
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
55 #define MAX(a,b) ((a) > (b) ? (a) : (b))
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
56 #endif
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
57
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
58 #ifndef MIN
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
59 #define MIN(a,b) ((a) < (b) ? (a) : (b))
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
60 #endif
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
61
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
62 tree_constant::~tree_constant (void)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
63 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
64 #if defined (MDEBUG)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
65 cerr << "~tree_constant: rep: " << rep
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
66 << " rep->count: " << rep->count << "\n";
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
67 #endif
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
68
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
69 if (--rep->count <= 0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
70 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
71 delete rep;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
72 rep = (tree_constant_rep *) NULL;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
73 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
74 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
75
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
76 #if defined (MDEBUG)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
77 void *
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
78 tree_constant::operator new (size_t size)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
79 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
80 tree_constant *p = ::new tree_constant;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
81 cerr << "tree_constant::new(): " << p << "\n";
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
82 return p;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
83 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
84
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
85 void
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
86 tree_constant::operator delete (void *p, size_t size)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
87 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
88 cerr << "tree_constant::delete(): " << p << "\n";
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
89 ::delete p;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
90 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
91 #endif
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
92
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
93 /*
96
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
94 * Construct return vector of empty matrices. Return empty matrices
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
95 * and/or gripe when appropriate.
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
96 */
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
97 Octave_object
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 161
diff changeset
98 vector_of_empties (int nargout, const char *fcn_name)
96
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
99 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
100 Octave_object retval;
96
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
101
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
102 // Got an empty argument, check if should gripe/return empty values.
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
103
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
104 int flag = user_pref.propagate_empty_matrices;
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
105 if (flag != 0)
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
106 {
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
107 if (flag < 0)
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
108 gripe_empty_arg (fcn_name, 0);
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
109
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
110 Matrix m;
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
111 retval.resize (nargout ? nargout : 1);
96
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
112 for (int i = 0; i < nargout; i++)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
113 retval(i) = tree_constant (m);
96
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
114 }
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
115 else
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
116 gripe_empty_arg (fcn_name, 1);
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
117
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
118 return retval;
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
119 }
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
120
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
121 Matrix
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
122 max (const Matrix& a, const Matrix& b)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
123 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
124 int nr = a.rows ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
125 int nc = a.columns ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
126 if (nr != b.rows () || nc != b.columns ())
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
127 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
128 error ("two-arg max expecting args of same size");
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
129 return Matrix ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
130 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
131
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
132 Matrix result (nr, nc);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
133
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
134 for (int j = 0; j < nc; j++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
135 for (int i = 0; i < nr; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
136 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
137 double a_elem = a.elem (i, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
138 double b_elem = b.elem (i, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
139 result.elem (i, j) = MAX (a_elem, b_elem);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
140 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
141
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
142 return result;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
143 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
144
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
145 ComplexMatrix
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
146 max (const ComplexMatrix& a, const ComplexMatrix& b)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
147 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
148 int nr = a.rows ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
149 int nc = a.columns ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
150 if (nr != b.rows () || nc != b.columns ())
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
151 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
152 error ("two-arg max expecting args of same size");
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
153 return ComplexMatrix ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
154 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
155
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
156 ComplexMatrix result (nr, nc);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
157
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
158 for (int j = 0; j < nc; j++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
159 for (int i = 0; i < nr; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
160 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
161 double abs_a_elem = abs (a.elem (i, j));
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
162 double abs_b_elem = abs (b.elem (i, j));
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
163 if (abs_a_elem > abs_b_elem)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
164 result.elem (i, j) = a.elem (i, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
165 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
166 result.elem (i, j) = b.elem (i, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
167 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
168
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
169 return result;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
170 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
171
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
172 Matrix
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
173 min (const Matrix& a, const Matrix& b)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
174 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
175 int nr = a.rows ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
176 int nc = a.columns ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
177 if (nr != b.rows () || nc != b.columns ())
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
178 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
179 error ("two-arg min expecting args of same size");
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
180 return Matrix ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
181 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
182
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
183 Matrix result (nr, nc);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
184
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
185 for (int j = 0; j < nc; j++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
186 for (int i = 0; i < nr; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
187 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
188 double a_elem = a.elem (i, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
189 double b_elem = b.elem (i, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
190 result.elem (i, j) = MIN (a_elem, b_elem);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
191 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
192
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
193 return result;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
194 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
195
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
196 ComplexMatrix
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
197 min (const ComplexMatrix& a, const ComplexMatrix& b)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
198 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
199 int nr = a.rows ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
200 int nc = a.columns ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
201 if (nr != b.rows () || nc != b.columns ())
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
202 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
203 error ("two-arg min expecting args of same size");
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
204 return ComplexMatrix ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
205 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
206
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
207 ComplexMatrix result (nr, nc);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
208
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
209 for (int j = 0; j < nc; j++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
210 for (int i = 0; i < nr; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
211 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
212 double abs_a_elem = abs (a.elem (i, j));
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
213 double abs_b_elem = abs (b.elem (i, j));
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
214 if (abs_a_elem < abs_b_elem)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
215 result.elem (i, j) = a.elem (i, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
216 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
217 result.elem (i, j) = b.elem (i, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
218 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
219
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
220 return result;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
221 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
222
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
223 static void
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
224 get_dimensions (const tree_constant& a, const char *warn_for,
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
225 int& nr, int& nc)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
226 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
227 tree_constant tmpa = a.make_numeric ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
228
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
229 if (tmpa.is_scalar_type ())
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
230 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
231 double tmp = tmpa.double_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
232 nr = nc = NINT (tmp);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
233 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
234 else
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
235 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
236 nr = tmpa.rows ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
237 nc = tmpa.columns ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
238
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
239 if ((nr == 1 && nc == 2) || (nr == 2 && nc == 1))
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
240 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
241 ColumnVector v = tmpa.to_vector ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
242
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
243 nr = NINT (v.elem (0));
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
244 nc = NINT (v.elem (1));
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
245 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
246 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
247 warning ("%s (A): use %s (size (A)) instead", warn_for, warn_for);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
248 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
249
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
250 check_dimensions (nr, nc, warn_for); // May set error_state.
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
251 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
252
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
253 static void
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
254 get_dimensions (const tree_constant& a, const tree_constant& b,
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
255 const char *warn_for, int& nr, int& nc)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
256 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
257 tree_constant tmpa = a.make_numeric ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
258 tree_constant tmpb = b.make_numeric ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
259
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
260 if (tmpa.is_scalar_type () && tmpb.is_scalar_type ())
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
261 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
262 nr = NINT (tmpa.double_value ());
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
263 nc = NINT (tmpb.double_value ());
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
264
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
265 check_dimensions (nr, nc, warn_for); // May set error_state.
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
266 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
267 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
268 error ("%s: expecting two scalar arguments", warn_for);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
269 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
270
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
271 tree_constant
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
272 fill_matrix (const tree_constant& a, double val, const char *warn_for)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
273 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
274 int nr, nc;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
275 get_dimensions (a, warn_for, nr, nc);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
276
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
277 if (error_state)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
278 return tree_constant ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
279
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
280 Matrix m (nr, nc, val);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
281
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
282 return tree_constant (m);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
283 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
284
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
285 tree_constant
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
286 fill_matrix (const tree_constant& a, const tree_constant& b,
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
287 double val, const char *warn_for)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
288 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
289 int nr, nc;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
290 get_dimensions (a, b, warn_for, nr, nc); // May set error_state.
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
291
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
292 if (error_state)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
293 return tree_constant ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
294
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
295 Matrix m (nr, nc, val);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
296
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
297 return tree_constant (m);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
298 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
299
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
300 tree_constant
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
301 identity_matrix (const tree_constant& a)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
302 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
303 int nr, nc;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
304 get_dimensions (a, "eye", nr, nc); // May set error_state.
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
305
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
306 if (error_state)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
307 return tree_constant ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
308
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
309 Matrix m (nr, nc, 0.0);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
310
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
311 if (nr > 0 && nc > 0)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
312 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
313 int n = MIN (nr, nc);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
314 for (int i = 0; i < n; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
315 m.elem (i, i) = 1.0;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
316 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
317
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
318 return tree_constant (m);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
319 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
320
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
321 tree_constant
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
322 identity_matrix (const tree_constant& a, const tree_constant& b)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
323 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
324 int nr, nc;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
325 get_dimensions (a, b, "eye", nr, nc); // May set error_state.
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
326
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
327 if (error_state)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
328 return tree_constant ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
329
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
330 Matrix m (nr, nc, 0.0);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
331
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
332 if (nr > 0 && nc > 0)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
333 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
334 int n = MIN (nr, nc);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
335 for (int i = 0; i < n; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
336 m.elem (i, i) = 1.0;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
337 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
338
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
339 return tree_constant (m);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
340 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
341
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
342 static Octave_object
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
343 find_to_fortran_idx (const ColumnVector i_idx, const ColumnVector j_idx,
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
344 const tree_constant& val, int nr, int nc, int nargout)
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
345 {
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
346 Octave_object retval (nargout);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
347
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
348 switch (nargout)
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
349 {
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
350 case 1:
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
351 {
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
352 int count = i_idx.length ();
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
353 ColumnVector tmp (count);
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
354 for (int i = 0; i < count; i++)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
355 tmp (i) = nr * (j_idx (i) - 1.0) + i_idx (i);
512
f13cce2fda30 [project @ 1994-07-12 19:21:17 by jwe]
jwe
parents: 511
diff changeset
356 retval(0) = tree_constant (tmp, 1);
f13cce2fda30 [project @ 1994-07-12 19:21:17 by jwe]
jwe
parents: 511
diff changeset
357 // If you want this to work more like Matlab, use the following line
f13cce2fda30 [project @ 1994-07-12 19:21:17 by jwe]
jwe
parents: 511
diff changeset
358 // instead of the previous one.
f13cce2fda30 [project @ 1994-07-12 19:21:17 by jwe]
jwe
parents: 511
diff changeset
359 // retval(0) = tree_constant (tmp, (nr != 1));
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
360 }
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
361 break;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
362 case 3:
513
3c95cec7dd05 [project @ 1994-07-12 19:52:40 by jwe]
jwe
parents: 512
diff changeset
363 retval(2) = val;
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
364 case 2:
513
3c95cec7dd05 [project @ 1994-07-12 19:52:40 by jwe]
jwe
parents: 512
diff changeset
365 retval(0) = tree_constant (i_idx, 1);
512
f13cce2fda30 [project @ 1994-07-12 19:21:17 by jwe]
jwe
parents: 511
diff changeset
366 // If you want this to work more like Matlab, use the following line
f13cce2fda30 [project @ 1994-07-12 19:21:17 by jwe]
jwe
parents: 511
diff changeset
367 // instead of the previous one.
513
3c95cec7dd05 [project @ 1994-07-12 19:52:40 by jwe]
jwe
parents: 512
diff changeset
368 // retval(0) = tree_constant (i_idx, (nr != 1));
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
369 retval(1) = tree_constant (j_idx, 1);
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
370 break;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
371 default:
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
372 panic_impossible ();
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
373 break;
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
374 }
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
375
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
376 return retval;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
377 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
378
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
379 static Octave_object
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
380 find_nonzero_elem_idx (const Matrix& m, int nargout)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
381 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
382 int count = 0;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
383 int m_nr = m.rows ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
384 int m_nc = m.columns ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
385
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
386 int i, j;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
387 for (j = 0; j < m_nc; j++)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
388 for (i = 0; i < m_nr; i++)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
389 if (m.elem (i, j) != 0.0)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
390 count++;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
391
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
392 Matrix result;
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
393 Octave_object retval (nargout, result);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
394
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
395 if (count == 0)
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
396 return retval;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
397
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
398 ColumnVector i_idx (count);
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
399 ColumnVector j_idx (count);
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
400 ColumnVector v (count);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
401
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
402 count = 0;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
403 for (j = 0; j < m_nc; j++)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
404 for (i = 0; i < m_nr; i++)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
405 {
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
406 double d = m.elem (i, j);
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
407 if (d != 0.0)
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
408 {
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
409 i_idx (count) = i + 1;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
410 j_idx (count) = j + 1;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
411 v (count) = d;
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
412 count++;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
413 }
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
414 }
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
415
513
3c95cec7dd05 [project @ 1994-07-12 19:52:40 by jwe]
jwe
parents: 512
diff changeset
416 tree_constant tmp (v, 1);
3c95cec7dd05 [project @ 1994-07-12 19:52:40 by jwe]
jwe
parents: 512
diff changeset
417 return find_to_fortran_idx (i_idx, j_idx, tmp, m_nr, m_nc, nargout);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
418 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
419
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
420 static Octave_object
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
421 find_nonzero_elem_idx (const ComplexMatrix& m, int nargout)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
422 {
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
423 int count = 0;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
424 int m_nr = m.rows ();
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
425 int m_nc = m.columns ();
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
426
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
427 int i, j;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
428 for (j = 0; j < m_nc; j++)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
429 for (i = 0; i < m_nr; i++)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
430 if (m.elem (i, j) != 0.0)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
431 count++;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
432
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
433 Matrix result;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
434 Octave_object retval (nargout, result);
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
435
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
436 if (count == 0)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
437 return retval;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
438
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
439 ColumnVector i_idx (count);
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
440 ColumnVector j_idx (count);
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
441 ComplexColumnVector v (count);
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
442
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
443 count = 0;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
444 for (j = 0; j < m_nc; j++)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
445 for (i = 0; i < m_nr; i++)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
446 {
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
447 Complex c = m.elem (i, j);
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
448 if (c != 0.0)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
449 {
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
450 i_idx (count) = i;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
451 j_idx (count) = j;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
452 v (count) = c;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
453 count++;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
454 }
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
455 }
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
456
513
3c95cec7dd05 [project @ 1994-07-12 19:52:40 by jwe]
jwe
parents: 512
diff changeset
457 tree_constant tmp (v, 1);
3c95cec7dd05 [project @ 1994-07-12 19:52:40 by jwe]
jwe
parents: 512
diff changeset
458 return find_to_fortran_idx (i_idx, j_idx, tmp, m_nr, m_nc, nargout);
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
459 }
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
460
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
461 Octave_object
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
462 find_nonzero_elem_idx (const tree_constant& a, int nargout)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
463 {
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
464 Matrix result;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
465
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
466 nargout = (nargout == 0) ? 1 : nargout;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
467 Octave_object retval (nargout, result);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
468
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
469 tree_constant tmp = a.make_numeric ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
470
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
471 switch (tmp.const_type ())
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
472 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
473 case tree_constant_rep::matrix_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
474 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
475 Matrix m = tmp.matrix_value ();
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
476 return find_nonzero_elem_idx (m, nargout);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
477 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
478 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
479 case tree_constant_rep::scalar_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
480 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
481 double d = tmp.double_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
482 if (d != 0.0)
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
483 {
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
484 retval(0) = 1.0;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
485 if (nargout > 1)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
486 retval(1) = 1.0;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
487 if (nargout > 2)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
488 retval(2) = d;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
489 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
490 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
491 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
492 case tree_constant_rep::complex_matrix_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
493 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
494 ComplexMatrix m = tmp.complex_matrix_value ();
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
495 return find_nonzero_elem_idx (m, nargout);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
496 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
497 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
498 case tree_constant_rep::complex_scalar_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
499 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
500 Complex c = tmp.complex_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
501 if (c != 0.0)
511
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
502 {
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
503 retval(0) = 1.0;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
504 if (nargout > 1)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
505 retval(1) = 1.0;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
506 if (nargout > 2)
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
507 retval(2) = c;
08a3f07adc78 [project @ 1994-07-12 17:58:03 by jwe]
jwe
parents: 506
diff changeset
508 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
509 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
510 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
511 default:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
512 break;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
513 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
514 return retval;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
515 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
516
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
517 // XXX FIXME XXX -- the next two functions (and expm) should really be just
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
518 // one...
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
519
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
520 Octave_object
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
521 matrix_log (const tree_constant& a)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
522 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
523 Octave_object retval (1);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
524
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
525 tree_constant tmp = a.make_numeric ();;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
526
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
527 if (tmp.rows () == 0 || tmp.columns () == 0)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
528 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
529 int flag = user_pref.propagate_empty_matrices;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
530 if (flag != 0)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
531 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
532 if (flag < 0)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
533 gripe_empty_arg ("logm", 0);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
534 Matrix m;
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
535 retval(0) = tree_constant (m);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
536 return retval;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
537 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
538 else
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
539 gripe_empty_arg ("logm", 1);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
540 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
541
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
542 switch (tmp.const_type ())
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
543 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
544 case tree_constant_rep::matrix_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
545 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
546 Matrix m = tmp.matrix_value ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
547
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
548 int nr = m.rows ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
549 int nc = m.columns ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
550
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
551 if (nr == 0 || nc == 0 || nr != nc)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
552 gripe_square_matrix_required ("logm");
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
553 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
554 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
555 EIG m_eig (m);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
556 ComplexColumnVector lambda (m_eig.eigenvalues ());
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
557 ComplexMatrix Q (m_eig.eigenvectors ());
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
558
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
559 for (int i = 0; i < nr; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
560 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
561 Complex elt = lambda.elem (i);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
562 if (imag (elt) == 0.0 && real (elt) > 0.0)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
563 lambda.elem (i) = log (real (elt));
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
564 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
565 lambda.elem (i) = log (elt);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
566 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
567
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
568 ComplexDiagMatrix D (lambda);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
569 ComplexMatrix result = Q * D * Q.inverse ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
570
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
571 retval(0) = tree_constant (result);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
572 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
573 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
574 break;
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
575 case tree_constant_rep::complex_matrix_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
576 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
577 ComplexMatrix m = tmp.complex_matrix_value ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
578
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
579 int nr = m.rows ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
580 int nc = m.columns ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
581
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
582 if (nr == 0 || nc == 0 || nr != nc)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
583 gripe_square_matrix_required ("logm");
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
584 else
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
585 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
586 EIG m_eig (m);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
587 ComplexColumnVector lambda (m_eig.eigenvalues ());
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
588 ComplexMatrix Q (m_eig.eigenvectors ());
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
589
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
590 for (int i = 0; i < nr; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
591 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
592 Complex elt = lambda.elem (i);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
593 if (imag (elt) == 0.0 && real (elt) > 0.0)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
594 lambda.elem (i) = log (real (elt));
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
595 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
596 lambda.elem (i) = log (elt);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
597 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
598
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
599 ComplexDiagMatrix D (lambda);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
600 ComplexMatrix result = Q * D * Q.inverse ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
601
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
602 retval(0) = tree_constant (result);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
603 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
604 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
605 break;
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
606 case tree_constant_rep::scalar_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
607 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
608 double d = tmp.double_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
609 if (d > 0.0)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
610 retval(0) = tree_constant (log (d));
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
611 else
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
612 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
613 Complex dtmp (d);
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
614 retval(0) = tree_constant (log (dtmp));
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
615 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
616 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
617 break;
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
618 case tree_constant_rep::complex_scalar_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
619 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
620 Complex c = tmp.complex_value ();
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
621 retval(0) = tree_constant (log (c));
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
622 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
623 break;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
624 default:
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
625 break;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
626 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
627 return retval;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
628 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
629
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
630 Octave_object
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
631 matrix_sqrt (const tree_constant& a)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
632 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
633 Octave_object retval (1);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
634
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
635 tree_constant tmp = a.make_numeric ();;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
636
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
637 if (tmp.rows () == 0 || tmp.columns () == 0)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
638 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
639 int flag = user_pref.propagate_empty_matrices;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
640 if (flag != 0)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
641 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
642 if (flag < 0)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
643 gripe_empty_arg ("sqrtm", 0);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
644 Matrix m;
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
645 retval(0) = tree_constant (m);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
646 return retval;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
647 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
648 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
649 gripe_empty_arg ("sqrtm", 1);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
650 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
651
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
652 switch (tmp.const_type ())
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
653 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
654 case tree_constant_rep::matrix_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
655 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
656 Matrix m = tmp.matrix_value ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
657
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
658 int nr = m.rows ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
659 int nc = m.columns ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
660
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
661 if (nr == 0 || nc == 0 || nr != nc)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
662 gripe_square_matrix_required ("sqrtm");
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
663 else
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
664 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
665 EIG m_eig (m);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
666 ComplexColumnVector lambda (m_eig.eigenvalues ());
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
667 ComplexMatrix Q (m_eig.eigenvectors ());
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
668
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
669 for (int i = 0; i < nr; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
670 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
671 Complex elt = lambda.elem (i);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
672 if (imag (elt) == 0.0 && real (elt) > 0.0)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
673 lambda.elem (i) = sqrt (real (elt));
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
674 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
675 lambda.elem (i) = sqrt (elt);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
676 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
677
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
678 ComplexDiagMatrix D (lambda);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
679 ComplexMatrix result = Q * D * Q.inverse ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
680
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
681 retval(0) = tree_constant (result);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
682 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
683 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
684 break;
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
685 case tree_constant_rep::complex_matrix_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
686 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
687 ComplexMatrix m = tmp.complex_matrix_value ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
688
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
689 int nr = m.rows ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
690 int nc = m.columns ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
691
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
692 if (nr == 0 || nc == 0 || nr != nc)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
693 gripe_square_matrix_required ("sqrtm");
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
694 else
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
695 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
696 EIG m_eig (m);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
697 ComplexColumnVector lambda (m_eig.eigenvalues ());
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
698 ComplexMatrix Q (m_eig.eigenvectors ());
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
699
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
700 for (int i = 0; i < nr; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
701 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
702 Complex elt = lambda.elem (i);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
703 if (imag (elt) == 0.0 && real (elt) > 0.0)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
704 lambda.elem (i) = sqrt (real (elt));
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
705 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
706 lambda.elem (i) = sqrt (elt);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
707 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
708
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
709 ComplexDiagMatrix D (lambda);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
710 ComplexMatrix result = Q * D * Q.inverse ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
711
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
712 retval(0) = tree_constant (result);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
713 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
714 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
715 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
716 case tree_constant_rep::scalar_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
717 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
718 double d = tmp.double_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
719 if (d > 0.0)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
720 retval(0) = tree_constant (sqrt (d));
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
721 else
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
722 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
723 Complex dtmp (d);
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
724 retval(0) = tree_constant (sqrt (dtmp));
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
725 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
726 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
727 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
728 case tree_constant_rep::complex_scalar_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
729 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
730 Complex c = tmp.complex_value ();
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
731 retval(0) = tree_constant (log (c));
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
732 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
733 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
734 default:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
735 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
736 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
737 return retval;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
738 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
739
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
740 Octave_object
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
741 column_max (const Octave_object& args, int nargout)
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
742 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
743 Octave_object retval;
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
744
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
745 tree_constant arg1;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
746 tree_constant arg2;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
747 tree_constant_rep::constant_type arg1_type =
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
748 tree_constant_rep::unknown_constant;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
749 tree_constant_rep::constant_type arg2_type =
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
750 tree_constant_rep::unknown_constant;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
751
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
752 int nargin = args.length ();
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
753
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
754 switch (nargin)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
755 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
756 case 3:
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
757 arg2 = args(2).make_numeric ();
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
758 arg2_type = arg2.const_type ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
759 // Fall through...
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
760 case 2:
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
761 arg1 = args(1).make_numeric ();
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
762 arg1_type = arg1.const_type ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
763 break;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
764 default:
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
765 panic_impossible ();
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
766 break;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
767 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
768
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
769 if (nargin == 2 && (nargout == 1 || nargout == 0))
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
770 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
771 retval.resize (1);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
772 switch (arg1_type)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
773 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
774 case tree_constant_rep::scalar_constant:
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
775 retval(0) = tree_constant (arg1.double_value ());
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
776 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
777 case tree_constant_rep::complex_scalar_constant:
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
778 retval(0) = tree_constant (arg1.complex_value ());
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
779 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
780 case tree_constant_rep::matrix_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
781 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
782 Matrix m = arg1.matrix_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
783 if (m.rows () == 1)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
784 retval(0) = tree_constant (m.row_max ());
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
785 else
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
786 retval(0) = tree_constant (m.column_max (), 0);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
787 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
788 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
789 case tree_constant_rep::complex_matrix_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
790 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
791 ComplexMatrix m = arg1.complex_matrix_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
792 if (m.rows () == 1)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
793 retval(0) = tree_constant (m.row_max ());
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
794 else
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
795 retval(0) = tree_constant (m.column_max (), 0);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
796 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
797 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
798 default:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
799 panic_impossible ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
800 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
801 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
802 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
803 else if (nargin == 2 && nargout == 2)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
804 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
805 retval.resize (2);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
806 switch (arg1_type)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
807 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
808 case tree_constant_rep::scalar_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
809 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
810 retval(0) = tree_constant (arg1.double_value ());
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
811 retval(1) = tree_constant (1);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
812 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
813 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
814 case tree_constant_rep::complex_scalar_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
815 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
816 retval(0) = tree_constant (arg1.complex_value ());
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
817 retval(1) = tree_constant (1);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
818 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
819 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
820 case tree_constant_rep::matrix_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
821 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
822 Matrix m = arg1.matrix_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
823 if (m.rows () == 1)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
824 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
825 retval(0) = tree_constant (m.row_max ());
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
826 retval(1) = tree_constant (m.row_max_loc ());
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
827 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
828 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
829 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
830 retval(0) = tree_constant (m.column_max (), 0);
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
831 retval(1) = tree_constant (m.column_max_loc (), 0);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
832 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
833 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
834 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
835 case tree_constant_rep::complex_matrix_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
836 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
837 ComplexMatrix m = arg1.complex_matrix_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
838 if (m.rows () == 1)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
839 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
840 retval(0) = tree_constant (m.row_max ());
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
841 retval(1) = tree_constant (m.row_max_loc ());
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
842 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
843 else
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
844 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
845 retval(0) = tree_constant (m.column_max (), 0);
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
846 retval(1) = tree_constant (m.column_max_loc (), 0);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
847 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
848 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
849 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
850 default:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
851 panic_impossible ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
852 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
853 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
854 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
855 else if (nargin == 3)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
856 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
857 if (arg1.rows () == arg2.rows ()
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
858 && arg1.columns () == arg2.columns ())
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
859 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
860 retval.resize (1);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
861 switch (arg1_type)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
862 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
863 case tree_constant_rep::scalar_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
864 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
865 double result;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
866 double a_elem = arg1.double_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
867 double b_elem = arg2.double_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
868 result = MAX (a_elem, b_elem);
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
869 retval(0) = tree_constant (result);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
870 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
871 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
872 case tree_constant_rep::complex_scalar_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
873 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
874 Complex result;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
875 Complex a_elem = arg1.complex_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
876 Complex b_elem = arg2.complex_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
877 if (abs (a_elem) > abs (b_elem))
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
878 result = a_elem;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
879 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
880 result = b_elem;
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
881 retval(0) = tree_constant (result);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
882 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
883 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
884 case tree_constant_rep::matrix_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
885 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
886 Matrix result;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
887 result = max (arg1.matrix_value (), arg2.matrix_value ());
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
888 retval(0) = tree_constant (result);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
889 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
890 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
891 case tree_constant_rep::complex_matrix_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
892 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
893 ComplexMatrix result;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
894 result = max (arg1.complex_matrix_value (),
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
895 arg2.complex_matrix_value ());
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
896 retval(0) = tree_constant (result);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
897 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
898 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
899 default:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
900 panic_impossible ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
901 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
902 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
903 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
904 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
905 error ("max: nonconformant matrices");
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
906 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
907 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
908 panic_impossible ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
909
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
910 return retval;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
911 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
912
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
913 Octave_object
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
914 column_min (const Octave_object& args, int nargout)
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
915 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
916 Octave_object retval;
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
917
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
918 tree_constant arg1;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
919 tree_constant arg2;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
920 tree_constant_rep::constant_type arg1_type =
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
921 tree_constant_rep::unknown_constant;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
922 tree_constant_rep::constant_type arg2_type =
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
923 tree_constant_rep::unknown_constant;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
924
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
925 int nargin = args.length ();
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
926
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
927 switch (nargin)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
928 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
929 case 3:
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
930 arg2 = args(2).make_numeric ();
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
931 arg2_type = arg2.const_type ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
932 // Fall through...
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
933 case 2:
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
934 arg1 = args(1).make_numeric ();
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
935 arg1_type = arg1.const_type ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
936 break;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
937 default:
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
938 panic_impossible ();
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
939 break;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
940 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
941
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
942 if (nargin == 2 && (nargout == 1 || nargout == 0))
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
943 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
944 retval.resize (1);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
945 switch (arg1_type)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
946 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
947 case tree_constant_rep::scalar_constant:
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
948 retval(0) = tree_constant (arg1.double_value ());
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
949 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
950 case tree_constant_rep::complex_scalar_constant:
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
951 retval(0) = tree_constant (arg1.complex_value ());
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
952 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
953 case tree_constant_rep::matrix_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
954 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
955 Matrix m = arg1.matrix_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
956 if (m.rows () == 1)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
957 retval(0) = tree_constant (m.row_min ());
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
958 else
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
959 retval(0) = tree_constant (m.column_min (), 0);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
960 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
961 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
962 case tree_constant_rep::complex_matrix_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
963 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
964 ComplexMatrix m = arg1.complex_matrix_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
965 if (m.rows () == 1)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
966 retval(0) = tree_constant (m.row_min ());
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
967 else
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
968 retval(0) = tree_constant (m.column_min (), 0);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
969 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
970 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
971 default:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
972 panic_impossible ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
973 break;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
974 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
975 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
976 else if (nargin == 2 && nargout == 2)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
977 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
978 retval.resize (2);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
979 switch (arg1_type)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
980 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
981 case tree_constant_rep::scalar_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
982 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
983 retval(0) = tree_constant (arg1.double_value ());
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
984 retval(1) = tree_constant (1);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
985 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
986 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
987 case tree_constant_rep::complex_scalar_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
988 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
989 retval(0) = tree_constant (arg1.complex_value ());
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
990 retval(1) = tree_constant (1);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
991 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
992 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
993 case tree_constant_rep::matrix_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
994 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
995 Matrix m = arg1.matrix_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
996 if (m.rows () == 1)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
997 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
998 retval(0) = tree_constant (m.row_min ());
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
999 retval(1) = tree_constant (m.row_min_loc ());
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1000 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1001 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1002 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1003 retval(0) = tree_constant (m.column_min (), 0);
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1004 retval(1) = tree_constant (m.column_min_loc (), 0);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1005 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1006 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1007 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1008 case tree_constant_rep::complex_matrix_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1009 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1010 ComplexMatrix m = arg1.complex_matrix_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1011 if (m.rows () == 1)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1012 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1013 retval(0) = tree_constant (m.row_min ());
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1014 retval(1) = tree_constant (m.row_min_loc ());
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1015 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1016 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1017 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1018 retval(0) = tree_constant (m.column_min (), 0);
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1019 retval(1) = tree_constant (m.column_min_loc (), 0);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1020 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1021 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1022 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1023 default:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1024 panic_impossible ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1025 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1026 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1027 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1028 else if (nargin == 3)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1029 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1030 if (arg1.rows () == arg2.rows ()
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1031 && arg1.columns () == arg2.columns ())
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1032 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1033 retval.resize (1);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1034 switch (arg1_type)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1035 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1036 case tree_constant_rep::scalar_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1037 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1038 double result;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1039 double a_elem = arg1.double_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1040 double b_elem = arg2.double_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1041 result = MIN (a_elem, b_elem);
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1042 retval(0) = tree_constant (result);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1043 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1044 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1045 case tree_constant_rep::complex_scalar_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1046 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1047 Complex result;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1048 Complex a_elem = arg1.complex_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1049 Complex b_elem = arg2.complex_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1050 if (abs (a_elem) < abs (b_elem))
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1051 result = a_elem;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1052 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1053 result = b_elem;
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1054 retval(0) = tree_constant (result);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1055 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1056 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1057 case tree_constant_rep::matrix_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1058 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1059 Matrix result;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1060 result = min (arg1.matrix_value (), arg2.matrix_value ());
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1061 retval(0) = tree_constant (result);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1062 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1063 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1064 case tree_constant_rep::complex_matrix_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1065 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1066 ComplexMatrix result;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1067 result = min (arg1.complex_matrix_value (),
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1068 arg2.complex_matrix_value ());
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1069 retval(0) = tree_constant (result);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1070 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1071 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1072 default:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1073 panic_impossible ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1074 break;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1075 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1076 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1077 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1078 error ("min: nonconformant matrices");
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1079 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1080 else
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1081 panic_impossible ();
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1082
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1083 return retval;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1084 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1085
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1086 static void
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1087 mx_sort (Matrix& m, Matrix& idx, int return_idx)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1088 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1089 int nr = m.rows ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1090 int nc = m.columns ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1091 idx.resize (nr, nc);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1092 int i, j;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1093
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1094 if (return_idx)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1095 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1096 for (j = 0; j < nc; j++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1097 for (i = 0; i < nr; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1098 idx.elem (i, j) = i+1;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1099 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1100
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1101 for (j = 0; j < nc; j++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1102 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1103 for (int gap = nr/2; gap > 0; gap /= 2)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1104 for (i = gap; i < nr; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1105 for (int k = i - gap;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1106 k >= 0 && m.elem (k, j) > m.elem (k+gap, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1107 k -= gap)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1108 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1109 double tmp = m.elem (k, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1110 m.elem (k, j) = m.elem (k+gap, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1111 m.elem (k+gap, j) = tmp;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1112
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1113 if (return_idx)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1114 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1115 double tmp = idx.elem (k, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1116 idx.elem (k, j) = idx.elem (k+gap, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1117 idx.elem (k+gap, j) = tmp;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1118 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1119 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1120 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1121 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1122
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1123 static void
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1124 mx_sort (RowVector& v, RowVector& idx, int return_idx)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1125 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1126 int n = v.capacity ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1127 idx.resize (n);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1128 int i;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1129
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1130 if (return_idx)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1131 for (i = 0; i < n; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1132 idx.elem (i) = i+1;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1133
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1134 for (int gap = n/2; gap > 0; gap /= 2)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1135 for (i = gap; i < n; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1136 for (int k = i - gap;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1137 k >= 0 && v.elem (k) > v.elem (k+gap);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1138 k -= gap)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1139 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1140 double tmp = v.elem (k);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1141 v.elem (k) = v.elem (k+gap);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1142 v.elem (k+gap) = tmp;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1143
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1144 if (return_idx)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1145 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1146 double tmp = idx.elem (k);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1147 idx.elem (k) = idx.elem (k+gap);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1148 idx.elem (k+gap) = tmp;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1149 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1150 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1151 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1152
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1153 static void
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1154 mx_sort (ComplexMatrix& cm, Matrix& idx, int return_idx)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1155 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1156 int nr = cm.rows ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1157 int nc = cm.columns ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1158 idx.resize (nr, nc);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1159 int i, j;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1160
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1161 if (return_idx)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1162 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1163 for (j = 0; j < nc; j++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1164 for (i = 0; i < nr; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1165 idx.elem (i, j) = i+1;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1166 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1167
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1168 for (j = 0; j < nc; j++)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1169 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1170 for (int gap = nr/2; gap > 0; gap /= 2)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1171 for (i = gap; i < nr; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1172 for (int k = i - gap;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1173 k >= 0 && abs (cm.elem (k, j)) > abs (cm.elem (k+gap, j));
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1174 k -= gap)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1175 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1176 Complex ctmp = cm.elem (k, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1177 cm.elem (k, j) = cm.elem (k+gap, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1178 cm.elem (k+gap, j) = ctmp;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1179
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1180 if (return_idx)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1181 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1182 double tmp = idx.elem (k, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1183 idx.elem (k, j) = idx.elem (k+gap, j);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1184 idx.elem (k+gap, j) = tmp;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1185 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1186 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1187 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1188 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1189
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1190 static void
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1191 mx_sort (ComplexRowVector& cv, RowVector& idx, int return_idx)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1192 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1193 int n = cv.capacity ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1194 idx.resize (n);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1195 int i;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1196
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1197 if (return_idx)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1198 for (i = 0; i < n; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1199 idx.elem (i) = i+1;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1200
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1201 for (int gap = n/2; gap > 0; gap /= 2)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1202 for (i = gap; i < n; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1203 for (int k = i - gap;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1204 k >= 0 && abs (cv.elem (k)) > abs (cv.elem (k+gap));
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1205 k -= gap)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1206 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1207 Complex tmp = cv.elem (k);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1208 cv.elem (k) = cv.elem (k+gap);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1209 cv.elem (k+gap) = tmp;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1210
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1211 if (return_idx)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1212 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1213 double tmp = idx.elem (k);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1214 idx.elem (k) = idx.elem (k+gap);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1215 idx.elem (k+gap) = tmp;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1216 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1217 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1218 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1219
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1220 Octave_object
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
1221 sort (const Octave_object& args, int nargout)
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1222 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1223 // Assumes that we have been given the correct number of arguments.
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1224
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1225 Octave_object retval;
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1226
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1227 int return_idx = nargout > 1;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1228 if (return_idx)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1229 retval.resize (2);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1230 else
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1231 retval.resize (1);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1232
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1233 switch (args(1).const_type ())
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1234 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1235 case tree_constant_rep::scalar_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1236 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1237 retval(0) = tree_constant (args(1).double_value ());
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1238 if (return_idx)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1239 retval(1) = tree_constant (1.0);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1240 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1241 break;
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1242 case tree_constant_rep::complex_scalar_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1243 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1244 retval(0) = tree_constant (args(1).complex_value ());
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1245 if (return_idx)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1246 retval(1) = tree_constant (1.0);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1247 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1248 break;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1249 case tree_constant_rep::string_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1250 case tree_constant_rep::range_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1251 case tree_constant_rep::matrix_constant:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1252 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1253 Matrix m = args(1).to_matrix ();
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1254 if (m.rows () == 1)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1255 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1256 int nc = m.columns ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1257 RowVector v (nc);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1258 for (int i = 0; i < nc; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1259 v.elem (i) = m.elem (0, i);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1260 RowVector idx;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1261 mx_sort (v, idx, return_idx);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1262
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1263 retval(0) = tree_constant (v, 0);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1264 if (return_idx)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1265 retval(1) = tree_constant (idx, 0);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1266 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1267 else
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1268 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1269 // Sorts m in place, optionally computes index Matrix.
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1270 Matrix idx;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1271 mx_sort (m, idx, return_idx);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1272
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1273 retval(0) = tree_constant (m);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1274 if (return_idx)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1275 retval(1) = tree_constant (idx);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1276 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1277 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1278 break;
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1279 case tree_constant_rep::complex_matrix_constant:
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1280 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1281 ComplexMatrix cm = args(1).complex_matrix_value ();
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1282 if (cm.rows () == 1)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1283 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1284 int nc = cm.columns ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1285 ComplexRowVector cv (nc);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1286 for (int i = 0; i < nc; i++)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1287 cv.elem (i) = cm.elem (0, i);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1288 RowVector idx;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1289 mx_sort (cv, idx, return_idx);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1290
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1291 retval(0) = tree_constant (cv, 0);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1292 if (return_idx)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1293 retval(1) = tree_constant (idx, 0);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1294 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1295 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1296 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1297 // Sorts cm in place, optionally computes index Matrix.
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1298 Matrix idx;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1299 mx_sort (cm, idx, return_idx);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1300
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1301 retval(0) = tree_constant (cm);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1302 if (return_idx)
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1303 retval(1) = tree_constant (idx);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1304 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1305 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1306 break;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1307 default:
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1308 panic_impossible ();
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1309 break;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1310 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1311
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1312 return retval;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1313 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1314
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1315 Octave_object
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
1316 feval (const Octave_object& args, int nargout)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1317 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1318 // Assumes that we have been given the correct number of arguments.
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1319
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1320 Octave_object retval;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1321
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1322 tree_fvc *fcn = is_valid_function (args(1), "feval", 1);
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1323 if (fcn != (tree_fvc *) NULL)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1324 {
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
1325 int nargin = args.length () - 1;
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
1326 Octave_object tmp_args (nargin);
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1327 for (int i = 0; i < nargin; i++)
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1328 tmp_args(i) = args(i+1);
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
1329 retval = fcn->eval (0, nargout, tmp_args);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1330 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1331
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1332 return retval;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1333 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1334
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1335 tree_constant
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1336 eval_string (const char *string, int print, int ans_assign,
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1337 int& parse_status)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1338 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1339 begin_unwind_frame ("eval_string");
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1340
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1341 unwind_protect_int (get_input_from_eval_string);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1342 unwind_protect_ptr (global_command);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1343 unwind_protect_ptr (current_eval_string);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1344
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1345 get_input_from_eval_string = 1;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1346 current_eval_string = string;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1347
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1348 YY_BUFFER_STATE old_buf = current_buffer ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1349 YY_BUFFER_STATE new_buf = create_buffer ((FILE *) NULL);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1350
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1351 add_unwind_protect (restore_input_buffer, (void *) old_buf);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1352 add_unwind_protect (delete_input_buffer, (void *) new_buf);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1353
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1354 switch_to_buffer (new_buf);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1355
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1356 unwind_protect_ptr (curr_sym_tab);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1357
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1358 reset_parser ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1359
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1360 parse_status = yyparse ();
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1361
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1362 // Important to reset the idea of where input is coming from before
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1363 // trying to eval the command we just parsed -- it might contain the
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1364 // name of an function file that still needs to be parsed!
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1365
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1366 tree *command = global_command;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1367
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1368 run_unwind_frame ("eval_string");
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1369
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1370 tree_constant retval;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1371
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1372 if (parse_status == 0 && command != NULL_TREE)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1373 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1374 retval = command->eval (print);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1375 delete command;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1376 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1377
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1378 return retval;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1379 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1380
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1381 tree_constant
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1382 eval_string (const tree_constant& arg, int& parse_status)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1383 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1384 if (! arg.is_string_type ())
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1385 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1386 error ("eval: expecting string argument");
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1387 return -1;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1388 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1389
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1390 char *string = arg.string_value ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1391
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1392 // Yes Virginia, we always print here...
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1393
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1394 return eval_string (string, 1, 1, parse_status);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1395 }
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1396
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1397 static int
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1398 match_sans_spaces (const char *standard, const char *test)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1399 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1400 const char *tp = test;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1401 while (*tp == ' ' || *tp == '\t')
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1402 tp++;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1403
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1404 const char *ep = test + strlen (test) - 1;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1405 while (*ep == ' ' || *ep == '\t')
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1406 ep--;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1407
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1408 int len = ep - tp + 1;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1409
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1410 return (strncmp (standard, tp, len) == 0);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1411 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1412
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1413 tree_constant
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
1414 get_user_input (const Octave_object& args, int nargout, int debug = 0)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1415 {
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1416 tree_constant retval;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1417
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
1418 int nargin = args.length ();
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
1419
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1420 int read_as_string = 0;
506
0f388340e607 [project @ 1994-07-09 06:10:34 by jwe]
jwe
parents: 500
diff changeset
1421
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1422 if (nargin == 3)
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1423 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1424 if (args(2).is_string_type ()
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1425 && strcmp ("s", args(2).string_value ()) == 0)
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1426 read_as_string++;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1427 else
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1428 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1429 error ("input: unrecognized second argument");
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1430 return retval;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1431 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1432 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1433
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1434 char *prompt = "debug> ";
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1435 if (nargin > 1)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1436 {
500
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1437 if (args(1).is_string_type ())
5f91088cb98e [project @ 1994-07-08 02:16:02 by jwe]
jwe
parents: 493
diff changeset
1438 prompt = args(1).string_value ();
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1439 else
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1440 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1441 error ("input: unrecognized argument");
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1442 return retval;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1443 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1444 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1445
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1446 again:
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1447
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1448 flush_output_to_pager ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1449
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1450 char *input_buf = gnu_readline (prompt);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1451
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1452 if (input_buf != (char *) NULL)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1453 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1454 if (input_buf)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1455 maybe_save_history (input_buf);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1456
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1457 int len = strlen (input_buf);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1458
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1459 if (len < 1)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1460 {
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1461 if (debug)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1462 goto again;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1463 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1464 return retval;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1465 }
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1466
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1467 if (match_sans_spaces ("exit", input_buf)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1468 || match_sans_spaces ("quit", input_buf)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1469 || match_sans_spaces ("return", input_buf))
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1470 return tree_constant ();
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1471 else if (read_as_string)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1472 retval = tree_constant (input_buf);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1473 else
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1474 {
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1475 int parse_status;
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1476 retval = eval_string (input_buf, 0, 0, parse_status);
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1477 if (debug && retval.is_defined ())
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1478 retval.eval (1);
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1479 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1480 }
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1481 else
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1482 error ("input: reading user-input failed!");
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1483
493
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1484 if (debug)
1391e7ed65f6 [project @ 1994-07-06 14:54:58 by jwe]
jwe
parents: 482
diff changeset
1485 goto again;
455
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1486
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1487 return retval;
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1488 }
8c6b86564cee [project @ 1994-06-06 00:24:19 by jwe]
jwe
parents: 435
diff changeset
1489
96
36ff440553cd [project @ 1993-09-13 02:48:39 by jwe]
jwe
parents: 1
diff changeset
1490 /*
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1491 ;;; Local Variables: ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1492 ;;; mode: C++ ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1493 ;;; page-delimiter: "^/\\*" ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1494 ;;; End: ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1495 */