comparison src/DLD-FUNCTIONS/minmax.cc @ 3248:68259f410026

[project @ 1999-07-13 03:34:54 by jwe]
author jwe
date Tue, 13 Jul 1999 03:40:17 +0000
parents dd00769643ae
children 511caaa5e98e
comparison
equal deleted inserted replaced
3247:256f98d26275 3248:68259f410026
25 #endif 25 #endif
26 26
27 #include <cmath> 27 #include <cmath>
28 28
29 #include "lo-ieee.h" 29 #include "lo-ieee.h"
30 #include "lo-mappers.h"
30 31
31 #include "defun-dld.h" 32 #include "defun-dld.h"
32 #include "error.h" 33 #include "error.h"
33 #include "gripes.h" 34 #include "gripes.h"
34 #include "oct-obj.h" 35 #include "oct-obj.h"
35 36
36 #ifndef MAX
37 #define MAX(a,b) ((a) > (b) ? (a) : (b))
38 #endif
39
40 #ifndef MIN
41 #define MIN(a,b) ((a) < (b) ? (a) : (b))
42 #endif
43
44 // XXX FIXME XXX -- it would be nice to share code among the min/max 37 // XXX FIXME XXX -- it would be nice to share code among the min/max
45 // functions below. 38 // functions below.
46 39
47 static Matrix 40 static Matrix
48 min (double d, const Matrix& m) 41 min (double d, const Matrix& m)
52 45
53 Matrix result (nr, nc); 46 Matrix result (nr, nc);
54 47
55 for (int j = 0; j < nc; j++) 48 for (int j = 0; j < nc; j++)
56 for (int i = 0; i < nr; i++) 49 for (int i = 0; i < nr; i++)
57 { 50 result (i, j) = xmin (d, m (i, j));
58 double m_elem = m (i, j);
59 result (i, j) = MIN (d, m_elem);
60 }
61 51
62 return result; 52 return result;
63 } 53 }
64 54
65 static Matrix 55 static Matrix
70 60
71 Matrix result (nr, nc); 61 Matrix result (nr, nc);
72 62
73 for (int j = 0; j < nc; j++) 63 for (int j = 0; j < nc; j++)
74 for (int i = 0; i < nr; i++) 64 for (int i = 0; i < nr; i++)
75 { 65 result (i, j) = xmin (m (i, j), d);
76 double m_elem = m (i, j);
77 result (i, j) = MIN (m_elem, d);
78 }
79 66
80 return result; 67 return result;
81 } 68 }
82 69
83 static ComplexMatrix 70 static ComplexMatrix
86 int nr = m.rows (); 73 int nr = m.rows ();
87 int nc = m.columns (); 74 int nc = m.columns ();
88 75
89 ComplexMatrix result (nr, nc); 76 ComplexMatrix result (nr, nc);
90 77
91 double abs_c = abs (c); 78 for (int j = 0; j < nc; j++)
92 79 for (int i = 0; i < nr; i++)
93 for (int j = 0; j < nc; j++) 80 result (i, j) = xmin (c, m (i, j));
94 {
95 for (int i = 0; i < nr; i++)
96 {
97 double abs_m_elem = abs (m (i, j));
98 if (abs_c < abs_m_elem)
99 result (i, j) = c;
100 else
101 result (i, j) = m (i, j);
102 }
103 }
104 81
105 return result; 82 return result;
106 } 83 }
107 84
108 static ComplexMatrix 85 static ComplexMatrix
111 int nr = m.rows (); 88 int nr = m.rows ();
112 int nc = m.columns (); 89 int nc = m.columns ();
113 90
114 ComplexMatrix result (nr, nc); 91 ComplexMatrix result (nr, nc);
115 92
116 double abs_c = abs (c); 93 for (int j = 0; j < nc; j++)
117 94 for (int i = 0; i < nr; i++)
118 for (int j = 0; j < nc; j++) 95 result (i, j) = xmin (m (i, j), c);
119 for (int i = 0; i < nr; i++)
120 {
121 double abs_m_elem = abs (m (i, j));
122 if (abs_m_elem < abs_c)
123 result (i, j) = m (i, j);
124 else
125 result (i, j) = c;
126 }
127 96
128 return result; 97 return result;
129 } 98 }
130 99
131 static Matrix 100 static Matrix
141 110
142 Matrix result (nr, nc); 111 Matrix result (nr, nc);
143 112
144 for (int j = 0; j < nc; j++) 113 for (int j = 0; j < nc; j++)
145 for (int i = 0; i < nr; i++) 114 for (int i = 0; i < nr; i++)
146 { 115 result (i, j) = xmin (a (i, j), b (i, j));
147 double a_elem = a (i, j);
148 double b_elem = b (i, j);
149 result (i, j) = MIN (a_elem, b_elem);
150 }
151 116
152 return result; 117 return result;
153 } 118 }
154 119
155 static ComplexMatrix 120 static ComplexMatrix
176 } 141 }
177 142
178 if (columns_are_real_only) 143 if (columns_are_real_only)
179 { 144 {
180 for (int i = 0; i < nr; i++) 145 for (int i = 0; i < nr; i++)
181 { 146 result (i, j) = xmin (real (a (i, j)), real (b (i, j)));
182 double a_elem = real (a (i, j));
183 double b_elem = real (b (i, j));
184 if (a_elem < b_elem)
185 result (i, j) = a_elem;
186 else
187 result (i, j) = b_elem;
188 }
189 } 147 }
190 else 148 else
191 { 149 {
192 for (int i = 0; i < nr; i++) 150 for (int i = 0; i < nr; i++)
193 { 151 result (i, j) = xmin (a (i, j), b (i, j));
194 double abs_a_elem = abs (a (i, j));
195 double abs_b_elem = abs (b (i, j));
196 if (abs_a_elem < abs_b_elem)
197 result (i, j) = a (i, j);
198 else
199 result (i, j) = b (i, j);
200 }
201 } 152 }
202 } 153 }
203 154
204 return result; 155 return result;
205 } 156 }
212 163
213 Matrix result (nr, nc); 164 Matrix result (nr, nc);
214 165
215 for (int j = 0; j < nc; j++) 166 for (int j = 0; j < nc; j++)
216 for (int i = 0; i < nr; i++) 167 for (int i = 0; i < nr; i++)
217 { 168 result (i, j) = xmax (d, m (i, j));
218 double m_elem = m (i, j);
219 result (i, j) = MAX (d, m_elem);
220 }
221 169
222 return result; 170 return result;
223 } 171 }
224 172
225 static Matrix 173 static Matrix
230 178
231 Matrix result (nr, nc); 179 Matrix result (nr, nc);
232 180
233 for (int j = 0; j < nc; j++) 181 for (int j = 0; j < nc; j++)
234 for (int i = 0; i < nr; i++) 182 for (int i = 0; i < nr; i++)
235 { 183 result (i, j) = xmax (m (i, j), d);
236 double m_elem = m (i, j);
237 result (i, j) = MAX (m_elem, d);
238 }
239 184
240 return result; 185 return result;
241 } 186 }
242 187
243 static ComplexMatrix 188 static ComplexMatrix
246 int nr = m.rows (); 191 int nr = m.rows ();
247 int nc = m.columns (); 192 int nc = m.columns ();
248 193
249 ComplexMatrix result (nr, nc); 194 ComplexMatrix result (nr, nc);
250 195
251 double abs_c = abs (c); 196 for (int j = 0; j < nc; j++)
252 197 for (int i = 0; i < nr; i++)
253 for (int j = 0; j < nc; j++) 198 result (i, j) = xmax (c, m (i, j));
254 for (int i = 0; i < nr; i++)
255 {
256 double abs_m_elem = abs (m (i, j));
257 if (abs_c > abs_m_elem)
258 result (i, j) = c;
259 else
260 result (i, j) = m (i, j);
261 }
262 199
263 return result; 200 return result;
264 } 201 }
265 202
266 static ComplexMatrix 203 static ComplexMatrix
269 int nr = m.rows (); 206 int nr = m.rows ();
270 int nc = m.columns (); 207 int nc = m.columns ();
271 208
272 ComplexMatrix result (nr, nc); 209 ComplexMatrix result (nr, nc);
273 210
274 double abs_c = abs (c); 211 for (int j = 0; j < nc; j++)
275 212 for (int i = 0; i < nr; i++)
276 for (int j = 0; j < nc; j++) 213 result (i, j) = xmax (m (i, j), c);
277 for (int i = 0; i < nr; i++)
278 {
279 double abs_m_elem = abs (m (i, j));
280 if (abs_m_elem > abs_c)
281 result (i, j) = m (i, j);
282 else
283 result (i, j) = c;
284 }
285 214
286 return result; 215 return result;
287 } 216 }
288 217
289 static Matrix 218 static Matrix
299 228
300 Matrix result (nr, nc); 229 Matrix result (nr, nc);
301 230
302 for (int j = 0; j < nc; j++) 231 for (int j = 0; j < nc; j++)
303 for (int i = 0; i < nr; i++) 232 for (int i = 0; i < nr; i++)
304 { 233 result (i, j) = xmax (a (i, j), b (i, j));
305 double a_elem = a (i, j);
306 double b_elem = b (i, j);
307 result (i, j) = MAX (a_elem, b_elem);
308 }
309 234
310 return result; 235 return result;
311 } 236 }
312 237
313 static ComplexMatrix 238 static ComplexMatrix
334 } 259 }
335 260
336 if (columns_are_real_only) 261 if (columns_are_real_only)
337 { 262 {
338 for (int i = 0; i < nr; i++) 263 for (int i = 0; i < nr; i++)
339 { 264 result (i, j) = xmax (real (a (i, j)), real (b (i, j)));
340 double a_elem = real (a (i, j));
341 double b_elem = real (b (i, j));
342 if (a_elem > b_elem)
343 result (i, j) = a_elem;
344 else
345 result (i, j) = b_elem;
346 }
347 } 265 }
348 else 266 else
349 { 267 {
350 for (int i = 0; i < nr; i++) 268 for (int i = 0; i < nr; i++)
351 { 269 result (i, j) = xmax (a (i, j), b (i, j));
352 double abs_a_elem = abs (a (i, j));
353 double abs_b_elem = abs (b (i, j));
354 if (abs_a_elem > abs_b_elem)
355 result (i, j) = a (i, j);
356 else
357 result (i, j) = b (i, j);
358 }
359 } 270 }
360 } 271 }
361 272
362 return result; 273 return result;
363 } 274 }