Mercurial > octave-nkf
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 } |