annotate libinterp/corefcn/xpow.cc @ 19052:9d8f53123800

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