annotate libinterp/corefcn/xpow.cc @ 21014:b9d4c3615e89

maint: Capitalize D for dimension in messages and comments. "N-d" => "N-D", "1-d" => "1-D", "2-d" => "2-D" * data.cc, ls-oct-text.cc, xdiv.cc, xpow.cc, ov-str-mat.cc, op-bm-bm.cc, op-cell.cc, op-cm-cm.cc, op-fcm-fcm.cc, op-fm-fm.cc, op-int.h, op-m-m.cc, op-str-str.cc, op-struct.cc, Array.cc, Sparse.cc, mx-base.h, mx-op-decl.h, mx-op-defs.h: Capitalize D for dimension in messages and comments.
author Rik <rik@octave.org>
date Tue, 29 Dec 2015 12:41:03 -0800
parents 48b2ad5ee801
children 6176560b03d9
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 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2
19697
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 19269
diff changeset
3 Copyright (C) 1993-2015 John W. Eaton
11523
fd0a3ac60b0e update copyright notices
John W. Eaton <jwe@octave.org>
parents: 11030
diff changeset
4 Copyright (C) 2009-2010 VZLU Prague
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
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6207
diff changeset
10 Free Software Foundation; either version 3 of the License, or (at your
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6207
diff changeset
11 option) any later version.
1
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
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6207
diff changeset
19 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6207
diff changeset
20 <http://www.gnu.org/licenses/>.
1
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: 164
diff changeset
24 #ifdef HAVE_CONFIG_H
1192
b6360f2d4fa6 [project @ 1995-03-30 21:38:35 by jwe]
jwe
parents: 1009
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
1343
94bedeb289e5 [project @ 1995-09-04 00:29:21 by jwe]
jwe
parents: 1321
diff changeset
28 #include <cassert>
15215
9020dddc925a use std::numeric_limits for integer max and min values
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
29
9020dddc925a use std::numeric_limits for integer max and min values
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
30 #include <limits>
1343
94bedeb289e5 [project @ 1995-09-04 00:29:21 by jwe]
jwe
parents: 1321
diff changeset
31
4669
334a27c8f453 [project @ 2003-11-26 07:02:42 by jwe]
jwe
parents: 4543
diff changeset
32 #include "Array-util.h"
1352
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1343
diff changeset
33 #include "CColVector.h"
453
393e95f46b51 [project @ 1994-06-06 00:05:20 by jwe]
jwe
parents: 240
diff changeset
34 #include "CDiagMatrix.h"
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
35 #include "fCDiagMatrix.h"
19269
65554f5847ac don't include oct-locbuf.h in header files unnecessarily
John W. Eaton <jwe@octave.org>
parents: 19018
diff changeset
36 #include "fCMatrix.h"
1352
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1343
diff changeset
37 #include "CMatrix.h"
453
393e95f46b51 [project @ 1994-06-06 00:05:20 by jwe]
jwe
parents: 240
diff changeset
38 #include "EIG.h"
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
39 #include "fEIG.h"
1352
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1343
diff changeset
40 #include "dDiagMatrix.h"
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
41 #include "fDiagMatrix.h"
1352
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1343
diff changeset
42 #include "dMatrix.h"
8958
6ccc12cc65ef implement raising a permutation matrix to integer power
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
43 #include "PermMatrix.h"
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3178
diff changeset
44 #include "mx-cm-cdm.h"
19269
65554f5847ac don't include oct-locbuf.h in header files unnecessarily
John W. Eaton <jwe@octave.org>
parents: 19018
diff changeset
45 #include "mx-fcm-fcdm.h"
1651
e846e361a265 [project @ 1995-12-20 06:59:12 by jwe]
jwe
parents: 1580
diff changeset
46 #include "oct-cmplx.h"
9103
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
47 #include "Range.h"
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4055
diff changeset
48 #include "quit.h"
1352
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1343
diff changeset
49
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1343
diff changeset
50 #include "error.h"
20940
48b2ad5ee801 maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents: 20679
diff changeset
51 #include "ovl.h"
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
52 #include "utils.h"
1352
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1343
diff changeset
53 #include "xpow.h"
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
54
13005
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
55 #include "bsxfun.h"
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
56
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
57 static void
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
58 gripe_failed_diagonalization (void)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
59 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
60 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
61 }
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
62
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
63 static inline int
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
64 xisint (double x)
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
65 {
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
66 return (D_NINT (x) == x
15215
9020dddc925a use std::numeric_limits for integer max and min values
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
67 && ((x >= 0 && x < std::numeric_limits<int>::max ())
9020dddc925a use std::numeric_limits for integer max and min values
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
68 || (x <= 0 && x > std::numeric_limits<int>::min ())));
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
69 }
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
70
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
71 // Safer pow functions.
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
72 //
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
73 // op2 \ op1: s m cs cm
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
74 // +-- +---+---+----+----+
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
75 // scalar | | 1 | 5 | 7 | 11 |
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
76 // +---+---+----+----+
2365
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
77 // matrix | 2 | * | 8 | * |
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
78 // +---+---+----+----+
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
79 // complex_scalar | 3 | 6 | 9 | 12 |
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
80 // +---+---+----+----+
2365
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
81 // complex_matrix | 4 | * | 10 | * |
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
82 // +---+---+----+----+
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
83
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
84 // -*- 1 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
85 octave_value
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
86 xpow (double a, double b)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
87 {
7543
b84c5cbc0812 print.m: handle gif and jpg devices
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
88 double retval;
b84c5cbc0812 print.m: handle gif and jpg devices
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
89
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
90 if (a < 0.0 && ! xisint (b))
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
91 {
5260
deed800e7bef [project @ 2005-03-30 23:18:58 by jwe]
jwe
parents: 4790
diff changeset
92 Complex atmp (a);
4682
994f449a1eba [project @ 2003-12-19 15:37:14 by jwe]
jwe
parents: 4669
diff changeset
93
5260
deed800e7bef [project @ 2005-03-30 23:18:58 by jwe]
jwe
parents: 4790
diff changeset
94 return std::pow (atmp, b);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
95 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
96 else
7543
b84c5cbc0812 print.m: handle gif and jpg devices
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
97 retval = std::pow (a, b);
b84c5cbc0812 print.m: handle gif and jpg devices
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
98
b84c5cbc0812 print.m: handle gif and jpg devices
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
99 return retval;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
100 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
101
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
102 // -*- 2 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
103 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
104 xpow (double a, const Matrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
105 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
106 octave_value retval;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
107
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
108 octave_idx_type nr = b.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
109 octave_idx_type nc = b.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
110
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
111 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
112 error ("for x^A, A must be a square matrix. Use .^ for elementwise power.");
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
113 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
114 {
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
115 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
116 {
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
117 EIG b_eig (b);
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
118
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
119 ComplexColumnVector lambda (b_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
120 ComplexMatrix Q (b_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
121
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
122 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
123 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
124 Complex elt = lambda(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
125 if (std::imag (elt) == 0.0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
126 lambda(i) = std::pow (a, std::real (elt));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
127 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
128 lambda(i) = std::pow (a, elt);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
129 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
130 ComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
131
11030
231946a9ad55 make the result of r^m real when r > 0
Jaroslav Hajek <highegg@gmail.com>
parents: 11011
diff changeset
132 ComplexMatrix C = Q * D * Q.inverse ();
231946a9ad55 make the result of r^m real when r > 0
Jaroslav Hajek <highegg@gmail.com>
parents: 11011
diff changeset
133 if (a > 0)
231946a9ad55 make the result of r^m real when r > 0
Jaroslav Hajek <highegg@gmail.com>
parents: 11011
diff changeset
134 retval = real (C);
231946a9ad55 make the result of r^m real when r > 0
Jaroslav Hajek <highegg@gmail.com>
parents: 11011
diff changeset
135 else
231946a9ad55 make the result of r^m real when r > 0
Jaroslav Hajek <highegg@gmail.com>
parents: 11011
diff changeset
136 retval = C;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
137 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
138 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
139 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
140 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
141 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
142 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
143
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
144 return retval;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
145 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
146
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
147 // -*- 3 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
148 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
149 xpow (double a, const Complex& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
150 {
10144
1b883ce66707 avoid redundant real->complex conversions in xpow
Jaroslav Hajek <highegg@gmail.com>
parents: 10142
diff changeset
151 Complex result = std::pow (a, b);
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
152 return result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
153 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
154
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
155 // -*- 4 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
156 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
157 xpow (double a, const ComplexMatrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
158 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
159 octave_value retval;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
160
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
161 octave_idx_type nr = b.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
162 octave_idx_type nc = b.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
163
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
164 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
165 error ("for x^A, A must be a square matrix. Use .^ for elementwise power.");
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
166 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
167 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
168 EIG b_eig (b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
169
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
170 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
171 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
172 ComplexColumnVector lambda (b_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
173 ComplexMatrix Q (b_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
174
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
175 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
176 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
177 Complex elt = lambda(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
178 if (std::imag (elt) == 0.0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
179 lambda(i) = std::pow (a, std::real (elt));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
180 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
181 lambda(i) = std::pow (a, elt);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
182 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
183 ComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
184
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
185 retval = ComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
186 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
187 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
188 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
189 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
190 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
191 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
192
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
193 return retval;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
194 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
195
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
196 // -*- 5 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
197 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
198 xpow (const Matrix& a, double b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
199 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
200 octave_value retval;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
201
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
202 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
203 octave_idx_type nc = a.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
204
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
205 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
206 error ("for A^b, A must be a square matrix. Use .^ for elementwise power.");
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
207 else
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
208 {
2800
9aeba8e006a4 [project @ 1997-03-09 09:50:20 by jwe]
jwe
parents: 2365
diff changeset
209 if (static_cast<int> (b) == b)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
210 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
211 int btmp = static_cast<int> (b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
212 if (btmp == 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
213 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
214 retval = DiagMatrix (nr, nr, 1.0);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
215 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
216 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
217 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
218 // Too much copying?
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17749
diff changeset
219 // FIXME: we shouldn't do this if the exponent is large...
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
220
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
221 Matrix atmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
222 if (btmp < 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
223 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
224 btmp = -btmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
225
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
226 octave_idx_type info;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
227 double rcond = 0.0;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
228 MatrixType mattype (a);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
229
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
230 atmp = a.inverse (mattype, info, rcond, 1);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
231
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
232 if (info == -1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
233 warning ("inverse: matrix singular to machine\
1655
593fff2e7e39 [project @ 1995-12-20 10:50:16 by jwe]
jwe
parents: 1651
diff changeset
234 precision, rcond = %g", rcond);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
235 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
236 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
237 atmp = a;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
238
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
239 Matrix result (atmp);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
240
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
241 btmp--;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
242
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
243 while (btmp > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
244 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
245 if (btmp & 1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
246 result = result * atmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
247
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
248 btmp >>= 1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
249
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
250 if (btmp > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
251 atmp = atmp * atmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
252 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
253
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
254 retval = result;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
255 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
256 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
257 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
258 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
259 EIG a_eig (a);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
260
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
261 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
262 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
263 ComplexColumnVector lambda (a_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
264 ComplexMatrix Q (a_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
265
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
266 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
267 lambda(i) = std::pow (lambda(i), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
268
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
269 ComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
270
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
271 retval = ComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
272 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
273 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
274 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
275 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
276 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
277 }
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
278 }
1358
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1352
diff changeset
279
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
280 return retval;
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
281 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
282
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
283 // -*- 5d -*-
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
284 octave_value
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
285 xpow (const DiagMatrix& a, double b)
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
286 {
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
287 octave_value retval;
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
288
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
289 octave_idx_type nr = a.rows ();
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
290 octave_idx_type nc = a.cols ();
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
291
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
292 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
293 error ("for A^b, A must be a square matrix. Use .^ for elementwise power.");
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
294 else
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
295 {
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
296 if (static_cast<int> (b) == b)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
297 {
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
298 DiagMatrix r (nr, nc);
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
299 for (octave_idx_type i = 0; i < nc; i++)
10363
a0728e81ed25 improve diag matrix interface & implementation
Jaroslav Hajek <highegg@gmail.com>
parents: 10315
diff changeset
300 r.dgelem (i) = std::pow (a.dgelem (i), b);
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
301 retval = r;
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
302 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
303 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
304 {
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
305 ComplexDiagMatrix r (nr, nc);
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
306 for (octave_idx_type i = 0; i < nc; i++)
10363
a0728e81ed25 improve diag matrix interface & implementation
Jaroslav Hajek <highegg@gmail.com>
parents: 10315
diff changeset
307 r.dgelem (i) = std::pow (static_cast<Complex> (a.dgelem (i)), b);
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
308 retval = r;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
309 }
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
310 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
311
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
312 return retval;
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
313 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
314
8958
6ccc12cc65ef implement raising a permutation matrix to integer power
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
315 // -*- 5p -*-
6ccc12cc65ef implement raising a permutation matrix to integer power
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
316 octave_value
6ccc12cc65ef implement raising a permutation matrix to integer power
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
317 xpow (const PermMatrix& a, double b)
6ccc12cc65ef implement raising a permutation matrix to integer power
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
318 {
6ccc12cc65ef implement raising a permutation matrix to integer power
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
319 octave_value retval;
6ccc12cc65ef implement raising a permutation matrix to integer power
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
320 int btmp = static_cast<int> (b);
6ccc12cc65ef implement raising a permutation matrix to integer power
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
321 if (btmp == b)
6ccc12cc65ef implement raising a permutation matrix to integer power
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
322 return a.power (btmp);
6ccc12cc65ef implement raising a permutation matrix to integer power
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
323 else
6ccc12cc65ef implement raising a permutation matrix to integer power
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
324 return xpow (Matrix (a), b);
6ccc12cc65ef implement raising a permutation matrix to integer power
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
325 }
6ccc12cc65ef implement raising a permutation matrix to integer power
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
326
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
327 // -*- 6 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
328 octave_value
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
329 xpow (const Matrix& a, const Complex& b)
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
330 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
331 octave_value retval;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
332
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
333 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
334 octave_idx_type nc = a.cols ();
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
335
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
336 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
337 error ("for A^b, A must be a square matrix. Use .^ for elementwise power.");
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
338 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
339 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
340 EIG a_eig (a);
7578
91f8446ce4ae handle possible error from EIG
John W. Eaton <jwe@octave.org>
parents: 7543
diff changeset
341
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
342 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
343 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
344 ComplexColumnVector lambda (a_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
345 ComplexMatrix Q (a_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
346
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
347 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
348 lambda(i) = std::pow (lambda(i), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
349
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
350 ComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
351
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
352 retval = ComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
353 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
354 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
355 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
356 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
357 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
358 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
359
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
360 return retval;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
361 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
362
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
363 // -*- 7 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
364 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
365 xpow (const Complex& a, double b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
366 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
367 Complex result;
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
368
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
369 if (xisint (b))
5260
deed800e7bef [project @ 2005-03-30 23:18:58 by jwe]
jwe
parents: 4790
diff changeset
370 result = std::pow (a, static_cast<int> (b));
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
371 else
5260
deed800e7bef [project @ 2005-03-30 23:18:58 by jwe]
jwe
parents: 4790
diff changeset
372 result = std::pow (a, b);
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
373
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
374 return result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
375 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
376
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
377 // -*- 8 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
378 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
379 xpow (const Complex& a, const Matrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
380 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
381 octave_value retval;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
382
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
383 octave_idx_type nr = b.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
384 octave_idx_type nc = b.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
385
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
386 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
387 error ("for x^A, A must be a square matrix. Use .^ for elementwise power.");
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
388 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
389 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
390 EIG b_eig (b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
391
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
392 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
393 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
394 ComplexColumnVector lambda (b_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
395 ComplexMatrix Q (b_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
396
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
397 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
398 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
399 Complex elt = lambda(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
400 if (std::imag (elt) == 0.0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
401 lambda(i) = std::pow (a, std::real (elt));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
402 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
403 lambda(i) = std::pow (a, elt);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
404 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
405 ComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
406
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
407 retval = ComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
408 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
409 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
410 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
411 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
412 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
413 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
414
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
415 return retval;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
416 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
417
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
418 // -*- 9 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
419 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
420 xpow (const Complex& a, const Complex& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
421 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
422 Complex result;
5260
deed800e7bef [project @ 2005-03-30 23:18:58 by jwe]
jwe
parents: 4790
diff changeset
423 result = std::pow (a, b);
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
424 return result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
425 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
426
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
427 // -*- 10 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
428 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
429 xpow (const Complex& a, const ComplexMatrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
430 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
431 octave_value retval;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
432
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
433 octave_idx_type nr = b.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
434 octave_idx_type nc = b.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
435
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
436 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
437 error ("for x^A, A must be a square matrix. Use .^ for elementwise power.");
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
438 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
439 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
440 EIG b_eig (b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
441
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
442 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
443 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
444 ComplexColumnVector lambda (b_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
445 ComplexMatrix Q (b_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
446
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
447 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
448 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
449 Complex elt = lambda(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
450 if (std::imag (elt) == 0.0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
451 lambda(i) = std::pow (a, std::real (elt));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
452 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
453 lambda(i) = std::pow (a, elt);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
454 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
455 ComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
456
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
457 retval = ComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
458 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
459 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
460 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
461 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
462 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
463 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
464
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
465 return retval;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
466 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
467
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
468 // -*- 11 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
469 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
470 xpow (const ComplexMatrix& a, double b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
471 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
472 octave_value retval;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
473
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
474 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
475 octave_idx_type nc = a.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
476
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
477 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
478 error ("for A^b, A must be a square matrix. Use .^ for elementwise power.");
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
479 else
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
480 {
2800
9aeba8e006a4 [project @ 1997-03-09 09:50:20 by jwe]
jwe
parents: 2365
diff changeset
481 if (static_cast<int> (b) == b)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
482 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
483 int btmp = static_cast<int> (b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
484 if (btmp == 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
485 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
486 retval = DiagMatrix (nr, nr, 1.0);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
487 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
488 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
489 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
490 // Too much copying?
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17749
diff changeset
491 // FIXME: we shouldn't do this if the exponent is large...
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
492
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
493 ComplexMatrix atmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
494 if (btmp < 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
495 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
496 btmp = -btmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
497
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
498 octave_idx_type info;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
499 double rcond = 0.0;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
500 MatrixType mattype (a);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
501
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
502 atmp = a.inverse (mattype, info, rcond, 1);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
503
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
504 if (info == -1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
505 warning ("inverse: matrix singular to machine\
1655
593fff2e7e39 [project @ 1995-12-20 10:50:16 by jwe]
jwe
parents: 1651
diff changeset
506 precision, rcond = %g", rcond);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
507 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
508 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
509 atmp = a;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
510
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
511 ComplexMatrix result (atmp);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
512
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
513 btmp--;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
514
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
515 while (btmp > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
516 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
517 if (btmp & 1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
518 result = result * atmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
519
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
520 btmp >>= 1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
521
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
522 if (btmp > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
523 atmp = atmp * atmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
524 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
525
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
526 retval = result;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
527 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
528 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
529 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
530 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
531 EIG a_eig (a);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
532
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
533 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
534 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
535 ComplexColumnVector lambda (a_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
536 ComplexMatrix Q (a_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
537
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
538 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
539 lambda(i) = std::pow (lambda(i), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
540
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
541 ComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
542
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
543 retval = ComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
544 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
545 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
546 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
547 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
548 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
549 }
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
550 }
1358
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1352
diff changeset
551
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
552 return retval;
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
553 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
554
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
555 // -*- 12 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
556 octave_value
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
557 xpow (const ComplexMatrix& a, const Complex& b)
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
558 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
559 octave_value retval;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
560
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
561 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
562 octave_idx_type nc = a.cols ();
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
563
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
564 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
565 error ("for A^b, A must be a square matrix. Use .^ for elementwise power.");
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
566 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
567 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
568 EIG a_eig (a);
7578
91f8446ce4ae handle possible error from EIG
John W. Eaton <jwe@octave.org>
parents: 7543
diff changeset
569
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
570 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
571 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
572 ComplexColumnVector lambda (a_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
573 ComplexMatrix Q (a_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
574
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
575 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
576 lambda(i) = std::pow (lambda(i), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
577
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
578 ComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
579
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
580 retval = ComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
581 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
582 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
583 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
584 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
585 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
586 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
587
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
588 return retval;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
589 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
590
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
591 // -*- 12d -*-
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
592 octave_value
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
593 xpow (const ComplexDiagMatrix& a, const Complex& b)
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
594 {
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
595 octave_value retval;
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
596
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
597 octave_idx_type nr = a.rows ();
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
598 octave_idx_type nc = a.cols ();
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
599
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
600 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
601 error ("for A^b, A must be a square matrix. Use .^ for elementwise power.");
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
602 else
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
603 {
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
604 ComplexDiagMatrix r (nr, nc);
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
605 for (octave_idx_type i = 0; i < nc; i++)
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
606 r(i, i) = std::pow (a(i, i), b);
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
607 retval = r;
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
608 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
609
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
610 return retval;
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
611 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
612
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
613 // mixed
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
614 octave_value
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
615 xpow (const ComplexDiagMatrix& a, double b)
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
616 {
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
617 return xpow (a, static_cast<Complex> (b));
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
618 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
619
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
620 octave_value
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
621 xpow (const DiagMatrix& a, const Complex& b)
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
622 {
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
623 return xpow (ComplexDiagMatrix (a), b);
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
624 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
625
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
626
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
627 // Safer pow functions that work elementwise for matrices.
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
628 //
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
629 // op2 \ op1: s m cs cm
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
630 // +-- +---+---+----+----+
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
631 // scalar | | * | 3 | * | 9 |
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
632 // +---+---+----+----+
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
633 // matrix | 1 | 4 | 7 | 10 |
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
634 // +---+---+----+----+
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
635 // complex_scalar | * | 5 | * | 11 |
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
636 // +---+---+----+----+
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
637 // complex_matrix | 2 | 6 | 8 | 12 |
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
638 // +---+---+----+----+
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
639 //
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
640 // * -> not needed.
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
641
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17749
diff changeset
642 // FIXME: these functions need to be fixed so that things like
3162
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
643 //
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
644 // a = -1; b = [ 0, 0.5, 1 ]; r = a .^ b
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
645 //
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
646 // and
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
647 //
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
648 // a = -1; b = [ 0, 0.5, 1 ]; for i = 1:3, r(i) = a .^ b(i), end
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
649 //
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
650 // produce identical results. Also, it would be nice if -1^0.5
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
651 // produced a pure imaginary result instead of a complex number with a
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
652 // small real part. But perhaps that's really a problem with the math
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
653 // library...
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
654
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
655 // -*- 1 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
656 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
657 elem_xpow (double a, const Matrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
658 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
659 octave_value retval;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
660
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
661 octave_idx_type nr = b.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
662 octave_idx_type nc = b.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
663
3162
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
664 double d1, d2;
1358
dc9c01f66a19 [project @ 1995-09-05 21:10:01 by jwe]
jwe
parents: 1352
diff changeset
665
3162
7c96e85c76db [project @ 1998-04-08 18:19:35 by jwe]
jwe
parents: 3125
diff changeset
666 if (a < 0.0 && ! b.all_integers (d1, d2))
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
667 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
668 Complex atmp (a);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
669 ComplexMatrix result (nr, nc);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
670
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
671 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
672 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
673 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
674 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
675 result (i, j) = std::pow (atmp, b (i, j));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
676 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
677
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
678 retval = result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
679 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
680 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
681 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
682 Matrix result (nr, nc);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
683
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
684 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
685 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
686 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
687 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
688 result (i, j) = std::pow (a, b (i, j));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
689 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
690
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
691 retval = result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
692 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
693
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
694 return retval;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
695 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
696
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
697 // -*- 2 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
698 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
699 elem_xpow (double a, const ComplexMatrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
700 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
701 octave_idx_type nr = b.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
702 octave_idx_type nc = b.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
703
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
704 ComplexMatrix result (nr, nc);
3125
dcc6c985d72d [project @ 1998-01-16 05:08:21 by jwe]
jwe
parents: 2847
diff changeset
705 Complex atmp (a);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
706
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
707 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
708 for (octave_idx_type i = 0; i < nr; i++)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4055
diff changeset
709 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
710 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
711 result (i, j) = std::pow (atmp, b (i, j));
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4055
diff changeset
712 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
713
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
714 return result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
715 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
716
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
717 static inline bool
9123
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
718 same_sign (double a, double b)
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
719 {
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
720 return (a >= 0 && b >= 0) || (a <= 0 && b <= 0);
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
721 }
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
722
9103
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
723 octave_value
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
724 elem_xpow (double a, const Range& r)
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
725 {
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
726 octave_value retval;
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
727
9123
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
728 // Only optimize powers with ranges that are integer and monotonic in
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
729 // magnitude.
20228
00cf2847355d Deprecate Array::nelem() and Range::nelem() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 19697
diff changeset
730 if (r.numel () > 1 && r.all_elements_are_ints ()
9123
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
731 && same_sign (r.base (), r.limit ()))
9103
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
732 {
20228
00cf2847355d Deprecate Array::nelem() and Range::nelem() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 19697
diff changeset
733 octave_idx_type n = r.numel ();
9123
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
734 Matrix result (1, n);
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
735 if (same_sign (r.base (), r.inc ()))
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
736 {
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
737 double base = std::pow (a, r.base ());
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
738 double inc = std::pow (a, r.inc ());
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
739 result(0) = base;
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
740 for (octave_idx_type i = 1; i < n; i++)
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
741 result(i) = (base *= inc);
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
742 }
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
743 else
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
744 {
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
745 // Don't use Range::limit () here.
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
746 double limit = std::pow (a, r.base () + (n-1) * r.inc ());
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
747 double inc = std::pow (a, -r.inc ());
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
748 result(n-1) = limit;
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
749 for (octave_idx_type i = n-2; i >= 0; i--)
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
750 result(i) = (limit *= inc);
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
751 }
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
752
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
753 retval = result;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
754 }
9103
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
755 else
9123
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
756 retval = elem_xpow (a, r.matrix_value ());
9103
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
757
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
758 return retval;
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
759 }
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
760
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
761 // -*- 3 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
762 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
763 elem_xpow (const Matrix& a, double b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
764 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
765 octave_value retval;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
766
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
767 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
768 octave_idx_type nc = a.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
769
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
770 if (! xisint (b) && a.any_element_is_negative ())
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
771 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
772 ComplexMatrix result (nr, nc);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
773
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
774 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
775 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
776 {
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
777 octave_quit ();
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
778
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
779 Complex atmp (a (i, j));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
780
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
781 result (i, j) = std::pow (atmp, b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
782 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
783
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
784 retval = result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
785 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
786 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
787 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
788 Matrix result (nr, nc);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
789
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
790 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
791 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
792 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
793 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
794 result (i, j) = std::pow (a (i, j), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
795 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
796
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
797 retval = result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
798 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
799
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
800 return retval;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
801 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
802
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
803 // -*- 4 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
804 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
805 elem_xpow (const Matrix& a, const Matrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
806 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
807 octave_value retval;
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
808
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
809 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
810 octave_idx_type nc = a.cols ();
2365
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
811
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
812 octave_idx_type b_nr = b.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
813 octave_idx_type b_nc = b.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
814
2365
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
815 if (nr != b_nr || nc != b_nc)
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
816 {
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
817 gripe_nonconformant ("operator .^", nr, nc, b_nr, b_nc);
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
818 return octave_value ();
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
819 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
820
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
821 int convert_to_complex = 0;
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
822 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
823 for (octave_idx_type i = 0; i < nr; i++)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
824 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
825 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
826 double atmp = a (i, j);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
827 double btmp = b (i, j);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
828 if (atmp < 0.0 && static_cast<int> (btmp) != btmp)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
829 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
830 convert_to_complex = 1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
831 goto done;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
832 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
833 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
834
2365
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
835 done:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
836
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
837 if (convert_to_complex)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
838 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
839 ComplexMatrix complex_result (nr, nc);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
840
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
841 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
842 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
843 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
844 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
845 Complex atmp (a (i, j));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
846 Complex btmp (b (i, j));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
847 complex_result (i, j) = std::pow (atmp, btmp);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
848 }
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
849
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
850 retval = complex_result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
851 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
852 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
853 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
854 Matrix result (nr, nc);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
855
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
856 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
857 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
858 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
859 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
860 result (i, j) = std::pow (a (i, j), b (i, j));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
861 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
862
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
863 retval = result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
864 }
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
865
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
866 return retval;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
867 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
868
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
869 // -*- 5 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
870 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
871 elem_xpow (const Matrix& a, const Complex& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
872 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
873 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
874 octave_idx_type nc = a.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
875
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
876 ComplexMatrix result (nr, nc);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
877
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
878 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
879 for (octave_idx_type i = 0; i < nr; i++)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4055
diff changeset
880 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
881 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
882 result (i, j) = std::pow (Complex (a (i, j)), b);
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4055
diff changeset
883 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
884
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
885 return result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
886 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
887
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
888 // -*- 6 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
889 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
890 elem_xpow (const Matrix& a, const ComplexMatrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
891 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
892 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
893 octave_idx_type nc = a.cols ();
2365
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
894
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
895 octave_idx_type b_nr = b.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
896 octave_idx_type b_nc = b.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
897
2365
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
898 if (nr != b_nr || nc != b_nc)
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
899 {
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
900 gripe_nonconformant ("operator .^", nr, nc, b_nr, b_nc);
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
901 return octave_value ();
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
902 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
903
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
904 ComplexMatrix result (nr, nc);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
905
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
906 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
907 for (octave_idx_type i = 0; i < nr; i++)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4055
diff changeset
908 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
909 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
910 result (i, j) = std::pow (Complex (a (i, j)), b (i, j));
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4055
diff changeset
911 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
912
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
913 return result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
914 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
915
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
916 // -*- 7 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
917 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
918 elem_xpow (const Complex& a, const Matrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
919 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
920 octave_idx_type nr = b.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
921 octave_idx_type nc = b.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
922
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
923 ComplexMatrix result (nr, nc);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
924
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
925 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
926 for (octave_idx_type i = 0; i < nr; i++)
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
927 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
928 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
929 double btmp = b (i, j);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
930 if (xisint (btmp))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
931 result (i, j) = std::pow (a, static_cast<int> (btmp));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
932 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
933 result (i, j) = std::pow (a, btmp);
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
934 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
935
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
936 return result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
937 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
938
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
939 // -*- 8 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
940 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
941 elem_xpow (const Complex& a, const ComplexMatrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
942 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
943 octave_idx_type nr = b.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
944 octave_idx_type nc = b.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
945
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
946 ComplexMatrix result (nr, nc);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
947
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
948 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
949 for (octave_idx_type i = 0; i < nr; i++)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4055
diff changeset
950 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
951 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
952 result (i, j) = std::pow (a, b (i, j));
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4055
diff changeset
953 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
954
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
955 return result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
956 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
957
9103
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
958 octave_value
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
959 elem_xpow (const Complex& a, const Range& r)
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
960 {
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
961 octave_value retval;
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
962
9123
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
963 // Only optimize powers with ranges that are integer and monotonic in
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
964 // magnitude.
20228
00cf2847355d Deprecate Array::nelem() and Range::nelem() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 19697
diff changeset
965 if (r.numel () > 1 && r.all_elements_are_ints ()
9123
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
966 && same_sign (r.base (), r.limit ()))
9103
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
967 {
20228
00cf2847355d Deprecate Array::nelem() and Range::nelem() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 19697
diff changeset
968 octave_idx_type n = r.numel ();
9123
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
969 ComplexMatrix result (1, n);
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
970
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
971 if (same_sign (r.base (), r.inc ()))
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
972 {
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
973 Complex base = std::pow (a, r.base ());
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
974 Complex inc = std::pow (a, r.inc ());
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
975 result(0) = base;
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
976 for (octave_idx_type i = 1; i < n; i++)
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
977 result(i) = (base *= inc);
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
978 }
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
979 else
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
980 {
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
981 // Don't use Range::limit () here.
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
982 Complex limit = std::pow (a, r.base () + (n-1) * r.inc ());
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
983 Complex inc = std::pow (a, -r.inc ());
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
984 result(n-1) = limit;
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
985 for (octave_idx_type i = n-2; i >= 0; i--)
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
986 result(i) = (limit *= inc);
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
987 }
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
988
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
989 retval = result;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
990 }
9123
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
991 else
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
992 retval = elem_xpow (a, r.matrix_value ());
f39b98237d5c use more robust and less aggressive scalar .^ range optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9103
diff changeset
993
9103
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
994
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
995 return retval;
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
996 }
10bed8fbec99 optimize scalar .^ range operation
Jaroslav Hajek <highegg@gmail.com>
parents: 8979
diff changeset
997
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
998 // -*- 9 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
999 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
1000 elem_xpow (const ComplexMatrix& a, double b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1001 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1002 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1003 octave_idx_type nc = a.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1004
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1005 ComplexMatrix result (nr, nc);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1006
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
1007 if (xisint (b))
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
1008 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1009 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1010 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1011 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1012 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1013 result (i, j) = std::pow (a (i, j), static_cast<int> (b));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1014 }
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
1015 }
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
1016 else
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
1017 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1018 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1019 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1020 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1021 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1022 result (i, j) = std::pow (a (i, j), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1023 }
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
1024 }
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
1025
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
1026 return result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1027 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1028
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
1029 // -*- 10 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
1030 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
1031 elem_xpow (const ComplexMatrix& a, const Matrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1032 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1033 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1034 octave_idx_type nc = a.cols ();
2365
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
1035
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1036 octave_idx_type b_nr = b.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1037 octave_idx_type b_nc = b.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1038
2365
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
1039 if (nr != b_nr || nc != b_nc)
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
1040 {
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
1041 gripe_nonconformant ("operator .^", nr, nc, b_nr, b_nc);
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
1042 return octave_value ();
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
1043 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1044
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1045 ComplexMatrix result (nr, nc);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1046
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1047 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1048 for (octave_idx_type i = 0; i < nr; i++)
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
1049 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1050 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1051 double btmp = b (i, j);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1052 if (xisint (btmp))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1053 result (i, j) = std::pow (a (i, j), static_cast<int> (btmp));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1054 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1055 result (i, j) = std::pow (a (i, j), btmp);
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
1056 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1057
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
1058 return result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1059 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1060
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
1061 // -*- 11 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
1062 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
1063 elem_xpow (const ComplexMatrix& a, const Complex& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1064 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1065 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1066 octave_idx_type nc = a.cols ();
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1067
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1068 ComplexMatrix result (nr, nc);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1069
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1070 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1071 for (octave_idx_type i = 0; i < nr; i++)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4055
diff changeset
1072 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1073 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1074 result (i, j) = std::pow (a (i, j), b);
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4055
diff changeset
1075 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1076
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
1077 return result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1078 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1079
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 453
diff changeset
1080 // -*- 12 -*-
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
1081 octave_value
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
1082 elem_xpow (const ComplexMatrix& a, const ComplexMatrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1083 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1084 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1085 octave_idx_type nc = a.cols ();
2365
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
1086
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1087 octave_idx_type b_nr = b.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1088 octave_idx_type b_nc = b.cols ();
2365
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
1089
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
1090 if (nr != b_nr || nc != b_nc)
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
1091 {
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
1092 gripe_nonconformant ("operator .^", nr, nc, b_nr, b_nc);
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
1093 return octave_value ();
7c60f8a6e6a0 [project @ 1996-10-11 23:03:52 by jwe]
jwe
parents: 2305
diff changeset
1094 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1095
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1096 ComplexMatrix result (nr, nc);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1097
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1098 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1099 for (octave_idx_type i = 0; i < nr; i++)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4055
diff changeset
1100 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1101 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1102 result (i, j) = std::pow (a (i, j), b (i, j));
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4055
diff changeset
1103 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1104
1567
1da33230f424 [project @ 1995-10-18 00:47:12 by jwe]
jwe
parents: 1358
diff changeset
1105 return result;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1106 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1107
21014
b9d4c3615e89 maint: Capitalize D for dimension in messages and comments.
Rik <rik@octave.org>
parents: 20940
diff changeset
1108 // Safer pow functions that work elementwise for N-D arrays.
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1109 //
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1110 // op2 \ op1: s nd cs cnd
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1111 // +-- +---+---+----+----+
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1112 // scalar | | * | 3 | * | 9 |
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1113 // +---+---+----+----+
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1114 // N_d | 1 | 4 | 7 | 10 |
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1115 // +---+---+----+----+
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1116 // complex_scalar | * | 5 | * | 11 |
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1117 // +---+---+----+----+
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1118 // complex_N_d | 2 | 6 | 8 | 12 |
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1119 // +---+---+----+----+
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1120 //
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1121 // * -> not needed.
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1122
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17749
diff changeset
1123 // FIXME: these functions need to be fixed so that things like
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1124 //
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1125 // a = -1; b = [ 0, 0.5, 1 ]; r = a .^ b
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1126 //
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1127 // and
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1128 //
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1129 // a = -1; b = [ 0, 0.5, 1 ]; for i = 1:3, r(i) = a .^ b(i), end
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1130 //
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1131 // produce identical results. Also, it would be nice if -1^0.5
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1132 // produced a pure imaginary result instead of a complex number with a
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1133 // small real part. But perhaps that's really a problem with the math
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1134 // library...
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1135
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1136 // -*- 1 -*-
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1137 octave_value
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1138 elem_xpow (double a, const NDArray& b)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1139 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1140 octave_value retval;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1141
11011
a046d03e2417 slight simplifications in xpow.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10521
diff changeset
1142 if (a < 0.0 && ! b.all_integers ())
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1143 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1144 Complex atmp (a);
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1145 ComplexNDArray result (b.dims ());
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1146 for (octave_idx_type i = 0; i < b.numel (); i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1147 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1148 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1149 result(i) = std::pow (atmp, b(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1150 }
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1151
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1152 retval = result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1153 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1154 else
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1155 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1156 NDArray result (b.dims ());
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1157 for (octave_idx_type i = 0; i < b.numel (); i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1158 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1159 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1160 result (i) = std::pow (a, b(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1161 }
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1162
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1163 retval = result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1164 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1165
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1166 return retval;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1167 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1168
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1169 // -*- 2 -*-
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1170 octave_value
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1171 elem_xpow (double a, const ComplexNDArray& b)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1172 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1173 ComplexNDArray result (b.dims ());
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1174
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1175 for (octave_idx_type i = 0; i < b.numel (); i++)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1176 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
1177 octave_quit ();
10144
1b883ce66707 avoid redundant real->complex conversions in xpow
Jaroslav Hajek <highegg@gmail.com>
parents: 10142
diff changeset
1178 result(i) = std::pow (a, b(i));
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1179 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1180
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1181 return result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1182 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1183
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1184 // -*- 3 -*-
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1185 octave_value
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1186 elem_xpow (const NDArray& a, double b)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1187 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1188 octave_value retval;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1189
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1190 if (! xisint (b))
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1191 {
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1192 if (a.any_element_is_negative ())
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1193 {
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1194 ComplexNDArray result (a.dims ());
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1195
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1196 for (octave_idx_type i = 0; i < a.numel (); i++)
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1197 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
1198 octave_quit ();
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1199
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1200 Complex atmp (a (i));
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1201
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1202 result(i) = std::pow (atmp, b);
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1203 }
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1204
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1205 retval = result;
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1206 }
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1207 else
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1208 {
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1209 NDArray result (a.dims ());
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1210 for (octave_idx_type i = 0; i < a.numel (); i++)
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1211 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
1212 octave_quit ();
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1213 result(i) = std::pow (a(i), b);
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1214 }
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1215
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1216 retval = result;
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1217 }
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1218 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1219 else
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1220 {
10129
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
1221 NoAlias<NDArray> result (a.dims ());
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1222
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1223 int ib = static_cast<int> (b);
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1224 if (ib == 2)
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1225 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1226 for (octave_idx_type i = 0; i < a.numel (); i++)
10129
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
1227 result(i) = a(i) * a(i);
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
1228 }
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
1229 else if (ib == 3)
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
1230 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1231 for (octave_idx_type i = 0; i < a.numel (); i++)
10129
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
1232 result(i) = a(i) * a(i) * a(i);
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1233 }
8979
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
1234 else if (ib == -1)
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
1235 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1236 for (octave_idx_type i = 0; i < a.numel (); i++)
10129
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
1237 result(i) = 1.0 / a(i);
8979
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
1238 }
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1239 else
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1240 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1241 for (octave_idx_type i = 0; i < a.numel (); i++)
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1242 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
1243 octave_quit ();
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1244 result(i) = std::pow (a(i), ib);
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1245 }
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1246 }
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1247
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1248 retval = result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1249 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1250
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1251 return retval;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1252 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1253
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1254 // -*- 4 -*-
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1255 octave_value
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1256 elem_xpow (const NDArray& a, const NDArray& b)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1257 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1258 octave_value retval;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1259
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1260 dim_vector a_dims = a.dims ();
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1261 dim_vector b_dims = b.dims ();
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1262
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1263 if (a_dims != b_dims)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1264 {
14056
c3d401562410 allow warning (or error) for automatic bsxfun
John W. Eaton <jwe@octave.org>
parents: 13873
diff changeset
1265 if (is_valid_bsxfun ("operator .^", a_dims, b_dims))
13005
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1266 {
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1267 //Potentially complex results
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1268 NDArray xa = octave_value_extract<NDArray> (a);
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1269 NDArray xb = octave_value_extract<NDArray> (b);
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1270 if (! xb.all_integers () && xa.any_element_is_negative ())
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1271 return octave_value (bsxfun_pow (ComplexNDArray (xa), xb));
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1272 else
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1273 return octave_value (bsxfun_pow (xa, xb));
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1274 }
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1275 else
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1276 {
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1277 gripe_nonconformant ("operator .^", a_dims, b_dims);
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1278 return octave_value ();
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1279 }
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1280 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1281
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1282 int len = a.numel ();
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1283
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1284 bool convert_to_complex = false;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1285
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1286 for (octave_idx_type i = 0; i < len; i++)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1287 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
1288 octave_quit ();
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1289 double atmp = a(i);
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1290 double btmp = b(i);
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1291 if (atmp < 0.0 && static_cast<int> (btmp) != btmp)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1292 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1293 convert_to_complex = true;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1294 goto done;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1295 }
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1296 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1297
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1298 done:
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1299
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1300 if (convert_to_complex)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1301 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1302 ComplexNDArray complex_result (a_dims);
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1303
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1304 for (octave_idx_type i = 0; i < len; i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1305 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1306 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1307 Complex atmp (a(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1308 complex_result(i) = std::pow (atmp, b(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1309 }
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1310
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1311 retval = complex_result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1312 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1313 else
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1314 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1315 NDArray result (a_dims);
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1316
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1317 for (octave_idx_type i = 0; i < len; i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1318 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1319 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1320 result(i) = std::pow (a(i), b(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1321 }
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1322
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1323 retval = result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1324 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1325
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1326 return retval;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1327 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1328
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1329 // -*- 5 -*-
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1330 octave_value
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1331 elem_xpow (const NDArray& a, const Complex& b)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1332 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1333 ComplexNDArray result (a.dims ());
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1334
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1335 for (octave_idx_type i = 0; i < a.numel (); i++)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1336 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
1337 octave_quit ();
10144
1b883ce66707 avoid redundant real->complex conversions in xpow
Jaroslav Hajek <highegg@gmail.com>
parents: 10142
diff changeset
1338 result(i) = std::pow (a(i), b);
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1339 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1340
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1341 return result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1342 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1343
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1344 // -*- 6 -*-
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1345 octave_value
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1346 elem_xpow (const NDArray& a, const ComplexNDArray& b)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1347 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1348 dim_vector a_dims = a.dims ();
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1349 dim_vector b_dims = b.dims ();
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1350
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1351 if (a_dims != b_dims)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1352 {
14056
c3d401562410 allow warning (or error) for automatic bsxfun
John W. Eaton <jwe@octave.org>
parents: 13873
diff changeset
1353 if (is_valid_bsxfun ("operator .^", a_dims, b_dims))
13005
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1354 {
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1355 return bsxfun_pow (a, b);
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1356 }
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1357 else
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1358 {
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1359 gripe_nonconformant ("operator .^", a_dims, b_dims);
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1360 return octave_value ();
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1361 }
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1362 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1363
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1364 ComplexNDArray result (a_dims);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1365
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1366 for (octave_idx_type i = 0; i < a.numel (); i++)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1367 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
1368 octave_quit ();
10144
1b883ce66707 avoid redundant real->complex conversions in xpow
Jaroslav Hajek <highegg@gmail.com>
parents: 10142
diff changeset
1369 result(i) = std::pow (a(i), b(i));
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1370 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1371
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1372 return result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1373 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1374
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1375 // -*- 7 -*-
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1376 octave_value
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1377 elem_xpow (const Complex& a, const NDArray& b)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1378 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1379 ComplexNDArray result (b.dims ());
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1380
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1381 for (octave_idx_type i = 0; i < b.numel (); i++)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1382 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
1383 octave_quit ();
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1384 double btmp = b(i);
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1385 if (xisint (btmp))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1386 result(i) = std::pow (a, static_cast<int> (btmp));
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1387 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1388 result(i) = std::pow (a, btmp);
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1389 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1390
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1391 return result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1392 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1393
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1394 // -*- 8 -*-
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1395 octave_value
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1396 elem_xpow (const Complex& a, const ComplexNDArray& b)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1397 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1398 ComplexNDArray result (b.dims ());
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1399
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1400 for (octave_idx_type i = 0; i < b.numel (); i++)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1401 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
1402 octave_quit ();
5260
deed800e7bef [project @ 2005-03-30 23:18:58 by jwe]
jwe
parents: 4790
diff changeset
1403 result(i) = std::pow (a, b(i));
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1404 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1405
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1406 return result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1407 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1408
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1409 // -*- 9 -*-
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1410 octave_value
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1411 elem_xpow (const ComplexNDArray& a, double b)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1412 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1413 ComplexNDArray result (a.dims ());
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1414
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1415 if (xisint (b))
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1416 {
8979
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
1417 if (b == -1)
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
1418 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1419 for (octave_idx_type i = 0; i < a.numel (); i++)
10144
1b883ce66707 avoid redundant real->complex conversions in xpow
Jaroslav Hajek <highegg@gmail.com>
parents: 10142
diff changeset
1420 result.xelem (i) = 1.0 / a(i);
8979
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
1421 }
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
1422 else
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
1423 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1424 for (octave_idx_type i = 0; i < a.numel (); i++)
8979
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
1425 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
1426 octave_quit ();
8979
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
1427 result(i) = std::pow (a(i), static_cast<int> (b));
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
1428 }
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
1429 }
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1430 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1431 else
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1432 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1433 for (octave_idx_type i = 0; i < a.numel (); i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1434 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1435 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1436 result(i) = std::pow (a(i), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1437 }
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1438 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1439
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1440 return result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1441 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1442
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1443 // -*- 10 -*-
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1444 octave_value
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1445 elem_xpow (const ComplexNDArray& a, const NDArray& b)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1446 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1447 dim_vector a_dims = a.dims ();
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1448 dim_vector b_dims = b.dims ();
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1449
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1450 if (a_dims != b_dims)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1451 {
14056
c3d401562410 allow warning (or error) for automatic bsxfun
John W. Eaton <jwe@octave.org>
parents: 13873
diff changeset
1452 if (is_valid_bsxfun ("operator .^", a_dims, b_dims))
13005
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1453 {
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1454 return bsxfun_pow (a, b);
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1455 }
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1456 else
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1457 {
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1458 gripe_nonconformant ("operator .^", a_dims, b_dims);
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1459 return octave_value ();
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1460 }
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1461 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1462
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1463 ComplexNDArray result (a_dims);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1464
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1465 for (octave_idx_type i = 0; i < a.numel (); i++)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1466 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
1467 octave_quit ();
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1468 double btmp = b(i);
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1469 if (xisint (btmp))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1470 result(i) = std::pow (a(i), static_cast<int> (btmp));
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1471 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1472 result(i) = std::pow (a(i), btmp);
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1473 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1474
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1475 return result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1476 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1477
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1478 // -*- 11 -*-
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1479 octave_value
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1480 elem_xpow (const ComplexNDArray& a, const Complex& b)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1481 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1482 ComplexNDArray result (a.dims ());
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1483
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1484 for (octave_idx_type i = 0; i < a.numel (); i++)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1485 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
1486 octave_quit ();
5260
deed800e7bef [project @ 2005-03-30 23:18:58 by jwe]
jwe
parents: 4790
diff changeset
1487 result(i) = std::pow (a(i), b);
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1488 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1489
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1490 return result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1491 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1492
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1493 // -*- 12 -*-
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1494 octave_value
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1495 elem_xpow (const ComplexNDArray& a, const ComplexNDArray& b)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1496 {
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1497 dim_vector a_dims = a.dims ();
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1498 dim_vector b_dims = b.dims ();
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1499
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1500 if (a_dims != b_dims)
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1501 {
14056
c3d401562410 allow warning (or error) for automatic bsxfun
John W. Eaton <jwe@octave.org>
parents: 13873
diff changeset
1502 if (is_valid_bsxfun ("operator .^", a_dims, b_dims))
13005
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1503 {
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1504 return bsxfun_pow (a, b);
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1505 }
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1506 else
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1507 {
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1508 gripe_nonconformant ("operator .^", a_dims, b_dims);
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1509 return octave_value ();
4061106b1c4b Enable automatic bsxfun for power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
1510 }
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1511 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1512
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1513 ComplexNDArray result (a_dims);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1514
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
1515 for (octave_idx_type i = 0; i < a.numel (); i++)
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1516 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
1517 octave_quit ();
5260
deed800e7bef [project @ 2005-03-30 23:18:58 by jwe]
jwe
parents: 4790
diff changeset
1518 result(i) = std::pow (a(i), b(i));
4543
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1519 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1520
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1521 return result;
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1522 }
79df15d4470c [project @ 2003-10-18 03:53:52 by jwe]
jwe
parents: 4153
diff changeset
1523
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1524 static inline int
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1525 xisint (float x)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1526 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1527 return (D_NINT (x) == x
15215
9020dddc925a use std::numeric_limits for integer max and min values
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
1528 && ((x >= 0 && x < std::numeric_limits<int>::max ())
9020dddc925a use std::numeric_limits for integer max and min values
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
1529 || (x <= 0 && x > std::numeric_limits<int>::min ())));
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1530 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1531
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1532 // Safer pow functions.
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1533 //
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1534 // op2 \ op1: s m cs cm
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1535 // +-- +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1536 // scalar | | 1 | 5 | 7 | 11 |
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1537 // +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1538 // matrix | 2 | * | 8 | * |
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1539 // +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1540 // complex_scalar | 3 | 6 | 9 | 12 |
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1541 // +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1542 // complex_matrix | 4 | * | 10 | * |
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1543 // +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1544
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1545 // -*- 1 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1546 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1547 xpow (float a, float b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1548 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1549 float retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1550
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
1551 if (a < 0.0 && ! xisint (b))
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1552 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1553 FloatComplex atmp (a);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1554
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1555 return std::pow (atmp, b);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1556 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1557 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1558 retval = std::pow (a, b);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1559
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1560 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1561 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1562
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1563 // -*- 2 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1564 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1565 xpow (float a, const FloatMatrix& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1566 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1567 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1568
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1569 octave_idx_type nr = b.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1570 octave_idx_type nc = b.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1571
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1572 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
1573 error ("for x^A, A must be a square matrix. Use .^ for elementwise power.");
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1574 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1575 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1576 FloatEIG b_eig (b);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1577
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1578 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1579 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1580 FloatComplexColumnVector lambda (b_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1581 FloatComplexMatrix Q (b_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1582
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1583 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1584 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1585 FloatComplex elt = lambda(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1586 if (std::imag (elt) == 0.0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1587 lambda(i) = std::pow (a, std::real (elt));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1588 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1589 lambda(i) = std::pow (a, elt);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1590 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1591 FloatComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1592
11030
231946a9ad55 make the result of r^m real when r > 0
Jaroslav Hajek <highegg@gmail.com>
parents: 11011
diff changeset
1593 FloatComplexMatrix C = Q * D * Q.inverse ();
231946a9ad55 make the result of r^m real when r > 0
Jaroslav Hajek <highegg@gmail.com>
parents: 11011
diff changeset
1594
231946a9ad55 make the result of r^m real when r > 0
Jaroslav Hajek <highegg@gmail.com>
parents: 11011
diff changeset
1595 if (a > 0)
231946a9ad55 make the result of r^m real when r > 0
Jaroslav Hajek <highegg@gmail.com>
parents: 11011
diff changeset
1596 retval = real (C);
231946a9ad55 make the result of r^m real when r > 0
Jaroslav Hajek <highegg@gmail.com>
parents: 11011
diff changeset
1597 else
231946a9ad55 make the result of r^m real when r > 0
Jaroslav Hajek <highegg@gmail.com>
parents: 11011
diff changeset
1598 retval = C;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1599 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1600 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1601 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1602 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1603 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1604 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1605
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1606 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1607 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1608
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1609 // -*- 3 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1610 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1611 xpow (float a, const FloatComplex& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1612 {
10144
1b883ce66707 avoid redundant real->complex conversions in xpow
Jaroslav Hajek <highegg@gmail.com>
parents: 10142
diff changeset
1613 FloatComplex result = std::pow (a, b);
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1614 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1615 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1616
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1617 // -*- 4 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1618 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1619 xpow (float a, const FloatComplexMatrix& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1620 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1621 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1622
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1623 octave_idx_type nr = b.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1624 octave_idx_type nc = b.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1625
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1626 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
1627 error ("for x^A, A must be a square matrix. Use .^ for elementwise power.");
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1628 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1629 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1630 FloatEIG b_eig (b);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1631
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1632 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1633 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1634 FloatComplexColumnVector lambda (b_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1635 FloatComplexMatrix Q (b_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1636
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1637 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1638 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1639 FloatComplex elt = lambda(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1640 if (std::imag (elt) == 0.0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1641 lambda(i) = std::pow (a, std::real (elt));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1642 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1643 lambda(i) = std::pow (a, elt);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1644 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1645 FloatComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1646
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1647 retval = FloatComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1648 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1649 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1650 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1651 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1652 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1653 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1654
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1655 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1656 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1657
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1658 // -*- 5 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1659 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1660 xpow (const FloatMatrix& a, float b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1661 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1662 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1663
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1664 octave_idx_type nr = a.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1665 octave_idx_type nc = a.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1666
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1667 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
1668 error ("for A^b, A must be a square matrix. Use .^ for elementwise power.");
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1669 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1670 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1671 if (static_cast<int> (b) == b)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1672 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1673 int btmp = static_cast<int> (b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1674 if (btmp == 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1675 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1676 retval = FloatDiagMatrix (nr, nr, 1.0);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1677 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1678 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1679 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1680 // Too much copying?
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17749
diff changeset
1681 // FIXME: we shouldn't do this if the exponent is large...
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1682
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1683 FloatMatrix atmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1684 if (btmp < 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1685 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1686 btmp = -btmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1687
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1688 octave_idx_type info;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1689 float rcond = 0.0;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1690 MatrixType mattype (a);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1691
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1692 atmp = a.inverse (mattype, info, rcond, 1);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1693
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1694 if (info == -1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1695 warning ("inverse: matrix singular to machine\
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1696 precision, rcond = %g", rcond);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1697 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1698 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1699 atmp = a;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1700
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1701 FloatMatrix result (atmp);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1702
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1703 btmp--;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1704
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1705 while (btmp > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1706 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1707 if (btmp & 1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1708 result = result * atmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1709
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1710 btmp >>= 1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1711
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1712 if (btmp > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1713 atmp = atmp * atmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1714 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1715
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1716 retval = result;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1717 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1718 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1719 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1720 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1721 FloatEIG a_eig (a);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1722
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1723 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1724 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1725 FloatComplexColumnVector lambda (a_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1726 FloatComplexMatrix Q (a_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1727
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1728 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1729 lambda(i) = std::pow (lambda(i), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1730
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1731 FloatComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1732
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1733 retval = FloatComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1734 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1735 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1736 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1737 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1738 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1739 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1740 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1741
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1742 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1743 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1744
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1745 // -*- 5d -*-
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1746 octave_value
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1747 xpow (const FloatDiagMatrix& a, float b)
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1748 {
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1749 octave_value retval;
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1750
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1751 octave_idx_type nr = a.rows ();
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1752 octave_idx_type nc = a.cols ();
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1753
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1754 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
1755 error ("for A^b, A must be a square matrix. Use .^ for elementwise power.");
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1756 else
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1757 {
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1758 if (static_cast<int> (b) == b)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1759 {
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1760 FloatDiagMatrix r (nr, nc);
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1761 for (octave_idx_type i = 0; i < nc; i++)
10363
a0728e81ed25 improve diag matrix interface & implementation
Jaroslav Hajek <highegg@gmail.com>
parents: 10315
diff changeset
1762 r.dgelem (i) = std::pow (a.dgelem (i), b);
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1763 retval = r;
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1764 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1765 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1766 {
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1767 FloatComplexDiagMatrix r (nr, nc);
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1768 for (octave_idx_type i = 0; i < nc; i++)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17749
diff changeset
1769 r.dgelem (i) = std::pow (static_cast<FloatComplex> (a.dgelem (i)),
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17749
diff changeset
1770 b);
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1771 retval = r;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1772 }
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1773 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1774
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1775 return retval;
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1776 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
1777
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1778 // -*- 6 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1779 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1780 xpow (const FloatMatrix& a, const FloatComplex& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1781 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1782 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1783
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1784 octave_idx_type nr = a.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1785 octave_idx_type nc = a.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1786
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1787 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
1788 error ("for A^b, A must be a square matrix. Use .^ for elementwise power.");
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1789 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1790 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1791 FloatEIG a_eig (a);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1792
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1793 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1794 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1795 FloatComplexColumnVector lambda (a_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1796 FloatComplexMatrix Q (a_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1797
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1798 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1799 lambda(i) = std::pow (lambda(i), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1800
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1801 FloatComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1802
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1803 retval = FloatComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1804 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1805 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1806 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1807 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1808 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1809 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1810
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1811 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1812 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1813
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1814 // -*- 7 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1815 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1816 xpow (const FloatComplex& a, float b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1817 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1818 FloatComplex result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1819
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1820 if (xisint (b))
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1821 result = std::pow (a, static_cast<int> (b));
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1822 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1823 result = std::pow (a, b);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1824
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1825 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1826 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1827
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1828 // -*- 8 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1829 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1830 xpow (const FloatComplex& a, const FloatMatrix& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1831 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1832 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1833
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1834 octave_idx_type nr = b.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1835 octave_idx_type nc = b.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1836
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1837 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
1838 error ("for x^A, A must be a square matrix. Use .^ for elementwise power.");
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1839 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1840 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1841 FloatEIG b_eig (b);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1842
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1843 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1844 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1845 FloatComplexColumnVector lambda (b_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1846 FloatComplexMatrix Q (b_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1847
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1848 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1849 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1850 FloatComplex elt = lambda(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1851 if (std::imag (elt) == 0.0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1852 lambda(i) = std::pow (a, std::real (elt));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1853 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1854 lambda(i) = std::pow (a, elt);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1855 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1856 FloatComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1857
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1858 retval = FloatComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1859 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1860 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1861 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1862 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1863 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1864 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1865
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1866 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1867 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1868
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1869 // -*- 9 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1870 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1871 xpow (const FloatComplex& a, const FloatComplex& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1872 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1873 FloatComplex result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1874 result = std::pow (a, b);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1875 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1876 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1877
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1878 // -*- 10 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1879 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1880 xpow (const FloatComplex& a, const FloatComplexMatrix& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1881 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1882 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1883
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1884 octave_idx_type nr = b.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1885 octave_idx_type nc = b.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1886
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1887 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
1888 error ("for x^A, A must be a square matrix. Use .^ for elementwise power.");
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1889 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1890 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1891 FloatEIG b_eig (b);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1892
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1893 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1894 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1895 FloatComplexColumnVector lambda (b_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1896 FloatComplexMatrix Q (b_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1897
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1898 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1899 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1900 FloatComplex elt = lambda(i);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1901 if (std::imag (elt) == 0.0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1902 lambda(i) = std::pow (a, std::real (elt));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1903 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1904 lambda(i) = std::pow (a, elt);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1905 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1906 FloatComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1907
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1908 retval = FloatComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1909 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1910 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1911 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1912 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1913 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1914 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1915
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1916 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1917 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1918
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1919 // -*- 11 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1920 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1921 xpow (const FloatComplexMatrix& a, float b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1922 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1923 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1924
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1925 octave_idx_type nr = a.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1926 octave_idx_type nc = a.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1927
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1928 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
1929 error ("for A^b, A must be a square matrix. Use .^ for elementwise power.");
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1930 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1931 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1932 if (static_cast<int> (b) == b)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1933 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1934 int btmp = static_cast<int> (b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1935 if (btmp == 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1936 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1937 retval = FloatDiagMatrix (nr, nr, 1.0);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1938 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1939 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1940 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1941 // Too much copying?
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17749
diff changeset
1942 // FIXME: we shouldn't do this if the exponent is large...
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1943
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1944 FloatComplexMatrix atmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1945 if (btmp < 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1946 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1947 btmp = -btmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1948
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1949 octave_idx_type info;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1950 float rcond = 0.0;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1951 MatrixType mattype (a);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1952
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1953 atmp = a.inverse (mattype, info, rcond, 1);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1954
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1955 if (info == -1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1956 warning ("inverse: matrix singular to machine\
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1957 precision, rcond = %g", rcond);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1958 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1959 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1960 atmp = a;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1961
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1962 FloatComplexMatrix result (atmp);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1963
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1964 btmp--;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1965
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1966 while (btmp > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1967 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1968 if (btmp & 1)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1969 result = result * atmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1970
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1971 btmp >>= 1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1972
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1973 if (btmp > 0)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1974 atmp = atmp * atmp;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1975 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1976
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1977 retval = result;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1978 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1979 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
1980 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1981 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1982 FloatEIG a_eig (a);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1983
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1984 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1985 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1986 FloatComplexColumnVector lambda (a_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1987 FloatComplexMatrix Q (a_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1988
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1989 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1990 lambda(i) = std::pow (lambda(i), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1991
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1992 FloatComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1993
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1994 retval = FloatComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
1995 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1996 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1997 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1998 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
1999 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2000 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2001 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2002
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2003 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2004 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2005
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2006 // -*- 12 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2007 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2008 xpow (const FloatComplexMatrix& a, const FloatComplex& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2009 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2010 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2011
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2012 octave_idx_type nr = a.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2013 octave_idx_type nc = a.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2014
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2015 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
2016 error ("for A^b, A must be a square matrix. Use .^ for elementwise power.");
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2017 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2018 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2019 FloatEIG a_eig (a);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2020
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
2021 try
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2022 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2023 FloatComplexColumnVector lambda (a_eig.eigenvalues ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2024 FloatComplexMatrix Q (a_eig.eigenvectors ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2025
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2026 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2027 lambda(i) = std::pow (lambda(i), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2028
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2029 FloatComplexDiagMatrix D (lambda);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2030
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2031 retval = FloatComplexMatrix (Q * D * Q.inverse ());
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2032 }
20679
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
2033 catch (const octave_execution_exception&)
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
2034 {
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
2035 gripe_failed_diagonalization ();
19d6f94c21cb eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20232
diff changeset
2036 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2037 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2038
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2039 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2040 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2041
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2042 // -*- 12d -*-
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2043 octave_value
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2044 xpow (const FloatComplexDiagMatrix& a, const FloatComplex& b)
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2045 {
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2046 octave_value retval;
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2047
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2048 octave_idx_type nr = a.rows ();
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2049 octave_idx_type nc = a.cols ();
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2050
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2051 if (nr == 0 || nc == 0 || nr != nc)
17749
ef7e97c91006 Adding elementwise hint to the power errors.
Serhiy Zahoriya <xintx.ua@gmail.com>
parents: 17744
diff changeset
2052 error ("for A^b, A must be a square matrix. Use .^ for elementwise power.");
8382
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2053 else
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2054 {
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2055 FloatComplexDiagMatrix r (nr, nc);
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2056 for (octave_idx_type i = 0; i < nc; i++)
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2057 r(i, i) = std::pow (a(i, i), b);
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2058 retval = r;
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2059 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2060
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2061 return retval;
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2062 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2063
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2064 // mixed
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2065 octave_value
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2066 xpow (const FloatComplexDiagMatrix& a, float b)
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2067 {
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2068 return xpow (a, static_cast<FloatComplex> (b));
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2069 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2070
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2071 octave_value
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2072 xpow (const FloatDiagMatrix& a, const FloatComplex& b)
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2073 {
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2074 return xpow (FloatComplexDiagMatrix (a), b);
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2075 }
9b20a4847056 implement scalar powers of diag matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2076
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2077 // Safer pow functions that work elementwise for matrices.
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2078 //
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2079 // op2 \ op1: s m cs cm
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2080 // +-- +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2081 // scalar | | * | 3 | * | 9 |
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2082 // +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2083 // matrix | 1 | 4 | 7 | 10 |
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2084 // +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2085 // complex_scalar | * | 5 | * | 11 |
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2086 // +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2087 // complex_matrix | 2 | 6 | 8 | 12 |
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2088 // +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2089 //
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2090 // * -> not needed.
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2091
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17749
diff changeset
2092 // FIXME: these functions need to be fixed so that things like
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2093 //
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2094 // a = -1; b = [ 0, 0.5, 1 ]; r = a .^ b
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2095 //
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2096 // and
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2097 //
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2098 // a = -1; b = [ 0, 0.5, 1 ]; for i = 1:3, r(i) = a .^ b(i), end
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2099 //
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2100 // produce identical results. Also, it would be nice if -1^0.5
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2101 // produced a pure imaginary result instead of a complex number with a
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2102 // small real part. But perhaps that's really a problem with the math
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2103 // library...
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2104
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2105 // -*- 1 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2106 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2107 elem_xpow (float a, const FloatMatrix& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2108 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2109 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2110
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2111 octave_idx_type nr = b.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2112 octave_idx_type nc = b.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2113
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2114 float d1, d2;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2115
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2116 if (a < 0.0 && ! b.all_integers (d1, d2))
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2117 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2118 FloatComplex atmp (a);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2119 FloatComplexMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2120
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2121 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2122 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2123 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2124 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2125 result (i, j) = std::pow (atmp, b (i, j));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2126 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2127
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2128 retval = result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2129 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2130 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2131 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2132 FloatMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2133
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2134 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2135 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2136 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2137 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2138 result (i, j) = std::pow (a, b (i, j));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2139 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2140
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2141 retval = result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2142 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2143
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2144 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2145 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2146
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2147 // -*- 2 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2148 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2149 elem_xpow (float a, const FloatComplexMatrix& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2150 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2151 octave_idx_type nr = b.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2152 octave_idx_type nc = b.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2153
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2154 FloatComplexMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2155 FloatComplex atmp (a);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2156
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2157 for (octave_idx_type j = 0; j < nc; j++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2158 for (octave_idx_type i = 0; i < nr; i++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2159 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2160 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2161 result (i, j) = std::pow (atmp, b (i, j));
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2162 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2163
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2164 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2165 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2166
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2167 // -*- 3 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2168 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2169 elem_xpow (const FloatMatrix& a, float b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2170 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2171 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2172
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2173 octave_idx_type nr = a.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2174 octave_idx_type nc = a.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2175
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2176 if (! xisint (b) && a.any_element_is_negative ())
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2177 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2178 FloatComplexMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2179
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2180 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2181 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2182 {
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
2183 octave_quit ();
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
2184
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2185 FloatComplex atmp (a (i, j));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2186
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2187 result (i, j) = std::pow (atmp, b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2188 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2189
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2190 retval = result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2191 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2192 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2193 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2194 FloatMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2195
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2196 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2197 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2198 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2199 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2200 result (i, j) = std::pow (a (i, j), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2201 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2202
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2203 retval = result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2204 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2205
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2206 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2207 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2208
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2209 // -*- 4 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2210 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2211 elem_xpow (const FloatMatrix& a, const FloatMatrix& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2212 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2213 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2214
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2215 octave_idx_type nr = a.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2216 octave_idx_type nc = a.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2217
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2218 octave_idx_type b_nr = b.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2219 octave_idx_type b_nc = b.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2220
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2221 if (nr != b_nr || nc != b_nc)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2222 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2223 gripe_nonconformant ("operator .^", nr, nc, b_nr, b_nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2224 return octave_value ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2225 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2226
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2227 int convert_to_complex = 0;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2228 for (octave_idx_type j = 0; j < nc; j++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2229 for (octave_idx_type i = 0; i < nr; i++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2230 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2231 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2232 float atmp = a (i, j);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2233 float btmp = b (i, j);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2234 if (atmp < 0.0 && static_cast<int> (btmp) != btmp)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2235 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2236 convert_to_complex = 1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2237 goto done;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2238 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2239 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2240
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2241 done:
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2242
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2243 if (convert_to_complex)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2244 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2245 FloatComplexMatrix complex_result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2246
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2247 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2248 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2249 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2250 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2251 FloatComplex atmp (a (i, j));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2252 FloatComplex btmp (b (i, j));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2253 complex_result (i, j) = std::pow (atmp, btmp);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2254 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2255
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2256 retval = complex_result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2257 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2258 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2259 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2260 FloatMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2261
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2262 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2263 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2264 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2265 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2266 result (i, j) = std::pow (a (i, j), b (i, j));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2267 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2268
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2269 retval = result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2270 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2271
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2272 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2273 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2274
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2275 // -*- 5 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2276 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2277 elem_xpow (const FloatMatrix& a, const FloatComplex& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2278 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2279 octave_idx_type nr = a.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2280 octave_idx_type nc = a.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2281
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2282 FloatComplexMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2283
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2284 for (octave_idx_type j = 0; j < nc; j++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2285 for (octave_idx_type i = 0; i < nr; i++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2286 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2287 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2288 result (i, j) = std::pow (FloatComplex (a (i, j)), b);
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2289 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2290
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2291 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2292 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2293
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2294 // -*- 6 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2295 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2296 elem_xpow (const FloatMatrix& a, const FloatComplexMatrix& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2297 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2298 octave_idx_type nr = a.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2299 octave_idx_type nc = a.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2300
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2301 octave_idx_type b_nr = b.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2302 octave_idx_type b_nc = b.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2303
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2304 if (nr != b_nr || nc != b_nc)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2305 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2306 gripe_nonconformant ("operator .^", nr, nc, b_nr, b_nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2307 return octave_value ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2308 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2309
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2310 FloatComplexMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2311
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2312 for (octave_idx_type j = 0; j < nc; j++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2313 for (octave_idx_type i = 0; i < nr; i++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2314 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2315 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2316 result (i, j) = std::pow (FloatComplex (a (i, j)), b (i, j));
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2317 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2318
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2319 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2320 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2321
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2322 // -*- 7 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2323 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2324 elem_xpow (const FloatComplex& a, const FloatMatrix& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2325 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2326 octave_idx_type nr = b.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2327 octave_idx_type nc = b.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2328
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2329 FloatComplexMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2330
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2331 for (octave_idx_type j = 0; j < nc; j++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2332 for (octave_idx_type i = 0; i < nr; i++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2333 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2334 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2335 float btmp = b (i, j);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2336 if (xisint (btmp))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2337 result (i, j) = std::pow (a, static_cast<int> (btmp));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2338 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2339 result (i, j) = std::pow (a, btmp);
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2340 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2341
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2342 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2343 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2344
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2345 // -*- 8 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2346 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2347 elem_xpow (const FloatComplex& a, const FloatComplexMatrix& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2348 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2349 octave_idx_type nr = b.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2350 octave_idx_type nc = b.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2351
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2352 FloatComplexMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2353
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2354 for (octave_idx_type j = 0; j < nc; j++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2355 for (octave_idx_type i = 0; i < nr; i++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2356 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2357 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2358 result (i, j) = std::pow (a, b (i, j));
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2359 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2360
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2361 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2362 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2363
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2364 // -*- 9 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2365 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2366 elem_xpow (const FloatComplexMatrix& a, float b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2367 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2368 octave_idx_type nr = a.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2369 octave_idx_type nc = a.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2370
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2371 FloatComplexMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2372
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2373 if (xisint (b))
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2374 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2375 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2376 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2377 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2378 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2379 result (i, j) = std::pow (a (i, j), static_cast<int> (b));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2380 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2381 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2382 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2383 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2384 for (octave_idx_type j = 0; j < nc; j++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2385 for (octave_idx_type i = 0; i < nr; i++)
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2386 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2387 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2388 result (i, j) = std::pow (a (i, j), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2389 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2390 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2391
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2392 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2393 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2394
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2395 // -*- 10 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2396 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2397 elem_xpow (const FloatComplexMatrix& a, const FloatMatrix& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2398 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2399 octave_idx_type nr = a.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2400 octave_idx_type nc = a.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2401
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2402 octave_idx_type b_nr = b.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2403 octave_idx_type b_nc = b.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2404
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2405 if (nr != b_nr || nc != b_nc)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2406 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2407 gripe_nonconformant ("operator .^", nr, nc, b_nr, b_nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2408 return octave_value ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2409 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2410
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2411 FloatComplexMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2412
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2413 for (octave_idx_type j = 0; j < nc; j++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2414 for (octave_idx_type i = 0; i < nr; i++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2415 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2416 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2417 float btmp = b (i, j);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2418 if (xisint (btmp))
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2419 result (i, j) = std::pow (a (i, j), static_cast<int> (btmp));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2420 else
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2421 result (i, j) = std::pow (a (i, j), btmp);
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2422 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2423
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2424 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2425 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2426
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2427 // -*- 11 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2428 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2429 elem_xpow (const FloatComplexMatrix& a, const FloatComplex& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2430 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2431 octave_idx_type nr = a.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2432 octave_idx_type nc = a.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2433
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2434 FloatComplexMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2435
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2436 for (octave_idx_type j = 0; j < nc; j++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2437 for (octave_idx_type i = 0; i < nr; i++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2438 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2439 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2440 result (i, j) = std::pow (a (i, j), b);
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2441 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2442
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2443 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2444 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2445
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2446 // -*- 12 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2447 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2448 elem_xpow (const FloatComplexMatrix& a, const FloatComplexMatrix& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2449 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2450 octave_idx_type nr = a.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2451 octave_idx_type nc = a.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2452
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2453 octave_idx_type b_nr = b.rows ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2454 octave_idx_type b_nc = b.cols ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2455
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2456 if (nr != b_nr || nc != b_nc)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2457 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2458 gripe_nonconformant ("operator .^", nr, nc, b_nr, b_nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2459 return octave_value ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2460 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2461
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2462 FloatComplexMatrix result (nr, nc);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2463
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2464 for (octave_idx_type j = 0; j < nc; j++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2465 for (octave_idx_type i = 0; i < nr; i++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2466 {
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2467 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2468 result (i, j) = std::pow (a (i, j), b (i, j));
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2469 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2470
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2471 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2472 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2473
21014
b9d4c3615e89 maint: Capitalize D for dimension in messages and comments.
Rik <rik@octave.org>
parents: 20940
diff changeset
2474 // Safer pow functions that work elementwise for N-D arrays.
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2475 //
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2476 // op2 \ op1: s nd cs cnd
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2477 // +-- +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2478 // scalar | | * | 3 | * | 9 |
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2479 // +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2480 // N_d | 1 | 4 | 7 | 10 |
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2481 // +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2482 // complex_scalar | * | 5 | * | 11 |
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2483 // +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2484 // complex_N_d | 2 | 6 | 8 | 12 |
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2485 // +---+---+----+----+
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2486 //
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2487 // * -> not needed.
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2488
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17749
diff changeset
2489 // FIXME: these functions need to be fixed so that things like
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2490 //
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2491 // a = -1; b = [ 0, 0.5, 1 ]; r = a .^ b
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2492 //
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2493 // and
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2494 //
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2495 // a = -1; b = [ 0, 0.5, 1 ]; for i = 1:3, r(i) = a .^ b(i), end
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2496 //
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2497 // produce identical results. Also, it would be nice if -1^0.5
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2498 // produced a pure imaginary result instead of a complex number with a
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2499 // small real part. But perhaps that's really a problem with the math
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2500 // library...
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2501
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2502 // -*- 1 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2503 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2504 elem_xpow (float a, const FloatNDArray& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2505 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2506 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2507
11011
a046d03e2417 slight simplifications in xpow.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10521
diff changeset
2508 if (a < 0.0 && ! b.all_integers ())
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2509 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2510 FloatComplex atmp (a);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2511 FloatComplexNDArray result (b.dims ());
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2512 for (octave_idx_type i = 0; i < b.numel (); i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2513 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2514 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2515 result(i) = std::pow (atmp, b(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2516 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2517
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2518 retval = result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2519 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2520 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2521 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2522 FloatNDArray result (b.dims ());
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2523 for (octave_idx_type i = 0; i < b.numel (); i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2524 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2525 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2526 result (i) = std::pow (a, b(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2527 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2528
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2529 retval = result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2530 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2531
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2532 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2533 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2534
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2535 // -*- 2 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2536 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2537 elem_xpow (float a, const FloatComplexNDArray& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2538 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2539 FloatComplexNDArray result (b.dims ());
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2540
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2541 for (octave_idx_type i = 0; i < b.numel (); i++)
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2542 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
2543 octave_quit ();
10144
1b883ce66707 avoid redundant real->complex conversions in xpow
Jaroslav Hajek <highegg@gmail.com>
parents: 10142
diff changeset
2544 result(i) = std::pow (a, b(i));
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2545 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2546
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2547 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2548 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2549
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2550 // -*- 3 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2551 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2552 elem_xpow (const FloatNDArray& a, float b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2553 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2554 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2555
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2556 if (! xisint (b))
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2557 {
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2558 if (a.any_element_is_negative ())
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2559 {
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2560 FloatComplexNDArray result (a.dims ());
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2561
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2562 for (octave_idx_type i = 0; i < a.numel (); i++)
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2563 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
2564 octave_quit ();
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2565
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2566 FloatComplex atmp (a (i));
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2567
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2568 result(i) = std::pow (atmp, b);
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2569 }
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2570
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2571 retval = result;
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2572 }
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2573 else
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2574 {
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2575 FloatNDArray result (a.dims ());
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2576 for (octave_idx_type i = 0; i < a.numel (); i++)
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2577 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
2578 octave_quit ();
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2579 result(i) = std::pow (a(i), b);
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2580 }
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2581
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2582 retval = result;
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2583 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2584 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2585 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2586 {
10129
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
2587 NoAlias<FloatNDArray> result (a.dims ());
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2588
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2589 int ib = static_cast<int> (b);
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2590 if (ib == 2)
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2591 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2592 for (octave_idx_type i = 0; i < a.numel (); i++)
10129
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
2593 result(i) = a(i) * a(i);
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
2594 }
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
2595 else if (ib == 3)
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
2596 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2597 for (octave_idx_type i = 0; i < a.numel (); i++)
10129
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
2598 result(i) = a(i) * a(i) * a(i);
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2599 }
8979
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
2600 else if (ib == -1)
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
2601 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2602 for (octave_idx_type i = 0; i < a.numel (); i++)
10129
ab80681c44d9 optimize third powers
Jaroslav Hajek <highegg@gmail.com>
parents: 9123
diff changeset
2603 result(i) = 1.0f / a(i);
8979
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
2604 }
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2605 else
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2606 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2607 for (octave_idx_type i = 0; i < a.numel (); i++)
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2608 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
2609 octave_quit ();
8978
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2610 result(i) = std::pow (a(i), ib);
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2611 }
0a58c4cd1405 optimize element-wise power
Jaroslav Hajek <highegg@gmail.com>
parents: 8960
diff changeset
2612 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2613
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2614 retval = result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2615 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2616
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2617 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2618 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2619
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2620 // -*- 4 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2621 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2622 elem_xpow (const FloatNDArray& a, const FloatNDArray& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2623 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2624 octave_value retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2625
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2626 dim_vector a_dims = a.dims ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2627 dim_vector b_dims = b.dims ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2628
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2629 if (a_dims != b_dims)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2630 {
14056
c3d401562410 allow warning (or error) for automatic bsxfun
John W. Eaton <jwe@octave.org>
parents: 13873
diff changeset
2631 if (is_valid_bsxfun ("operator .^", a_dims, b_dims))
13012
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2632 {
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2633 //Potentially complex results
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2634 FloatNDArray xa = octave_value_extract<FloatNDArray> (a);
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2635 FloatNDArray xb = octave_value_extract<FloatNDArray> (b);
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2636 if (! xb.all_integers () && xa.any_element_is_negative ())
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2637 return octave_value (bsxfun_pow (FloatComplexNDArray (xa), xb));
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2638 else
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2639 return octave_value (bsxfun_pow (xa, xb));
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2640 }
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2641 else
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2642 {
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2643 gripe_nonconformant ("operator .^", a_dims, b_dims);
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2644 return octave_value ();
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2645 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2646 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2647
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2648 int len = a.numel ();
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2649
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2650 bool convert_to_complex = false;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2651
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2652 for (octave_idx_type i = 0; i < len; i++)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2653 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
2654 octave_quit ();
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2655 float atmp = a(i);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2656 float btmp = b(i);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2657 if (atmp < 0.0 && static_cast<int> (btmp) != btmp)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2658 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2659 convert_to_complex = true;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2660 goto done;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2661 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2662 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2663
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2664 done:
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2665
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2666 if (convert_to_complex)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2667 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2668 FloatComplexNDArray complex_result (a_dims);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2669
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2670 for (octave_idx_type i = 0; i < len; i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2671 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2672 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2673 FloatComplex atmp (a(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2674 complex_result(i) = std::pow (atmp, b(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2675 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2676
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2677 retval = complex_result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2678 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2679 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2680 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2681 FloatNDArray result (a_dims);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2682
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2683 for (octave_idx_type i = 0; i < len; i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2684 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2685 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2686 result(i) = std::pow (a(i), b(i));
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2687 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2688
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2689 retval = result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2690 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2691
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2692 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2693 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2694
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2695 // -*- 5 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2696 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2697 elem_xpow (const FloatNDArray& a, const FloatComplex& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2698 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2699 FloatComplexNDArray result (a.dims ());
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2700
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2701 for (octave_idx_type i = 0; i < a.numel (); i++)
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2702 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
2703 octave_quit ();
10144
1b883ce66707 avoid redundant real->complex conversions in xpow
Jaroslav Hajek <highegg@gmail.com>
parents: 10142
diff changeset
2704 result(i) = std::pow (a(i), b);
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2705 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2706
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2707 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2708 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2709
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2710 // -*- 6 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2711 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2712 elem_xpow (const FloatNDArray& a, const FloatComplexNDArray& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2713 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2714 dim_vector a_dims = a.dims ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2715 dim_vector b_dims = b.dims ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2716
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2717 if (a_dims != b_dims)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2718 {
14056
c3d401562410 allow warning (or error) for automatic bsxfun
John W. Eaton <jwe@octave.org>
parents: 13873
diff changeset
2719 if (is_valid_bsxfun ("operator .^", a_dims, b_dims))
13012
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2720 {
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2721 return bsxfun_pow (a, b);
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2722 }
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2723 else
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2724 {
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2725 gripe_nonconformant ("operator .^", a_dims, b_dims);
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2726 return octave_value ();
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2727 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2728 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2729
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2730 FloatComplexNDArray result (a_dims);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2731
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2732 for (octave_idx_type i = 0; i < a.numel (); i++)
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2733 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
2734 octave_quit ();
10144
1b883ce66707 avoid redundant real->complex conversions in xpow
Jaroslav Hajek <highegg@gmail.com>
parents: 10142
diff changeset
2735 result(i) = std::pow (a(i), b(i));
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2736 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2737
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2738 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2739 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2740
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2741 // -*- 7 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2742 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2743 elem_xpow (const FloatComplex& a, const FloatNDArray& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2744 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2745 FloatComplexNDArray result (b.dims ());
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2746
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2747 for (octave_idx_type i = 0; i < b.numel (); i++)
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2748 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
2749 octave_quit ();
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2750 float btmp = b(i);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2751 if (xisint (btmp))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2752 result(i) = std::pow (a, static_cast<int> (btmp));
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2753 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2754 result(i) = std::pow (a, btmp);
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2755 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2756
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2757 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2758 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2759
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2760 // -*- 8 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2761 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2762 elem_xpow (const FloatComplex& a, const FloatComplexNDArray& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2763 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2764 FloatComplexNDArray result (b.dims ());
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2765
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2766 for (octave_idx_type i = 0; i < b.numel (); i++)
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2767 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
2768 octave_quit ();
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2769 result(i) = std::pow (a, b(i));
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2770 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2771
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2772 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2773 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2774
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2775 // -*- 9 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2776 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2777 elem_xpow (const FloatComplexNDArray& a, float b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2778 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2779 FloatComplexNDArray result (a.dims ());
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2780
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2781 if (xisint (b))
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2782 {
8979
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
2783 if (b == -1)
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
2784 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2785 for (octave_idx_type i = 0; i < a.numel (); i++)
10144
1b883ce66707 avoid redundant real->complex conversions in xpow
Jaroslav Hajek <highegg@gmail.com>
parents: 10142
diff changeset
2786 result.xelem (i) = 1.0f / a(i);
8979
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
2787 }
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
2788 else
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
2789 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2790 for (octave_idx_type i = 0; i < a.numel (); i++)
8979
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
2791 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
2792 octave_quit ();
8979
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
2793 result(i) = std::pow (a(i), static_cast<int> (b));
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
2794 }
a7c00773a089 optimize also .^-1 case
Jaroslav Hajek <highegg@gmail.com>
parents: 8978
diff changeset
2795 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2796 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2797 else
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2798 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2799 for (octave_idx_type i = 0; i < a.numel (); i++)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2800 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2801 octave_quit ();
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2802 result(i) = std::pow (a(i), b);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2803 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2804 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2805
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2806 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2807 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2808
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2809 // -*- 10 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2810 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2811 elem_xpow (const FloatComplexNDArray& a, const FloatNDArray& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2812 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2813 dim_vector a_dims = a.dims ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2814 dim_vector b_dims = b.dims ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2815
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2816 if (a_dims != b_dims)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2817 {
14056
c3d401562410 allow warning (or error) for automatic bsxfun
John W. Eaton <jwe@octave.org>
parents: 13873
diff changeset
2818 if (is_valid_bsxfun ("operator .^", a_dims, b_dims))
13012
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2819 {
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2820 return bsxfun_pow (a, b);
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2821 }
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2822 else
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2823 {
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2824 gripe_nonconformant ("operator .^", a_dims, b_dims);
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2825 return octave_value ();
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2826 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2827 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2828
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2829 FloatComplexNDArray result (a_dims);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2830
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2831 for (octave_idx_type i = 0; i < a.numel (); i++)
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2832 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
2833 octave_quit ();
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2834 float btmp = b(i);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2835 if (xisint (btmp))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2836 result(i) = std::pow (a(i), static_cast<int> (btmp));
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2837 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
2838 result(i) = std::pow (a(i), btmp);
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2839 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2840
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2841 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2842 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2843
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2844 // -*- 11 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2845 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2846 elem_xpow (const FloatComplexNDArray& a, const FloatComplex& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2847 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2848 FloatComplexNDArray result (a.dims ());
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2849
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2850 for (octave_idx_type i = 0; i < a.numel (); i++)
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2851 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
2852 octave_quit ();
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2853 result(i) = std::pow (a(i), b);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2854 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2855
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2856 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2857 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2858
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2859 // -*- 12 -*-
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2860 octave_value
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2861 elem_xpow (const FloatComplexNDArray& a, const FloatComplexNDArray& b)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2862 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2863 dim_vector a_dims = a.dims ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2864 dim_vector b_dims = b.dims ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2865
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2866 if (a_dims != b_dims)
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2867 {
14056
c3d401562410 allow warning (or error) for automatic bsxfun
John W. Eaton <jwe@octave.org>
parents: 13873
diff changeset
2868 if (is_valid_bsxfun ("operator .^", a_dims, b_dims))
13012
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2869 {
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2870 return bsxfun_pow (a, b);
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2871 }
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2872 else
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2873 {
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2874 gripe_nonconformant ("operator .^", a_dims, b_dims);
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2875 return octave_value ();
15eefbd9d4e8 Implement a few missing automatic bsxfun power operators
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13005
diff changeset
2876 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2877 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2878
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2879 FloatComplexNDArray result (a_dims);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2880
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20228
diff changeset
2881 for (octave_idx_type i = 0; i < a.numel (); i++)
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2882 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10129
diff changeset
2883 octave_quit ();
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2884 result(i) = std::pow (a(i), b(i));
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2885 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2886
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2887 return result;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7578
diff changeset
2888 }