annotate liboctave/array/CMatrix.cc @ 23084:ef4d915df748

maint: Merge stable to default.
author John W. Eaton <jwe@octave.org>
date Mon, 23 Jan 2017 14:27:48 -0500
parents 5839d16828cb e9a0469dedd9
children 092078913d54
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1993
1b57120c997b [project @ 1996-03-03 01:16:15 by jwe]
jwe
parents: 1968
diff changeset
1 // Matrix manipulations.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2 /*
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3
22323
bac0d6f07a3e maint: Update copyright notices for 2016.
John W. Eaton <jwe@octave.org>
parents: 22322
diff changeset
4 Copyright (C) 1994-2016 John W. Eaton
11523
fd0a3ac60b0e update copyright notices
John W. Eaton <jwe@octave.org>
parents: 11518
diff changeset
5 Copyright (C) 2008-2009 Jaroslav Hajek
9601
a9b37bae1802 add a couple of missing copyright statements
Jaroslav Hajek <highegg@gmail.com>
parents: 9578
diff changeset
6 Copyright (C) 2009 VZLU Prague, a.s.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
7
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
8 This file is part of Octave.
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
9
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
10 Octave is free software; you can redistribute it and/or modify it
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22600
diff changeset
11 under the terms of the GNU General Public License as published by
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22600
diff changeset
12 the Free Software Foundation; either version 3 of the License, or
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22600
diff changeset
13 (at your option) any later version.
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22600
diff changeset
14
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22600
diff changeset
15 Octave is distributed in the hope that it will be useful, but
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22600
diff changeset
16 WITHOUT ANY WARRANTY; without even the implied warranty of
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22600
diff changeset
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22600
diff changeset
18 GNU General Public License for more details.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
19
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
20 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: 6958
diff changeset
21 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6958
diff changeset
22 <http://www.gnu.org/licenses/>.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
23
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
24 */
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
25
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21723
diff changeset
26 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21273
diff changeset
27 # include "config.h"
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
28 #endif
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
29
1367
9f9131a8d706 [project @ 1995-09-06 00:07:03 by jwe]
jwe
parents: 1365
diff changeset
30 #include <cfloat>
9f9131a8d706 [project @ 1995-09-06 00:07:03 by jwe]
jwe
parents: 1365
diff changeset
31
3503
d14c483b3c12 [project @ 2000-02-01 04:06:07 by jwe]
jwe
parents: 3480
diff changeset
32 #include <iostream>
6209
15b299f6803d [project @ 2006-12-07 01:17:26 by jwe]
jwe
parents: 6207
diff changeset
33 #include <vector>
1367
9f9131a8d706 [project @ 1995-09-06 00:07:03 by jwe]
jwe
parents: 1365
diff changeset
34
5775
ace8d8d26933 [project @ 2006-04-24 19:13:06 by jwe]
jwe
parents: 5717
diff changeset
35 // FIXME
2443
4d941ba99862 [project @ 1996-10-30 18:51:26 by jwe]
jwe
parents: 2408
diff changeset
36 #include <sys/types.h>
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
37
4669
334a27c8f453 [project @ 2003-11-26 07:02:42 by jwe]
jwe
parents: 4593
diff changeset
38 #include "Array-util.h"
19269
65554f5847ac don't include oct-locbuf.h in header files unnecessarily
John W. Eaton <jwe@octave.org>
parents: 19065
diff changeset
39 #include "boolMatrix.h"
65554f5847ac don't include oct-locbuf.h in header files unnecessarily
John W. Eaton <jwe@octave.org>
parents: 19065
diff changeset
40 #include "chMatrix.h"
21269
3c8a3d35661a better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents: 21266
diff changeset
41 #include "chol.h"
19269
65554f5847ac don't include oct-locbuf.h in header files unnecessarily
John W. Eaton <jwe@octave.org>
parents: 19065
diff changeset
42 #include "dMatrix.h"
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
43 #include "CMatrix.h"
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
44 #include "CNDArray.h"
19269
65554f5847ac don't include oct-locbuf.h in header files unnecessarily
John W. Eaton <jwe@octave.org>
parents: 19065
diff changeset
45 #include "CRowVector.h"
65554f5847ac don't include oct-locbuf.h in header files unnecessarily
John W. Eaton <jwe@octave.org>
parents: 19065
diff changeset
46 #include "dRowVector.h"
65554f5847ac don't include oct-locbuf.h in header files unnecessarily
John W. Eaton <jwe@octave.org>
parents: 19065
diff changeset
47 #include "CDiagMatrix.h"
65554f5847ac don't include oct-locbuf.h in header files unnecessarily
John W. Eaton <jwe@octave.org>
parents: 19065
diff changeset
48 #include "dDiagMatrix.h"
21266
e69eaee28737 make better use of templates for Schur decomposition
John W. Eaton <jwe@octave.org>
parents: 21202
diff changeset
49 #include "schur.h"
21273
cbced1c09916 better use of templates for svd classes
John W. Eaton <jwe@octave.org>
parents: 21269
diff changeset
50 #include "svd.h"
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9469
diff changeset
51 #include "DET.h"
7503
8c32f95c2639 convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents: 7488
diff changeset
52 #include "functor.h"
22322
93b3cdd36854 move most f77 function decls to separate header files
John W. Eaton <jwe@octave.org>
parents: 22317
diff changeset
53 #include "lo-blas-proto.h"
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
54 #include "lo-error.h"
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
55 #include "lo-ieee.h"
22322
93b3cdd36854 move most f77 function decls to separate header files
John W. Eaton <jwe@octave.org>
parents: 22317
diff changeset
56 #include "lo-lapack-proto.h"
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
57 #include "lo-mappers.h"
1968
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1950
diff changeset
58 #include "lo-utils.h"
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
59 #include "mx-cm-dm.h"
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9469
diff changeset
60 #include "mx-cm-s.h"
3176
fccab8e7d35f [project @ 1998-05-18 20:33:31 by jwe]
jwe
parents: 3130
diff changeset
61 #include "mx-dm-cm.h"
1367
9f9131a8d706 [project @ 1995-09-06 00:07:03 by jwe]
jwe
parents: 1365
diff changeset
62 #include "mx-inlines.cc"
8774
b756ce0002db split implementation and interface in mx-op-defs and MArray-defs
Jaroslav Hajek <highegg@gmail.com>
parents: 8743
diff changeset
63 #include "mx-op-defs.h"
1650
23aa282707e8 [project @ 1995-12-20 06:53:12 by jwe]
jwe
parents: 1574
diff changeset
64 #include "oct-cmplx.h"
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9469
diff changeset
65 #include "oct-fftw.h"
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9469
diff changeset
66 #include "oct-locbuf.h"
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
67 #include "oct-norm.h"
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
68
22085
bf5fbf347aaf Avoid segfault with complex matrices using LAPACK (bug #46330).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22044
diff changeset
69 static const Complex Complex_NaN_result (octave::numeric_limits<double>::NaN (),
bf5fbf347aaf Avoid segfault with complex matrices using LAPACK (bug #46330).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22044
diff changeset
70 octave::numeric_limits<double>::NaN ());
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
71
1360
7eb93d12654c [project @ 1995-09-05 21:51:54 by jwe]
jwe
parents: 1321
diff changeset
72 // Complex Matrix class
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
73
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
74 ComplexMatrix::ComplexMatrix (const Matrix& a)
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
75 : ComplexNDArray (a)
22417
48c00363dc74 maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents: 22402
diff changeset
76 { }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
77
2349
b369227ce3d2 [project @ 1996-07-27 07:59:20 by jwe]
jwe
parents: 1993
diff changeset
78 ComplexMatrix::ComplexMatrix (const RowVector& rv)
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
79 : ComplexNDArray (rv)
22417
48c00363dc74 maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents: 22402
diff changeset
80 { }
2349
b369227ce3d2 [project @ 1996-07-27 07:59:20 by jwe]
jwe
parents: 1993
diff changeset
81
b369227ce3d2 [project @ 1996-07-27 07:59:20 by jwe]
jwe
parents: 1993
diff changeset
82 ComplexMatrix::ComplexMatrix (const ColumnVector& cv)
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
83 : ComplexNDArray (cv)
22417
48c00363dc74 maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents: 22402
diff changeset
84 { }
2349
b369227ce3d2 [project @ 1996-07-27 07:59:20 by jwe]
jwe
parents: 1993
diff changeset
85
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
86 ComplexMatrix::ComplexMatrix (const DiagMatrix& a)
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
87 : ComplexNDArray (a.dims (), 0.0)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
88 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
89 for (octave_idx_type i = 0; i < a.length (); i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
90 elem (i, i) = a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
91 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
92
19391
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
93 ComplexMatrix::ComplexMatrix (const MDiagArray2<double>& a)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
94 : ComplexNDArray (a.dims (), 0.0)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
95 {
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
96 for (octave_idx_type i = 0; i < a.length (); i++)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
97 elem (i, i) = a.elem (i, i);
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
98 }
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
99
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
100 ComplexMatrix::ComplexMatrix (const DiagArray2<double>& a)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
101 : ComplexNDArray (a.dims (), 0.0)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
102 {
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
103 for (octave_idx_type i = 0; i < a.length (); i++)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
104 elem (i, i) = a.elem (i, i);
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
105 }
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
106
2349
b369227ce3d2 [project @ 1996-07-27 07:59:20 by jwe]
jwe
parents: 1993
diff changeset
107 ComplexMatrix::ComplexMatrix (const ComplexRowVector& rv)
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
108 : ComplexNDArray (rv)
22417
48c00363dc74 maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents: 22402
diff changeset
109 { }
2349
b369227ce3d2 [project @ 1996-07-27 07:59:20 by jwe]
jwe
parents: 1993
diff changeset
110
b369227ce3d2 [project @ 1996-07-27 07:59:20 by jwe]
jwe
parents: 1993
diff changeset
111 ComplexMatrix::ComplexMatrix (const ComplexColumnVector& cv)
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
112 : ComplexNDArray (cv)
22417
48c00363dc74 maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents: 22402
diff changeset
113 { }
2349
b369227ce3d2 [project @ 1996-07-27 07:59:20 by jwe]
jwe
parents: 1993
diff changeset
114
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
115 ComplexMatrix::ComplexMatrix (const ComplexDiagMatrix& a)
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
116 : ComplexNDArray (a.dims (), 0.0)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
117 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
118 for (octave_idx_type i = 0; i < a.length (); i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
119 elem (i, i) = a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
120 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
121
19391
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
122 ComplexMatrix::ComplexMatrix (const MDiagArray2<Complex>& a)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
123 : ComplexNDArray (a.dims (), 0.0)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
124 {
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
125 for (octave_idx_type i = 0; i < a.length (); i++)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
126 elem (i, i) = a.elem (i, i);
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
127 }
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
128
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
129 ComplexMatrix::ComplexMatrix (const DiagArray2<Complex>& a)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
130 : ComplexNDArray (a.dims (), 0.0)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
131 {
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
132 for (octave_idx_type i = 0; i < a.length (); i++)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
133 elem (i, i) = a.elem (i, i);
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
134 }
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19340
diff changeset
135
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
136 // FIXME: could we use a templated mixed-type copy function here?
1574
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
137
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
138 ComplexMatrix::ComplexMatrix (const boolMatrix& a)
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
139 : ComplexNDArray (a)
22417
48c00363dc74 maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents: 22402
diff changeset
140 { }
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
141
1574
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
142 ComplexMatrix::ComplexMatrix (const charMatrix& a)
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
143 : ComplexNDArray (a.dims (), 0.0)
1574
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
144 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
145 for (octave_idx_type i = 0; i < a.rows (); i++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
146 for (octave_idx_type j = 0; j < a.cols (); j++)
8956
d91fa4b20bbb ensure nonnegative char -> real conversion
Jaroslav Hajek <highegg@gmail.com>
parents: 8920
diff changeset
147 elem (i, j) = static_cast<unsigned char> (a.elem (i, j));
1574
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
148 }
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
149
9663
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
150 ComplexMatrix::ComplexMatrix (const Matrix& re, const Matrix& im)
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
151 : ComplexNDArray (re.dims ())
9663
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
152 {
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
153 if (im.rows () != rows () || im.cols () != cols ())
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
154 (*current_liboctave_error_handler) ("complex: internal error");
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
155
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
156 octave_idx_type nel = numel ();
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
157 for (octave_idx_type i = 0; i < nel; i++)
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
158 xelem (i) = Complex (re(i), im(i));
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
159 }
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
160
2384
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
161 bool
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
162 ComplexMatrix::operator == (const ComplexMatrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
163 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
164 if (rows () != a.rows () || cols () != a.cols ())
2384
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
165 return false;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
166
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
167 return mx_inline_equal (numel (), data (), a.data ());
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
168 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
169
2384
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
170 bool
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
171 ComplexMatrix::operator != (const ComplexMatrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
172 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
173 return !(*this == a);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
174 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
175
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2800
diff changeset
176 bool
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2800
diff changeset
177 ComplexMatrix::is_hermitian (void) const
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2800
diff changeset
178 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
179 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
180 octave_idx_type nc = cols ();
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2800
diff changeset
181
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2800
diff changeset
182 if (is_square () && nr > 0)
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2800
diff changeset
183 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
184 for (octave_idx_type i = 0; i < nr; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
185 for (octave_idx_type j = i; j < nc; j++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
186 if (elem (i, j) != conj (elem (j, i)))
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
187 return false;
2815
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2800
diff changeset
188
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2800
diff changeset
189 return true;
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2800
diff changeset
190 }
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2800
diff changeset
191
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2800
diff changeset
192 return false;
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2800
diff changeset
193 }
33486d9e2d00 [project @ 1997-03-14 08:24:46 by jwe]
jwe
parents: 2800
diff changeset
194
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
195 // destructive insert/delete/reorder operations
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
196
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
197 ComplexMatrix&
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
198 ComplexMatrix::insert (const Matrix& a, octave_idx_type r, octave_idx_type c)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
199 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
200 octave_idx_type a_nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
201 octave_idx_type a_nc = a.cols ();
1699
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
202
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
203 if (r < 0 || r + a_nr > rows () || c < 0 || c + a_nc > cols ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
204 (*current_liboctave_error_handler) ("range error for insert");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
205
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
206 if (a_nr >0 && a_nc > 0)
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
207 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
208 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
209
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
210 for (octave_idx_type j = 0; j < a_nc; j++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
211 for (octave_idx_type i = 0; i < a_nr; i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
212 xelem (r+i, c+j) = a.elem (i, j);
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
213 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
214
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
215 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
216 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
217
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
218 ComplexMatrix&
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
219 ComplexMatrix::insert (const RowVector& a, octave_idx_type r, octave_idx_type c)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
220 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
221 octave_idx_type a_len = a.numel ();
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
222
1699
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
223 if (r < 0 || r >= rows () || c < 0 || c + a_len > cols ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
224 (*current_liboctave_error_handler) ("range error for insert");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
225
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
226 if (a_len > 0)
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
227 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
228 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
229
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
230 for (octave_idx_type i = 0; i < a_len; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
231 xelem (r, c+i) = a.elem (i);
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
232 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
233
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
234 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
235 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
236
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
237 ComplexMatrix&
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
238 ComplexMatrix::insert (const ColumnVector& a,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
239 octave_idx_type r, octave_idx_type c)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
240 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
241 octave_idx_type a_len = a.numel ();
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
242
1699
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
243 if (r < 0 || r + a_len > rows () || c < 0 || c >= cols ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
244 (*current_liboctave_error_handler) ("range error for insert");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
245
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
246 if (a_len > 0)
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
247 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
248 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
249
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
250 for (octave_idx_type i = 0; i < a_len; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
251 xelem (r+i, c) = a.elem (i);
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
252 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
253
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
254 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
255 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
256
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
257 ComplexMatrix&
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
258 ComplexMatrix::insert (const DiagMatrix& a,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
259 octave_idx_type r, octave_idx_type c)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
260 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
261 octave_idx_type a_nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
262 octave_idx_type a_nc = a.cols ();
1699
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
263
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
264 if (r < 0 || r + a_nr > rows () || c < 0 || c + a_nc > cols ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
265 (*current_liboctave_error_handler) ("range error for insert");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
266
1699
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
267 fill (0.0, r, c, r + a_nr - 1, c + a_nc - 1);
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
268
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
269 octave_idx_type a_len = a.length ();
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
270
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
271 if (a_len > 0)
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
272 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
273 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
274
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
275 for (octave_idx_type i = 0; i < a_len; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
276 xelem (r+i, c+i) = a.elem (i, i);
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
277 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
278
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
279 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
280 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
281
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
282 ComplexMatrix&
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
283 ComplexMatrix::insert (const ComplexMatrix& a,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
284 octave_idx_type r, octave_idx_type c)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
285 {
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
286 ComplexNDArray::insert (a, r, c);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
287 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
288 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
289
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
290 ComplexMatrix&
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
291 ComplexMatrix::insert (const ComplexRowVector& a,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
292 octave_idx_type r, octave_idx_type c)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
293 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
294 octave_idx_type a_len = a.numel ();
1699
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
295 if (r < 0 || r >= rows () || c < 0 || c + a_len > cols ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
296 (*current_liboctave_error_handler) ("range error for insert");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
297
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
298 for (octave_idx_type i = 0; i < a_len; i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
299 elem (r, c+i) = a.elem (i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
300
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
301 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
302 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
303
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
304 ComplexMatrix&
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
305 ComplexMatrix::insert (const ComplexColumnVector& a,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
306 octave_idx_type r, octave_idx_type c)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
307 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
308 octave_idx_type a_len = a.numel ();
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
309
1699
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
310 if (r < 0 || r + a_len > rows () || c < 0 || c >= cols ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
311 (*current_liboctave_error_handler) ("range error for insert");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
312
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
313 if (a_len > 0)
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
314 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
315 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
316
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
317 for (octave_idx_type i = 0; i < a_len; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
318 xelem (r+i, c) = a.elem (i);
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
319 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
320
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
321 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
322 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
323
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
324 ComplexMatrix&
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
325 ComplexMatrix::insert (const ComplexDiagMatrix& a,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
326 octave_idx_type r, octave_idx_type c)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
327 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
328 octave_idx_type a_nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
329 octave_idx_type a_nc = a.cols ();
1699
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
330
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
331 if (r < 0 || r + a_nr > rows () || c < 0 || c + a_nc > cols ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
332 (*current_liboctave_error_handler) ("range error for insert");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
333
1699
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
334 fill (0.0, r, c, r + a_nr - 1, c + a_nc - 1);
0c6d3b73bf69 [project @ 1996-01-07 02:36:50 by jwe]
jwe
parents: 1657
diff changeset
335
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
336 octave_idx_type a_len = a.length ();
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
337
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
338 if (a_len > 0)
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
339 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
340 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
341
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
342 for (octave_idx_type i = 0; i < a_len; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
343 xelem (r+i, c+i) = a.elem (i, i);
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
344 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
345
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
346 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
347 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
348
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
349 ComplexMatrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
350 ComplexMatrix::fill (double val)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
351 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
352 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
353 octave_idx_type nc = cols ();
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
354
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
355 if (nr > 0 && nc > 0)
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
356 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
357 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
358
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
359 for (octave_idx_type j = 0; j < nc; j++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
360 for (octave_idx_type i = 0; i < nr; i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
361 xelem (i, j) = val;
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
362 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
363
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
364 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
365 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
366
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
367 ComplexMatrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
368 ComplexMatrix::fill (const Complex& val)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
369 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
370 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
371 octave_idx_type nc = cols ();
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
372
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
373 if (nr > 0 && nc > 0)
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
374 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
375 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
376
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
377 for (octave_idx_type j = 0; j < nc; j++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
378 for (octave_idx_type i = 0; i < nr; i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
379 xelem (i, j) = val;
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
380 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
381
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
382 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
383 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
384
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
385 ComplexMatrix&
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
386 ComplexMatrix::fill (double val, octave_idx_type r1, octave_idx_type c1,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
387 octave_idx_type r2, octave_idx_type c2)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
388 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
389 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
390 octave_idx_type nc = cols ();
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
391
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
392 if (r1 < 0 || r2 < 0 || c1 < 0 || c2 < 0
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
393 || r1 >= nr || r2 >= nr || c1 >= nc || c2 >= nc)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
394 (*current_liboctave_error_handler) ("range error for fill");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
395
17663
7975d75f933c Use std::swap in liboctave instead of temporary variable.
Rik <rik@octave.org>
parents: 16300
diff changeset
396 if (r1 > r2) { std::swap (r1, r2); }
7975d75f933c Use std::swap in liboctave instead of temporary variable.
Rik <rik@octave.org>
parents: 16300
diff changeset
397 if (c1 > c2) { std::swap (c1, c2); }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
398
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
399 if (r2 >= r1 && c2 >= c1)
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
400 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
401 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
402
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
403 for (octave_idx_type j = c1; j <= c2; j++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
404 for (octave_idx_type i = r1; i <= r2; i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
405 xelem (i, j) = val;
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
406 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
407
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
408 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
409 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
410
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
411 ComplexMatrix&
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
412 ComplexMatrix::fill (const Complex& val, octave_idx_type r1, octave_idx_type c1,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
413 octave_idx_type r2, octave_idx_type c2)
458
38cb88095913 [project @ 1994-06-06 00:41:10 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 = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
416 octave_idx_type nc = cols ();
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
417
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
418 if (r1 < 0 || r2 < 0 || c1 < 0 || c2 < 0
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
419 || r1 >= nr || r2 >= nr || c1 >= nc || c2 >= nc)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
420 (*current_liboctave_error_handler) ("range error for fill");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
421
17663
7975d75f933c Use std::swap in liboctave instead of temporary variable.
Rik <rik@octave.org>
parents: 16300
diff changeset
422 if (r1 > r2) { std::swap (r1, r2); }
7975d75f933c Use std::swap in liboctave instead of temporary variable.
Rik <rik@octave.org>
parents: 16300
diff changeset
423 if (c1 > c2) { std::swap (c1, c2); }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
424
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
425 if (r2 >= r1 && c2 >=c1)
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
426 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
427 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
428
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
429 for (octave_idx_type j = c1; j <= c2; j++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
430 for (octave_idx_type i = r1; i <= r2; i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
431 xelem (i, j) = val;
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
432 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
433
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
434 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
435 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
436
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
437 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
438 ComplexMatrix::append (const Matrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
439 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
440 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
441 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
442 if (nr != a.rows ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
443 (*current_liboctave_error_handler) ("row dimension mismatch for append");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
444
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
445 octave_idx_type nc_insert = nc;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
446 ComplexMatrix retval (nr, nc + a.cols ());
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
447 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
448 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
449 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
450 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
451
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
452 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
453 ComplexMatrix::append (const RowVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
454 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
455 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
456 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
457 if (nr != 1)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
458 (*current_liboctave_error_handler) ("row dimension mismatch for append");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
459
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
460 octave_idx_type nc_insert = nc;
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
461 ComplexMatrix retval (nr, nc + a.numel ());
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
462 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
463 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
464 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
465 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
466
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
467 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
468 ComplexMatrix::append (const ColumnVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
469 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
470 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
471 octave_idx_type nc = cols ();
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
472 if (nr != a.numel ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
473 (*current_liboctave_error_handler) ("row dimension mismatch for append");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
474
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
475 octave_idx_type nc_insert = nc;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
476 ComplexMatrix retval (nr, nc + 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
477 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
478 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
479 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
480 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
481
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
482 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
483 ComplexMatrix::append (const DiagMatrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
484 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
485 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
486 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
487 if (nr != a.rows ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
488 (*current_liboctave_error_handler) ("row dimension mismatch for append");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
489
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
490 octave_idx_type nc_insert = nc;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
491 ComplexMatrix retval (nr, nc + a.cols ());
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
492 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
493 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
494 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
495 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
496
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
497 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
498 ComplexMatrix::append (const ComplexMatrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
499 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
500 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
501 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
502 if (nr != a.rows ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
503 (*current_liboctave_error_handler) ("row dimension mismatch for append");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
504
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
505 octave_idx_type nc_insert = nc;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
506 ComplexMatrix retval (nr, nc + a.cols ());
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
507 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
508 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
509 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
510 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
511
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
512 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
513 ComplexMatrix::append (const ComplexRowVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
514 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
515 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
516 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
517 if (nr != 1)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
518 (*current_liboctave_error_handler) ("row dimension mismatch for append");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
519
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
520 octave_idx_type nc_insert = nc;
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
521 ComplexMatrix retval (nr, nc + a.numel ());
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
522 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
523 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
524 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
525 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
526
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
527 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
528 ComplexMatrix::append (const ComplexColumnVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
529 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
530 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
531 octave_idx_type nc = cols ();
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
532 if (nr != a.numel ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
533 (*current_liboctave_error_handler) ("row dimension mismatch for append");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
534
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
535 octave_idx_type nc_insert = nc;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
536 ComplexMatrix retval (nr, nc + 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
537 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
538 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
539 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
540 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
541
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
542 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
543 ComplexMatrix::append (const ComplexDiagMatrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
544 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
545 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
546 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
547 if (nr != a.rows ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
548 (*current_liboctave_error_handler) ("row dimension mismatch for append");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
549
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
550 octave_idx_type nc_insert = nc;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
551 ComplexMatrix retval (nr, nc + a.cols ());
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
552 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
553 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
554 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
555 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
556
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
557 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
558 ComplexMatrix::stack (const Matrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
559 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
560 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
561 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
562 if (nc != a.cols ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
563 (*current_liboctave_error_handler) ("column dimension mismatch for stack");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
564
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
565 octave_idx_type nr_insert = nr;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
566 ComplexMatrix retval (nr + a.rows (), nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
567 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
568 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
569 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
570 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
571
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
572 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
573 ComplexMatrix::stack (const RowVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
574 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
575 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
576 octave_idx_type nc = cols ();
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
577 if (nc != a.numel ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
578 (*current_liboctave_error_handler) ("column dimension mismatch for stack");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
579
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
580 octave_idx_type nr_insert = nr;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
581 ComplexMatrix retval (nr + 1, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
582 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
583 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
584 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
585 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
586
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
587 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
588 ComplexMatrix::stack (const ColumnVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
589 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
590 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
591 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
592 if (nc != 1)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
593 (*current_liboctave_error_handler) ("column dimension mismatch for stack");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
594
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
595 octave_idx_type nr_insert = nr;
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
596 ComplexMatrix retval (nr + a.numel (), nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
597 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
598 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
599 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
600 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
601
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
602 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
603 ComplexMatrix::stack (const DiagMatrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
604 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
605 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
606 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
607 if (nc != a.cols ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
608 (*current_liboctave_error_handler) ("column dimension mismatch for stack");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
609
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
610 octave_idx_type nr_insert = nr;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
611 ComplexMatrix retval (nr + a.rows (), nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
612 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
613 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
614 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
615 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
616
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
617 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
618 ComplexMatrix::stack (const ComplexMatrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
619 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
620 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
621 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
622 if (nc != a.cols ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
623 (*current_liboctave_error_handler) ("column dimension mismatch for stack");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
624
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
625 octave_idx_type nr_insert = nr;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
626 ComplexMatrix retval (nr + a.rows (), nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
627 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
628 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
629 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
630 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
631
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
632 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
633 ComplexMatrix::stack (const ComplexRowVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
634 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
635 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
636 octave_idx_type nc = cols ();
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
637 if (nc != a.numel ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
638 (*current_liboctave_error_handler) ("column dimension mismatch for stack");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
639
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
640 octave_idx_type nr_insert = nr;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
641 ComplexMatrix retval (nr + 1, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
642 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
643 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
644 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
645 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
646
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
647 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
648 ComplexMatrix::stack (const ComplexColumnVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
649 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
650 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
651 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
652 if (nc != 1)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
653 (*current_liboctave_error_handler) ("column dimension mismatch for stack");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
654
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
655 octave_idx_type nr_insert = nr;
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
656 ComplexMatrix retval (nr + a.numel (), nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
657 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
658 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
659 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
660 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
661
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
662 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
663 ComplexMatrix::stack (const ComplexDiagMatrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
664 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
665 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
666 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
667 if (nc != a.cols ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
668 (*current_liboctave_error_handler) ("column dimension mismatch for stack");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
669
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
670 octave_idx_type nr_insert = nr;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
671 ComplexMatrix retval (nr + a.rows (), nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
672 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
673 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
674 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
675 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
676
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
677 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
678 conj (const ComplexMatrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
679 {
13107
353c71c76f22 maint: fix compilation problem with g++ -std=c++0x option
Júlio Hoffimann <julio.hoffimann@gmail.com>
parents: 11596
diff changeset
680 return do_mx_unary_map<Complex, Complex, std::conj<double> > (a);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
681 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
682
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
683 // resize is the destructive equivalent for this one
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
684
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
685 ComplexMatrix
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
686 ComplexMatrix::extract (octave_idx_type r1, octave_idx_type c1,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
687 octave_idx_type r2, octave_idx_type c2) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
688 {
17663
7975d75f933c Use std::swap in liboctave instead of temporary variable.
Rik <rik@octave.org>
parents: 16300
diff changeset
689 if (r1 > r2) { std::swap (r1, r2); }
7975d75f933c Use std::swap in liboctave instead of temporary variable.
Rik <rik@octave.org>
parents: 16300
diff changeset
690 if (c1 > c2) { std::swap (c1, c2); }
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
691
10805
8c858a1a2079 simplify Matrix::extract
Jaroslav Hajek <highegg@gmail.com>
parents: 10779
diff changeset
692 return index (idx_vector (r1, r2+1), idx_vector (c1, c2+1));
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
693 }
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
694
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
695 ComplexMatrix
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
696 ComplexMatrix::extract_n (octave_idx_type r1, octave_idx_type c1,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
697 octave_idx_type nr, octave_idx_type nc) const
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
698 {
10806
7c542263a92a omissions from last two patches
Jaroslav Hajek <highegg@gmail.com>
parents: 10805
diff changeset
699 return index (idx_vector (r1, r1 + nr), idx_vector (c1, c1 + nc));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
700 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
701
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
702 // extract row or column i.
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
703
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
704 ComplexRowVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
705 ComplexMatrix::row (octave_idx_type i) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
706 {
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10314
diff changeset
707 return index (idx_vector (i), idx_vector::colon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
708 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
709
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
710 ComplexColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
711 ComplexMatrix::column (octave_idx_type i) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
712 {
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10314
diff changeset
713 return index (idx_vector::colon, idx_vector (i));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
714 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
715
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
716 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
717 ComplexMatrix::inverse (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
718 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
719 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
720 double rcon;
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
721 MatrixType mattype (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
722 return inverse (mattype, info, rcon, 0, 0);
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
723 }
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
724
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
725 ComplexMatrix
6479
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
726 ComplexMatrix::inverse (octave_idx_type& info) const
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
727 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
728 double rcon;
6479
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
729 MatrixType mattype (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
730 return inverse (mattype, info, rcon, 0, 0);
6479
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
731 }
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
732
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
733 ComplexMatrix
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21317
diff changeset
734 ComplexMatrix::inverse (octave_idx_type& info, double& rcon, bool force,
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21317
diff changeset
735 bool calc_cond) const
6479
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
736 {
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
737 MatrixType mattype (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
738 return inverse (mattype, info, rcon, force, calc_cond);
6479
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
739 }
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
740
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
741 ComplexMatrix
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
742 ComplexMatrix::inverse (MatrixType &mattype) const
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
743 {
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
744 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
745 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
746 return inverse (mattype, info, rcon, 0, 0);
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
747 }
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
748
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
749 ComplexMatrix
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
750 ComplexMatrix::inverse (MatrixType &mattype, octave_idx_type& info) const
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
751 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
752 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
753 return inverse (mattype, info, rcon, 0, 0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
754 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
755
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
756 ComplexMatrix
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
757 ComplexMatrix::tinverse (MatrixType &mattype, octave_idx_type& info,
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21317
diff changeset
758 double& rcon, bool force, bool calc_cond) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
759 {
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
760 ComplexMatrix retval;
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
761
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
762 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
763 F77_INT nc = octave::to_f77_int (cols ());
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
764
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
765 if (nr != nc || nr == 0 || nc == 0)
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
766 (*current_liboctave_error_handler) ("inverse requires square matrix");
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
767
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
768 int typ = mattype.type ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
769 char uplo = (typ == MatrixType::Lower ? 'L' : 'U');
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
770 char udiag = 'N';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
771 retval = *this;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
772 Complex *tmp_data = retval.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
773
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
774 F77_INT tmp_info = 0;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
775
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
776 F77_XFCN (ztrtri, ZTRTRI,(F77_CONST_CHAR_ARG2 (&uplo, 1),
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
777 F77_CONST_CHAR_ARG2 (&udiag, 1),
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
778 nr, F77_DBLE_CMPLX_ARG (tmp_data), nr, tmp_info
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
779 F77_CHAR_ARG_LEN (1)
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
780 F77_CHAR_ARG_LEN (1)));
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
781
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
782 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
783
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
784 // Throw-away extra info LAPACK gives so as to not change output.
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
785 rcon = 0.0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
786 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
787 info = -1;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
788 else if (calc_cond)
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
789 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
790 F77_INT ztrcon_info = 0;
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
791 char job = '1';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
792
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
793 OCTAVE_LOCAL_BUFFER (Complex, cwork, 2*nr);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
794 OCTAVE_LOCAL_BUFFER (double, rwork, nr);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
795
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
796 F77_XFCN (ztrcon, ZTRCON, (F77_CONST_CHAR_ARG2 (&job, 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
797 F77_CONST_CHAR_ARG2 (&uplo, 1),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
798 F77_CONST_CHAR_ARG2 (&udiag, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
799 nr, F77_DBLE_CMPLX_ARG (tmp_data), nr, rcon,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
800 F77_DBLE_CMPLX_ARG (cwork), rwork, ztrcon_info
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
801 F77_CHAR_ARG_LEN (1)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
802 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
803 F77_CHAR_ARG_LEN (1)));
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
804
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
805 if (ztrcon_info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
806 info = -1;
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
807 }
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
808
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
809 if (info == -1 && ! force)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
810 retval = *this; // Restore matrix contents.
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
811
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
812 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
813 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
814
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
815 ComplexMatrix
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
816 ComplexMatrix::finverse (MatrixType &mattype, octave_idx_type& info,
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21317
diff changeset
817 double& rcon, bool force, bool calc_cond) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
818 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
819 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
820
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
821 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
822 F77_INT nc = octave::to_f77_int (cols ());
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
823
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
824 if (nr != nc)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
825 (*current_liboctave_error_handler) ("inverse requires square matrix");
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
826
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
827 Array<F77_INT> ipvt (dim_vector (nr, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
828 F77_INT *pipvt = ipvt.fortran_vec ();
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
829
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
830 retval = *this;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
831 Complex *tmp_data = retval.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
832
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
833 Array<Complex> z (dim_vector (1, 1));
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
834 F77_INT lwork = -1;
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
835
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
836 // Query the optimum work array size.
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
837
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
838 F77_INT tmp_info = 0;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
839
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
840 F77_XFCN (zgetri, ZGETRI, (nc, F77_DBLE_CMPLX_ARG (tmp_data), nr, pipvt,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
841 F77_DBLE_CMPLX_ARG (z.fortran_vec ()), lwork,
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
842 tmp_info));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
843
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
844 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
845
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
846 lwork = static_cast<F77_INT> (octave::math::real (z(0)));
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
847 lwork = (lwork < 2 *nc ? 2*nc : lwork);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
848 z.resize (dim_vector (lwork, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
849 Complex *pz = z.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
850
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
851 info = 0;
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
852 tmp_info = 0;
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
853
22085
bf5fbf347aaf Avoid segfault with complex matrices using LAPACK (bug #46330).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22044
diff changeset
854 // Calculate (always, see bug #45577) the norm of the matrix, for later use.
bf5fbf347aaf Avoid segfault with complex matrices using LAPACK (bug #46330).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22044
diff changeset
855 double anorm =
bf5fbf347aaf Avoid segfault with complex matrices using LAPACK (bug #46330).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22044
diff changeset
856 retval.abs ().sum ().row (static_cast<octave_idx_type>(0)).max ();
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
857
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
858 // Work around bug #45577, LAPACK crashes Octave if norm is NaN
22044
571b42508e1e Avoid segfault with matrices containing Inf & NaN (bug #46330).
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22022
diff changeset
859 // and bug #46330, segfault with matrices containing Inf & NaN
571b42508e1e Avoid segfault with matrices containing Inf & NaN (bug #46330).
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22022
diff changeset
860 if (octave::math::isnan (anorm) || octave::math::isinf (anorm))
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
861 info = -1;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
862 else
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
863 {
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
864 F77_XFCN (zgetrf, ZGETRF, (nc, nc, F77_DBLE_CMPLX_ARG (tmp_data), nr, pipvt,
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
865 tmp_info));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
866
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
867 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
868 }
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
869
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
870 // Throw-away extra info LAPACK gives so as to not change output.
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
871 rcon = 0.0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
872 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
873 info = -1;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
874 else if (calc_cond)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
875 {
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
876 // Now calculate the condition number for non-singular matrix.
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
877 F77_INT zgecon_info = 0;
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
878 char job = '1';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
879 Array<double> rz (dim_vector (2 * nc, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
880 double *prz = rz.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
881 F77_XFCN (zgecon, ZGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
882 nc, F77_DBLE_CMPLX_ARG (tmp_data), nr, anorm,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
883 rcon, F77_DBLE_CMPLX_ARG (pz), prz, zgecon_info
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
884 F77_CHAR_ARG_LEN (1)));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
885
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
886 if (zgecon_info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
887 info = -1;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
888 }
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
889
22044
571b42508e1e Avoid segfault with matrices containing Inf & NaN (bug #46330).
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22022
diff changeset
890 if ((info == -1 && ! force) || octave::math::isinf (anorm))
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
891 retval = *this; // Restore contents.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
892 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
893 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
894 F77_INT zgetri_info = 0;
4329
d53c33d93440 [project @ 2003-02-18 20:00:48 by jwe]
jwe
parents: 4316
diff changeset
895
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
896 F77_XFCN (zgetri, ZGETRI, (nc, F77_DBLE_CMPLX_ARG (tmp_data), nr, pipvt,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
897 F77_DBLE_CMPLX_ARG (pz), lwork, zgetri_info));
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
898
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
899 if (zgetri_info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
900 info = -1;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
901 }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
902
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
903 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
904 mattype.mark_as_rectangular ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
905
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
906 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
907 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
908
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
909 ComplexMatrix
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
910 ComplexMatrix::inverse (MatrixType &mattype, octave_idx_type& info,
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21317
diff changeset
911 double& rcon, bool force, bool calc_cond) const
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
912 {
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
913 int typ = mattype.type (false);
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
914 ComplexMatrix ret;
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
915
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
916 if (typ == MatrixType::Unknown)
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
917 typ = mattype.type (*this);
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
918
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
919 if (typ == MatrixType::Upper || typ == MatrixType::Lower)
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
920 ret = tinverse (mattype, info, rcon, force, calc_cond);
6840
2f17d5556756 [project @ 2007-08-29 08:37:47 by dbateman]
dbateman
parents: 6699
diff changeset
921 else
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
922 {
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
923 if (mattype.is_hermitian ())
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
924 {
22317
6ca3acf5fad8 move some new numeric classes to namespace octave::math
John W. Eaton <jwe@octave.org>
parents: 22274
diff changeset
925 octave::math::chol<ComplexMatrix> chol (*this, info, true, calc_cond);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
926 if (info == 0)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
927 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
928 if (calc_cond)
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14557
diff changeset
929 rcon = chol.rcond ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
930 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
931 rcon = 1.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
932 ret = chol.inverse ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
933 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
934 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
935 mattype.mark_as_unsymmetric ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
936 }
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
937
20955
77f5591878bf maint: Use '! expr' rather than '!expr' to conform to coding guidelines.
Rik <rik@octave.org>
parents: 20715
diff changeset
938 if (! mattype.is_hermitian ())
15018
3d8ace26c5b4 maint: Use Octave coding conventions for cuddled parentheses in liboctave/.
Rik <rik@octave.org>
parents: 14846
diff changeset
939 ret = finverse (mattype, info, rcon, force, calc_cond);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
940
22849
1d242ae72240 Return 0 for special case of scalar Inf input to inverse (bug #49690).
Rik <rik@octave.org>
parents: 22848
diff changeset
941 if ((calc_cond || mattype.is_hermitian ()) && rcon == 0.)
1d242ae72240 Return 0 for special case of scalar Inf input to inverse (bug #49690).
Rik <rik@octave.org>
parents: 22848
diff changeset
942 {
1d242ae72240 Return 0 for special case of scalar Inf input to inverse (bug #49690).
Rik <rik@octave.org>
parents: 22848
diff changeset
943 if (numel () == 1)
1d242ae72240 Return 0 for special case of scalar Inf input to inverse (bug #49690).
Rik <rik@octave.org>
parents: 22848
diff changeset
944 ret = ComplexMatrix (1, 1, 0.);
1d242ae72240 Return 0 for special case of scalar Inf input to inverse (bug #49690).
Rik <rik@octave.org>
parents: 22848
diff changeset
945 else
1d242ae72240 Return 0 for special case of scalar Inf input to inverse (bug #49690).
Rik <rik@octave.org>
parents: 22848
diff changeset
946 ret = ComplexMatrix (rows (), columns (),
1d242ae72240 Return 0 for special case of scalar Inf input to inverse (bug #49690).
Rik <rik@octave.org>
parents: 22848
diff changeset
947 Complex (octave::numeric_limits<double>::Inf (), 0.));
1d242ae72240 Return 0 for special case of scalar Inf input to inverse (bug #49690).
Rik <rik@octave.org>
parents: 22848
diff changeset
948 }
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
949 }
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
950
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
951 return ret;
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
952 }
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
953
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
954 ComplexMatrix
4384
f1fcc371e5ef [project @ 2003-04-23 19:51:57 by jwe]
jwe
parents: 4349
diff changeset
955 ComplexMatrix::pseudo_inverse (double tol) const
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
956 {
1549
d1fe5918e16b [project @ 1995-10-08 00:11:52 by jwe]
jwe
parents: 1367
diff changeset
957 ComplexMatrix retval;
d1fe5918e16b [project @ 1995-10-08 00:11:52 by jwe]
jwe
parents: 1367
diff changeset
958
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
959 octave::math::svd<ComplexMatrix> result (*this,
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
960 octave::math::svd<ComplexMatrix>::Type::economy);
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
961
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
962 DiagMatrix S = result.singular_values ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
963 ComplexMatrix U = result.left_singular_matrix ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
964 ComplexMatrix V = result.right_singular_matrix ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
965
15448
0a0912a9ab6e Replace deprecated DiagArray2<T>::diag calls with DiagArray2<T>::extract_diag
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15383
diff changeset
966 ColumnVector sigma = S.extract_diag ();
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
967
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
968 octave_idx_type r = sigma.numel () - 1;
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
969 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
970 octave_idx_type nc = cols ();
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
971
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
972 if (tol <= 0.0)
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
973 {
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
974 if (nr > nc)
15220
61822c866ba1 use std::numeric_limits<T>::epsilon in C++ code
John W. Eaton <jwe@octave.org>
parents: 15212
diff changeset
975 tol = nr * sigma.elem (0) * std::numeric_limits<double>::epsilon ();
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
976 else
15220
61822c866ba1 use std::numeric_limits<T>::epsilon in C++ code
John W. Eaton <jwe@octave.org>
parents: 15212
diff changeset
977 tol = nc * sigma.elem (0) * std::numeric_limits<double>::epsilon ();
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
978 }
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
979
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
980 while (r >= 0 && sigma.elem (r) < tol)
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
981 r--;
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
982
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
983 if (r < 0)
1549
d1fe5918e16b [project @ 1995-10-08 00:11:52 by jwe]
jwe
parents: 1367
diff changeset
984 retval = ComplexMatrix (nc, nr, 0.0);
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
985 else
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
986 {
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
987 ComplexMatrix Ur = U.extract (0, 0, nr-1, r);
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21724
diff changeset
988 DiagMatrix D = DiagMatrix (sigma.extract (0, r)).inverse ();
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
989 ComplexMatrix Vr = V.extract (0, 0, nc-1, r);
1549
d1fe5918e16b [project @ 1995-10-08 00:11:52 by jwe]
jwe
parents: 1367
diff changeset
990 retval = Vr * D * Ur.hermitian ();
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
991 }
1549
d1fe5918e16b [project @ 1995-10-08 00:11:52 by jwe]
jwe
parents: 1367
diff changeset
992
d1fe5918e16b [project @ 1995-10-08 00:11:52 by jwe]
jwe
parents: 1367
diff changeset
993 return retval;
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
994 }
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
995
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9469
diff changeset
996 #if defined (HAVE_FFTW)
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
997
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
998 ComplexMatrix
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
999 ComplexMatrix::fourier (void) const
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1000 {
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1001 size_t nr = rows ();
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1002 size_t nc = cols ();
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1003
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1004 ComplexMatrix retval (nr, nc);
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1005
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1006 size_t npts, nsamples;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1007
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1008 if (nr == 1 || nc == 1)
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1009 {
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1010 npts = nr > nc ? nr : nc;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1011 nsamples = 1;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1012 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1013 else
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1014 {
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1015 npts = nr;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1016 nsamples = nc;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1017 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1018
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1019 const Complex *in (data ());
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1020 Complex *out (retval.fortran_vec ());
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1021
23058
5839d16828cb move fftw classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22988
diff changeset
1022 octave::fftw::fft (in, out, npts, nsamples);
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1023
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1024 return retval;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1025 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1026
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1027 ComplexMatrix
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1028 ComplexMatrix::ifourier (void) const
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1029 {
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1030 size_t nr = rows ();
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1031 size_t nc = cols ();
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1032
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1033 ComplexMatrix retval (nr, nc);
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1034
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1035 size_t npts, nsamples;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1036
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1037 if (nr == 1 || nc == 1)
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1038 {
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1039 npts = nr > nc ? nr : nc;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1040 nsamples = 1;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1041 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1042 else
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1043 {
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1044 npts = nr;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1045 nsamples = nc;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1046 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1047
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1048 const Complex *in (data ());
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1049 Complex *out (retval.fortran_vec ());
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1050
23058
5839d16828cb move fftw classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22988
diff changeset
1051 octave::fftw::ifft (in, out, npts, nsamples);
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1052
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1053 return retval;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1054 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1055
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1056 ComplexMatrix
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1057 ComplexMatrix::fourier2d (void) const
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1058 {
20218
b2100e1659ac maint: Use cuddled parentheses when indexing dimension_vectors.
Rik <rik@octave.org>
parents: 19864
diff changeset
1059 dim_vector dv (rows (), cols ());
4773
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
1060
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
1061 ComplexMatrix retval (rows (), cols ());
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
1062 const Complex *in (data ());
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
1063 Complex *out (retval.fortran_vec ());
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
1064
23058
5839d16828cb move fftw classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22988
diff changeset
1065 octave::fftw::fftNd (in, out, 2, dv);
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1066
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1067 return retval;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1068 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1069
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1070 ComplexMatrix
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1071 ComplexMatrix::ifourier2d (void) const
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1072 {
20218
b2100e1659ac maint: Use cuddled parentheses when indexing dimension_vectors.
Rik <rik@octave.org>
parents: 19864
diff changeset
1073 dim_vector dv (rows (), cols ());
4773
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
1074
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
1075 ComplexMatrix retval (rows (), cols ());
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
1076 const Complex *in (data ());
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
1077 Complex *out (retval.fortran_vec ());
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
1078
23058
5839d16828cb move fftw classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22988
diff changeset
1079 octave::fftw::ifftNd (in, out, 2, dv);
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1080
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1081 return retval;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1082 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1083
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1084 #else
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1085
22322
93b3cdd36854 move most f77 function decls to separate header files
John W. Eaton <jwe@octave.org>
parents: 22317
diff changeset
1086 #include "lo-fftpack-proto.h"
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9469
diff changeset
1087
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
1088 ComplexMatrix
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1089 ComplexMatrix::fourier (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1090 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1091 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1092
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1093 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1094 octave_idx_type nc = cols ();
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1095 octave_idx_type nsamples;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1096
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1097 F77_INT npts;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1098
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1099 if (nr == 1 || nc == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1100 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1101 npts = octave::to_f77_int (nr > nc ? nr : nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1102 nsamples = 1;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1103 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1104 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1105 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1106 npts = octave::to_f77_int (nr);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1107 nsamples = nc;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1108 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1109
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1110 octave_idx_type nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1111
19340
fcd9e1198847 CMatrix.cc: Use undeprecated Array constructor (bug #43646).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 19321
diff changeset
1112 Array<Complex> wsave (dim_vector (nn, 1));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1113 Complex *pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1114
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1115 retval = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1116 Complex *tmp_data = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1117
22261
77c4d43e06d1 Use new macros for passing complex arguments to Fortran FFTPACK subroutines
Mike Miller <mtmiller@octave.org>
parents: 22204
diff changeset
1118 F77_FUNC (zffti, ZFFTI) (npts, F77_DBLE_CMPLX_ARG (pwsave));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1119
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1120 for (octave_idx_type j = 0; j < nsamples; j++)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1121 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10124
diff changeset
1122 octave_quit ();
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1123
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1124 F77_FUNC (zfftf, ZFFTF) (npts, F77_DBLE_CMPLX_ARG (&tmp_data[npts*j]),
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1125 F77_DBLE_CMPLX_ARG (pwsave));
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1126 }
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1127
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1128 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1129 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1130
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1131 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1132 ComplexMatrix::ifourier (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1133 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1134 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1135
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1136 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1137 octave_idx_type nc = cols ();
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1138 octave_idx_type nsamples;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1139
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1140 F77_INT npts;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1141
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1142 if (nr == 1 || nc == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1143 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1144 npts = octave::to_f77_int (nr > nc ? nr : nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1145 nsamples = 1;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1146 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1147 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1148 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1149 npts = octave::to_f77_int (nr);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1150 nsamples = nc;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1151 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1152
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1153 octave_idx_type nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1154
19340
fcd9e1198847 CMatrix.cc: Use undeprecated Array constructor (bug #43646).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 19321
diff changeset
1155 Array<Complex> wsave (dim_vector (nn, 1));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1156 Complex *pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1157
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1158 retval = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1159 Complex *tmp_data = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1160
22261
77c4d43e06d1 Use new macros for passing complex arguments to Fortran FFTPACK subroutines
Mike Miller <mtmiller@octave.org>
parents: 22204
diff changeset
1161 F77_FUNC (zffti, ZFFTI) (npts, F77_DBLE_CMPLX_ARG (pwsave));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1162
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1163 for (octave_idx_type j = 0; j < nsamples; j++)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1164 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10124
diff changeset
1165 octave_quit ();
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1166
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1167 F77_FUNC (zfftb, ZFFTB) (npts, F77_DBLE_CMPLX_ARG (&tmp_data[npts*j]),
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1168 F77_DBLE_CMPLX_ARG (pwsave));
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1169 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1170
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1171 for (octave_idx_type j = 0; j < npts*nsamples; j++)
3572
8d641545e006 [project @ 2000-02-03 21:39:48 by jwe]
jwe
parents: 3504
diff changeset
1172 tmp_data[j] = tmp_data[j] / static_cast<double> (npts);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1173
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1174 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1175 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1176
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1177 ComplexMatrix
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1178 ComplexMatrix::fourier2d (void) const
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1179 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1180 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1181
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1182 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1183 F77_INT nc = octave::to_f77_int (cols ());
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1184
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1185 F77_INT npts, nsamples;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1186
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1187 if (nr == 1 || nc == 1)
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1188 {
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1189 npts = nr > nc ? nr : nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1190 nsamples = 1;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1191 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1192 else
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1193 {
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1194 npts = nr;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1195 nsamples = nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1196 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1197
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1198 F77_INT nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1199
19340
fcd9e1198847 CMatrix.cc: Use undeprecated Array constructor (bug #43646).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 19321
diff changeset
1200 Array<Complex> wsave (dim_vector (nn, 1));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1201 Complex *pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1202
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1203 retval = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1204 Complex *tmp_data = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1205
22261
77c4d43e06d1 Use new macros for passing complex arguments to Fortran FFTPACK subroutines
Mike Miller <mtmiller@octave.org>
parents: 22204
diff changeset
1206 F77_FUNC (zffti, ZFFTI) (npts, F77_DBLE_CMPLX_ARG (pwsave));
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1207
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1208 for (F77_INT j = 0; j < nsamples; j++)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1209 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10124
diff changeset
1210 octave_quit ();
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1211
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1212 F77_FUNC (zfftf, ZFFTF) (npts, F77_DBLE_CMPLX_ARG (&tmp_data[npts*j]),
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1213 F77_DBLE_CMPLX_ARG (pwsave));
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1214 }
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1215
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1216 npts = nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1217 nsamples = nr;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1218 nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1219
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
1220 wsave.resize (dim_vector (nn, 1));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1221 pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1222
19340
fcd9e1198847 CMatrix.cc: Use undeprecated Array constructor (bug #43646).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 19321
diff changeset
1223 Array<Complex> tmp (dim_vector (npts, 1));
4773
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
1224 Complex *prow = tmp.fortran_vec ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1225
22261
77c4d43e06d1 Use new macros for passing complex arguments to Fortran FFTPACK subroutines
Mike Miller <mtmiller@octave.org>
parents: 22204
diff changeset
1226 F77_FUNC (zffti, ZFFTI) (npts, F77_DBLE_CMPLX_ARG (pwsave));
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1227
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1228 for (F77_INT j = 0; j < nsamples; j++)
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1229 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10124
diff changeset
1230 octave_quit ();
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1231
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1232 for (F77_INT i = 0; i < npts; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1233 prow[i] = tmp_data[i*nr + j];
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1234
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1235 F77_FUNC (zfftf, ZFFTF) (npts, F77_DBLE_CMPLX_ARG (prow),
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1236 F77_DBLE_CMPLX_ARG (pwsave));
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1237
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1238 for (F77_INT i = 0; i < npts; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1239 tmp_data[i*nr + j] = prow[i];
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1240 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1241
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1242 return retval;
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1243 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1244
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1245 ComplexMatrix
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1246 ComplexMatrix::ifourier2d (void) const
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1247 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1248 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1249
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1250 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1251 F77_INT nc = octave::to_f77_int (cols ());
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1252
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1253 F77_INT npts, nsamples;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1254
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1255 if (nr == 1 || nc == 1)
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1256 {
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1257 npts = nr > nc ? nr : nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1258 nsamples = 1;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1259 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1260 else
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1261 {
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1262 npts = nr;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1263 nsamples = nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1264 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1265
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1266 F77_INT nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1267
19340
fcd9e1198847 CMatrix.cc: Use undeprecated Array constructor (bug #43646).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 19321
diff changeset
1268 Array<Complex> wsave (dim_vector (nn, 1));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1269 Complex *pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1270
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1271 retval = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1272 Complex *tmp_data = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1273
22261
77c4d43e06d1 Use new macros for passing complex arguments to Fortran FFTPACK subroutines
Mike Miller <mtmiller@octave.org>
parents: 22204
diff changeset
1274 F77_FUNC (zffti, ZFFTI) (npts, F77_DBLE_CMPLX_ARG (pwsave));
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1275
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1276 for (F77_INT j = 0; j < nsamples; j++)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1277 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10124
diff changeset
1278 octave_quit ();
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1279
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1280 F77_FUNC (zfftb, ZFFTB) (npts, F77_DBLE_CMPLX_ARG (&tmp_data[npts*j]),
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1281 F77_DBLE_CMPLX_ARG (pwsave));
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1282 }
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1283
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1284 for (F77_INT j = 0; j < npts*nsamples; j++)
3572
8d641545e006 [project @ 2000-02-03 21:39:48 by jwe]
jwe
parents: 3504
diff changeset
1285 tmp_data[j] = tmp_data[j] / static_cast<double> (npts);
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1286
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1287 npts = nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1288 nsamples = nr;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1289 nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1290
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
1291 wsave.resize (dim_vector (nn, 1));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1292 pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1293
19340
fcd9e1198847 CMatrix.cc: Use undeprecated Array constructor (bug #43646).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 19321
diff changeset
1294 Array<Complex> tmp (dim_vector (npts, 1));
4773
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
1295 Complex *prow = tmp.fortran_vec ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1296
22261
77c4d43e06d1 Use new macros for passing complex arguments to Fortran FFTPACK subroutines
Mike Miller <mtmiller@octave.org>
parents: 22204
diff changeset
1297 F77_FUNC (zffti, ZFFTI) (npts, F77_DBLE_CMPLX_ARG (pwsave));
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1298
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1299 for (F77_INT j = 0; j < nsamples; j++)
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1300 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 10124
diff changeset
1301 octave_quit ();
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
1302
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1303 for (F77_INT i = 0; i < npts; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1304 prow[i] = tmp_data[i*nr + j];
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1305
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1306 F77_FUNC (zfftb, ZFFTB) (npts, F77_DBLE_CMPLX_ARG (prow),
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1307 F77_DBLE_CMPLX_ARG (pwsave));
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1308
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1309 for (F77_INT i = 0; i < npts; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1310 tmp_data[i*nr + j] = prow[i] / static_cast<double> (npts);
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1311 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1312
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1313 return retval;
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1314 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1315
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1316 #endif
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1317
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1318 ComplexDET
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1319 ComplexMatrix::determinant (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1320 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1321 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1322 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1323 return determinant (info, rcon, 0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1324 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1325
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1326 ComplexDET
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
1327 ComplexMatrix::determinant (octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1328 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1329 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1330 return determinant (info, rcon, 0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1331 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1332
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1333 ComplexDET
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1334 ComplexMatrix::determinant (octave_idx_type& info, double& rcon,
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21317
diff changeset
1335 bool calc_cond) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1336 {
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1337 MatrixType mattype (*this);
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1338 return determinant (mattype, info, rcon, calc_cond);
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1339 }
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1340
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1341 ComplexDET
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1342 ComplexMatrix::determinant (MatrixType& mattype,
8806
c7864bb74914 avoid some GCC warnings
John W. Eaton <jwe@octave.org>
parents: 8801
diff changeset
1343 octave_idx_type& info, double& rcon,
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21317
diff changeset
1344 bool calc_cond) const
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1345 {
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1346 ComplexDET retval (1.0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1347
13828
f1b023fd098d always initialize info and rcon in Matrix determinant methods
John W. Eaton <jwe@octave.org>
parents: 13107
diff changeset
1348 info = 0;
f1b023fd098d always initialize info and rcon in Matrix determinant methods
John W. Eaton <jwe@octave.org>
parents: 13107
diff changeset
1349 rcon = 0.0;
f1b023fd098d always initialize info and rcon in Matrix determinant methods
John W. Eaton <jwe@octave.org>
parents: 13107
diff changeset
1350
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1351 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1352 F77_INT nc = octave::to_f77_int (cols ());
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1353
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1354 if (nr != nc)
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1355 (*current_liboctave_error_handler) ("matrix must be square");
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1356
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1357 volatile int typ = mattype.type ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1358
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1359 // Even though the matrix is marked as singular (Rectangular), we may
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1360 // still get a useful number from the LU factorization, because it always
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1361 // completes.
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1362
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1363 if (typ == MatrixType::Unknown)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1364 typ = mattype.type (*this);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1365 else if (typ == MatrixType::Rectangular)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1366 typ = MatrixType::Full;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1367
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1368 if (typ == MatrixType::Lower || typ == MatrixType::Upper)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1369 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1370 for (F77_INT i = 0; i < nc; i++)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1371 retval *= elem (i,i);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1372 }
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1373 else if (typ == MatrixType::Hermitian)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1374 {
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1375 ComplexMatrix atmp = *this;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1376 Complex *tmp_data = atmp.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1377
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1378 double anorm = 0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1379 if (calc_cond) anorm = xnorm (*this, 1);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1380
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1381 F77_INT tmp_info = 0;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1382
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1383 char job = 'L';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1384 F77_XFCN (zpotrf, ZPOTRF, (F77_CONST_CHAR_ARG2 (&job, 1), nr,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1385 F77_DBLE_CMPLX_ARG (tmp_data), nr, tmp_info
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1386 F77_CHAR_ARG_LEN (1)));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1387
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1388 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1389
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1390 if (info != 0)
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1391 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1392 rcon = 0.0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1393 mattype.mark_as_unsymmetric ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1394 typ = MatrixType::Full;
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1395 }
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1396 else
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1397 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1398 Array<Complex> z (dim_vector (2 * nc, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1399 Complex *pz = z.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1400 Array<double> rz (dim_vector (nc, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1401 double *prz = rz.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1402
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1403 F77_XFCN (zpocon, ZPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1404 nr, F77_DBLE_CMPLX_ARG (tmp_data), nr, anorm,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1405 rcon, F77_DBLE_CMPLX_ARG (pz), prz, tmp_info
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1406 F77_CHAR_ARG_LEN (1)));
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1407
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1408 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1409
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1410 if (info != 0)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1411 rcon = 0.0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1412
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1413 for (F77_INT i = 0; i < nc; i++)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1414 retval *= atmp (i,i);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1415
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1416 retval = retval.square ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1417 }
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1418 }
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1419 else if (typ != MatrixType::Full)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1420 (*current_liboctave_error_handler) ("det: invalid dense matrix type");
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1421
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1422 if (typ == MatrixType::Full)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1423 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1424 Array<F77_INT> ipvt (dim_vector (nr, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1425 F77_INT *pipvt = ipvt.fortran_vec ();
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1426
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1427 ComplexMatrix atmp = *this;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1428 Complex *tmp_data = atmp.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1429
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1430 info = 0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1431
22085
bf5fbf347aaf Avoid segfault with complex matrices using LAPACK (bug #46330).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22044
diff changeset
1432 // Calculate (always, see bug #45577) the norm of the matrix, for later use.
bf5fbf347aaf Avoid segfault with complex matrices using LAPACK (bug #46330).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22044
diff changeset
1433 double anorm = xnorm (*this, 1);
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1434
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1435 F77_INT tmp_info = 0;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1436
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1437 // Work around bug #45577, LAPACK crashes Octave if norm is NaN
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1438 if (octave::math::isnan (anorm))
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1439 info = -1;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1440 else
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1441 {
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1442 F77_XFCN (zgetrf, ZGETRF, (nr, nr, F77_DBLE_CMPLX_ARG (tmp_data), nr, pipvt,
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1443 tmp_info));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1444
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1445 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1446 }
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1447
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1448 // Throw-away extra info LAPACK gives so as to not change output.
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1449 rcon = 0.0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1450 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1451 {
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1452 info = -1;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1453 retval = ComplexDET ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1454 }
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1455 else
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1456 {
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1457 if (calc_cond)
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1458 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1459 // Now calc the condition number for non-singular matrix.
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1460 char job = '1';
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1461 Array<Complex> z (dim_vector (2 * nc, 1));
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1462 Complex *pz = z.fortran_vec ();
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1463 Array<double> rz (dim_vector (2 * nc, 1));
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1464 double *prz = rz.fortran_vec ();
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1465
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1466 F77_XFCN (zgecon, ZGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1467 nc, F77_DBLE_CMPLX_ARG (tmp_data), nr, anorm,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1468 rcon, F77_DBLE_CMPLX_ARG (pz), prz, tmp_info
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1469 F77_CHAR_ARG_LEN (1)));
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1470
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1471 info = tmp_info;
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1472 }
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1473
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1474 if (info != 0)
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1475 {
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1476 info = -1;
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1477 retval = ComplexDET ();
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1478 }
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1479 else
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1480 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1481 for (F77_INT i = 0; i < nc; i++)
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1482 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1483 Complex c = atmp(i,i);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1484 retval *= (ipvt(i) != (i+1)) ? -c : c;
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1485 }
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1486 }
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1487 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1488 }
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1489
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1490 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1491 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1492
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1493 double
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1494 ComplexMatrix::rcond (void) const
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1495 {
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1496 MatrixType mattype (*this);
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1497 return rcond (mattype);
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1498 }
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1499
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1500 double
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1501 ComplexMatrix::rcond (MatrixType &mattype) const
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1502 {
21723
bae585228161 use namespace for numeric_limits
John W. Eaton <jwe@octave.org>
parents: 21721
diff changeset
1503 double rcon = octave::numeric_limits<double>::NaN ();
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1504 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1505 F77_INT nc = octave::to_f77_int (cols ());
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1506
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1507 if (nr != nc)
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1508 (*current_liboctave_error_handler) ("matrix must be square");
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1509
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1510 if (nr == 0 || nc == 0)
21723
bae585228161 use namespace for numeric_limits
John W. Eaton <jwe@octave.org>
parents: 21721
diff changeset
1511 rcon = octave::numeric_limits<double>::Inf ();
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1512 else
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1513 {
16300
23c5f90f92cd eliminate some variable might be clobbered by 'longjmp' or 'vfork' warnings
John W. Eaton <jwe@octave.org>
parents: 15448
diff changeset
1514 volatile int typ = mattype.type ();
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1515
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1516 if (typ == MatrixType::Unknown)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1517 typ = mattype.type (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1518
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1519 // Only calculate the condition number for LU/Cholesky
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1520 if (typ == MatrixType::Upper)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1521 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1522 const Complex *tmp_data = fortran_vec ();
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1523 F77_INT info = 0;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1524 char norm = '1';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1525 char uplo = 'U';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1526 char dia = 'N';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1527
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1528 Array<Complex> z (dim_vector (2 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1529 Complex *pz = z.fortran_vec ();
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1530 Array<double> rz (dim_vector (nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1531 double *prz = rz.fortran_vec ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1532
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1533 F77_XFCN (ztrcon, ZTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1534 F77_CONST_CHAR_ARG2 (&uplo, 1),
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1535 F77_CONST_CHAR_ARG2 (&dia, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1536 nr, F77_CONST_DBLE_CMPLX_ARG (tmp_data), nr, rcon,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1537 F77_DBLE_CMPLX_ARG (pz), prz, info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1538 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1539 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1540 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1541
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1542 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1543 rcon = 0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1544 }
22777
4a31bd79d7e8 maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents: 22755
diff changeset
1545 else if (typ == MatrixType::Permuted_Upper)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1546 (*current_liboctave_error_handler)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1547 ("permuted triangular matrix not implemented");
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1548 else if (typ == MatrixType::Lower)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1549 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1550 const Complex *tmp_data = fortran_vec ();
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1551 F77_INT info = 0;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1552 char norm = '1';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1553 char uplo = 'L';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1554 char dia = 'N';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1555
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1556 Array<Complex> z (dim_vector (2 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1557 Complex *pz = z.fortran_vec ();
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1558 Array<double> rz (dim_vector (nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1559 double *prz = rz.fortran_vec ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1560
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1561 F77_XFCN (ztrcon, ZTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1562 F77_CONST_CHAR_ARG2 (&uplo, 1),
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1563 F77_CONST_CHAR_ARG2 (&dia, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1564 nr, F77_CONST_DBLE_CMPLX_ARG (tmp_data), nr, rcon,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1565 F77_DBLE_CMPLX_ARG (pz), prz, info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1566 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1567 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1568 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1569
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1570 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1571 rcon = 0.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1572 }
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1573 else if (typ == MatrixType::Permuted_Lower)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1574 (*current_liboctave_error_handler)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1575 ("permuted triangular matrix not implemented");
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1576 else if (typ == MatrixType::Full || typ == MatrixType::Hermitian)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1577 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1578 double anorm = -1.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1579
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1580 if (typ == MatrixType::Hermitian)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1581 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1582 F77_INT info = 0;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1583 char job = 'L';
15382
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
1584
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
1585 ComplexMatrix atmp = *this;
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
1586 Complex *tmp_data = atmp.fortran_vec ();
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
1587
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1588 anorm = atmp.abs().sum().
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1589 row(static_cast<octave_idx_type>(0)).max();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1590
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1591 F77_XFCN (zpotrf, ZPOTRF, (F77_CONST_CHAR_ARG2 (&job, 1), nr,
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1592 F77_DBLE_CMPLX_ARG (tmp_data), nr, info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1593 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1594
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1595 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1596 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1597 rcon = 0.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1598
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1599 mattype.mark_as_unsymmetric ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1600 typ = MatrixType::Full;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1601 }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1602 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1603 {
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1604 Array<Complex> z (dim_vector (2 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1605 Complex *pz = z.fortran_vec ();
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1606 Array<double> rz (dim_vector (nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1607 double *prz = rz.fortran_vec ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1608
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1609 F77_XFCN (zpocon, ZPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1610 nr, F77_DBLE_CMPLX_ARG (tmp_data), nr, anorm,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1611 rcon, F77_DBLE_CMPLX_ARG (pz), prz, info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1612 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1613
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1614 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1615 rcon = 0.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1616 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1617 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1618
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1619 if (typ == MatrixType::Full)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1620 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1621 F77_INT info = 0;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1622
15382
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
1623 ComplexMatrix atmp = *this;
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
1624 Complex *tmp_data = atmp.fortran_vec ();
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
1625
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1626 Array<F77_INT> ipvt (dim_vector (nr, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1627 F77_INT *pipvt = ipvt.fortran_vec ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1628
15018
3d8ace26c5b4 maint: Use Octave coding conventions for cuddled parentheses in liboctave/.
Rik <rik@octave.org>
parents: 14846
diff changeset
1629 if (anorm < 0.)
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14557
diff changeset
1630 anorm = atmp.abs ().sum ().
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1631 row(static_cast<octave_idx_type>(0)).max ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1632
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1633 Array<Complex> z (dim_vector (2 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1634 Complex *pz = z.fortran_vec ();
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1635 Array<double> rz (dim_vector (2 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1636 double *prz = rz.fortran_vec ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1637
20598
ffc6cdcd02c5 Fix segfault when complex double matrix calls ZGETRF (bug #45577).
Rik <rik@octave.org>
parents: 19864
diff changeset
1638 // Work around bug #45577, LAPACK crashes Octave if norm is NaN
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1639 if (octave::math::isnan (anorm))
20598
ffc6cdcd02c5 Fix segfault when complex double matrix calls ZGETRF (bug #45577).
Rik <rik@octave.org>
parents: 19864
diff changeset
1640 info = -1;
ffc6cdcd02c5 Fix segfault when complex double matrix calls ZGETRF (bug #45577).
Rik <rik@octave.org>
parents: 19864
diff changeset
1641 else
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1642 F77_XFCN (zgetrf, ZGETRF, (nr, nr, F77_DBLE_CMPLX_ARG (tmp_data), nr, pipvt,
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1643 info));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1644
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1645 if (info != 0)
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1646 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1647 rcon = 0.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1648 mattype.mark_as_rectangular ();
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1649 }
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1650 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1651 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1652 char job = '1';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1653 F77_XFCN (zgecon, ZGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1654 nc, F77_DBLE_CMPLX_ARG (tmp_data), nr, anorm,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1655 rcon, F77_DBLE_CMPLX_ARG (pz), prz, info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1656 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1657
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1658 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1659 rcon = 0.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1660 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1661 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1662 }
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1663 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1664 rcon = 0.0;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1665 }
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1666
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1667 return rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1668 }
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1669
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1670 ComplexMatrix
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1671 ComplexMatrix::utsolve (MatrixType &mattype, const ComplexMatrix& b,
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1672 octave_idx_type& info, double& rcon,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1673 solve_singularity_handler sing_handler,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1674 bool calc_cond, blas_trans_type transt) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1675 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1676 ComplexMatrix retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1677
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1678 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1679 F77_INT nc = octave::to_f77_int (cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1680
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1681 F77_INT b_nr = octave::to_f77_int (b.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1682 F77_INT b_nc = octave::to_f77_int (b.cols ());
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1683
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1684 if (nr != b_nr)
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1685 (*current_liboctave_error_handler)
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1686 ("matrix dimension mismatch solution of linear equations");
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1687
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1688 if (nr == 0 || nc == 0 || b_nc == 0)
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1689 retval = ComplexMatrix (nc, b_nc, Complex (0.0, 0.0));
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1690 else
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1691 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1692 volatile int typ = mattype.type ();
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1693
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1694 if (typ != MatrixType::Permuted_Upper && typ != MatrixType::Upper)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1695 (*current_liboctave_error_handler) ("incorrect matrix type");
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1696
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1697 rcon = 1.;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1698 info = 0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1699
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1700 if (typ == MatrixType::Permuted_Upper)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1701 (*current_liboctave_error_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1702 ("permuted triangular matrix not implemented");
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1703
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1704 const Complex *tmp_data = fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1705
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1706 retval = b;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1707 Complex *result = retval.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1708
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1709 char uplo = 'U';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1710 char trans = get_blas_char (transt);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1711 char dia = 'N';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1712
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1713 F77_INT tmp_info = 0;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1714
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1715 F77_XFCN (ztrtrs, ZTRTRS, (F77_CONST_CHAR_ARG2 (&uplo, 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1716 F77_CONST_CHAR_ARG2 (&trans, 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1717 F77_CONST_CHAR_ARG2 (&dia, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1718 nr, b_nc, F77_CONST_DBLE_CMPLX_ARG (tmp_data), nr,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1719 F77_DBLE_CMPLX_ARG (result), nr, tmp_info
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1720 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1721 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1722 F77_CHAR_ARG_LEN (1)));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1723
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1724 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1725
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1726 if (calc_cond)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1727 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1728 char norm = '1';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1729 uplo = 'U';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1730 dia = 'N';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1731
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1732 Array<Complex> z (dim_vector (2 * nc, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1733 Complex *pz = z.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1734 Array<double> rz (dim_vector (nc, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1735 double *prz = rz.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1736
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1737 F77_XFCN (ztrcon, ZTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1738 F77_CONST_CHAR_ARG2 (&uplo, 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1739 F77_CONST_CHAR_ARG2 (&dia, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1740 nr, F77_CONST_DBLE_CMPLX_ARG (tmp_data), nr, rcon,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1741 F77_DBLE_CMPLX_ARG (pz), prz, tmp_info
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1742 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1743 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1744 F77_CHAR_ARG_LEN (1)));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1745
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1746 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1747
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1748 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1749 info = -2;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1750
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1751 volatile double rcond_plus_one = rcon + 1.0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1752
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1753 if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1754 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1755 info = -2;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1756
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1757 if (sing_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1758 sing_handler (rcon);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1759 else
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
1760 octave::warn_singular_matrix (rcon);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1761 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1762 }
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1763 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1764
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1765 return retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1766 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1767
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1768 ComplexMatrix
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1769 ComplexMatrix::ltsolve (MatrixType &mattype, const ComplexMatrix& b,
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1770 octave_idx_type& info, double& rcon,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1771 solve_singularity_handler sing_handler,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1772 bool calc_cond, blas_trans_type transt) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1773 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1774 ComplexMatrix retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1775
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1776 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1777 F77_INT nc = octave::to_f77_int (cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1778
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1779 F77_INT b_nr = octave::to_f77_int (b.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1780 F77_INT b_nc = octave::to_f77_int (b.cols ());
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1781
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1782 if (nr != b_nr)
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1783 (*current_liboctave_error_handler)
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1784 ("matrix dimension mismatch solution of linear equations");
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1785
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1786 if (nr == 0 || nc == 0 || b_nc == 0)
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1787 retval = ComplexMatrix (nc, b_nc, Complex (0.0, 0.0));
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1788 else
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1789 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1790 volatile int typ = mattype.type ();
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1791
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1792 if (typ != MatrixType::Permuted_Lower && typ != MatrixType::Lower)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1793 (*current_liboctave_error_handler) ("incorrect matrix type");
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1794
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1795 rcon = 1.;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1796 info = 0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1797
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1798 if (typ == MatrixType::Permuted_Lower)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1799 (*current_liboctave_error_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1800 ("permuted triangular matrix not implemented");
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1801
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1802 const Complex *tmp_data = fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1803
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1804 retval = b;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1805 Complex *result = retval.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1806
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1807 char uplo = 'L';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1808 char trans = get_blas_char (transt);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1809 char dia = 'N';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1810
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1811 F77_INT tmp_info = 0;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1812
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1813 F77_XFCN (ztrtrs, ZTRTRS, (F77_CONST_CHAR_ARG2 (&uplo, 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1814 F77_CONST_CHAR_ARG2 (&trans, 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1815 F77_CONST_CHAR_ARG2 (&dia, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1816 nr, b_nc, F77_CONST_DBLE_CMPLX_ARG (tmp_data), nr,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1817 F77_DBLE_CMPLX_ARG (result), nr, tmp_info
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1818 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1819 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1820 F77_CHAR_ARG_LEN (1)));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1821
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1822 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1823
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1824 if (calc_cond)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1825 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1826 char norm = '1';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1827 uplo = 'L';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1828 dia = 'N';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1829
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1830 Array<Complex> z (dim_vector (2 * nc, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1831 Complex *pz = z.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1832 Array<double> rz (dim_vector (nc, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1833 double *prz = rz.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1834
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1835 F77_XFCN (ztrcon, ZTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1836 F77_CONST_CHAR_ARG2 (&uplo, 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1837 F77_CONST_CHAR_ARG2 (&dia, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1838 nr, F77_CONST_DBLE_CMPLX_ARG (tmp_data), nr, rcon,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1839 F77_DBLE_CMPLX_ARG (pz), prz, tmp_info
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1840 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1841 F77_CHAR_ARG_LEN (1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1842 F77_CHAR_ARG_LEN (1)));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1843
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1844 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1845
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1846 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1847 info = -2;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1848
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1849 volatile double rcond_plus_one = rcon + 1.0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1850
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1851 if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1852 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1853 info = -2;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1854
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1855 if (sing_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1856 sing_handler (rcon);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1857 else
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
1858 octave::warn_singular_matrix (rcon);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1859 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1860 }
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1861 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1862
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1863 return retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1864 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1865
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1866 ComplexMatrix
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1867 ComplexMatrix::fsolve (MatrixType &mattype, const ComplexMatrix& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1868 octave_idx_type& info, double& rcon,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1869 solve_singularity_handler sing_handler,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1870 bool calc_cond) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1871 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1872 ComplexMatrix retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1873
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1874 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1875 F77_INT nc = octave::to_f77_int (cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1876
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1877 F77_INT b_nr = octave::to_f77_int (b.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
1878 F77_INT b_nc = octave::to_f77_int (b.cols ());
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1879
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1880 if (nr != nc || nr != b_nr)
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1881 (*current_liboctave_error_handler)
6924
be176b7e110a [project @ 2007-09-25 19:08:19 by dbateman]
dbateman
parents: 6867
diff changeset
1882 ("matrix dimension mismatch solution of linear equations");
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1883
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1884 if (nr == 0 || b_nc == 0)
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1885 retval = ComplexMatrix (nc, b_nc, Complex (0.0, 0.0));
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1886 else
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1887 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1888 volatile int typ = mattype.type ();
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1889
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1890 // Calculate the norm of the matrix, for later use.
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1891 double anorm = -1.;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1892
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1893 if (typ == MatrixType::Hermitian)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1894 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1895 info = 0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1896 char job = 'L';
15382
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
1897
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1898 ComplexMatrix atmp = *this;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1899 Complex *tmp_data = atmp.fortran_vec ();
15382
197774b411ec rcond: use new copy of data for full factorization if positive definite cholesky factorization fails (bug #37336)
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
1900
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1901 anorm = atmp.abs().sum().row(static_cast<octave_idx_type>(0)).max();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1902
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1903 F77_INT tmp_info = 0;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1904
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1905 F77_XFCN (zpotrf, ZPOTRF, (F77_CONST_CHAR_ARG2 (&job, 1), nr,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1906 F77_DBLE_CMPLX_ARG (tmp_data), nr, tmp_info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1907 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1908
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1909 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1910
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1911 // Throw-away extra info LAPACK gives so as to not change output.
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1912 rcon = 0.0;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1913 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1914 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1915 info = -2;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1916
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1917 mattype.mark_as_unsymmetric ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1918 typ = MatrixType::Full;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1919 }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1920 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1921 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1922 if (calc_cond)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1923 {
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1924 Array<Complex> z (dim_vector (2 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1925 Complex *pz = z.fortran_vec ();
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1926 Array<double> rz (dim_vector (nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1927 double *prz = rz.fortran_vec ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1928
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1929 F77_XFCN (zpocon, ZPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1930 nr, F77_DBLE_CMPLX_ARG (tmp_data), nr, anorm,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1931 rcon, F77_DBLE_CMPLX_ARG (pz), prz, tmp_info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1932 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1933
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1934 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1935
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1936 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1937 info = -2;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1938
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1939 volatile double rcond_plus_one = rcon + 1.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1940
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1941 if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1942 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1943 info = -2;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1944
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1945 if (sing_handler)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1946 sing_handler (rcon);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1947 else
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
1948 octave::warn_singular_matrix (rcon);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1949 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1950 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1951
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1952 if (info == 0)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1953 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1954 retval = b;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1955 Complex *result = retval.fortran_vec ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1956
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1957 F77_XFCN (zpotrs, ZPOTRS, (F77_CONST_CHAR_ARG2 (&job, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
1958 nr, b_nc, F77_DBLE_CMPLX_ARG (tmp_data), nr,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1959 F77_DBLE_CMPLX_ARG (result), b_nr, tmp_info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1960 F77_CHAR_ARG_LEN (1)));
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1961
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1962 info = tmp_info;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1963 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1964 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1965 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1966 mattype.mark_as_unsymmetric ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1967 typ = MatrixType::Full;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1968 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1969 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1970 }
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1971
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1972 if (typ == MatrixType::Full)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1973 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1974 info = 0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1975
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1976 Array<F77_INT> ipvt (dim_vector (nr, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1977 F77_INT *pipvt = ipvt.fortran_vec ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1978
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1979 ComplexMatrix atmp = *this;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1980 Complex *tmp_data = atmp.fortran_vec ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1981
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1982 Array<Complex> z (dim_vector (2 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1983 Complex *pz = z.fortran_vec ();
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1984 Array<double> rz (dim_vector (2 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1985 double *prz = rz.fortran_vec ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1986
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1987 // Calculate the norm of the matrix, for later use.
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1988 if (anorm < 0.)
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1989 anorm = atmp.abs ().sum ().row (static_cast<octave_idx_type>(0))
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1990 .max ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1991
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1992 F77_INT tmp_info = 0;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1993
20598
ffc6cdcd02c5 Fix segfault when complex double matrix calls ZGETRF (bug #45577).
Rik <rik@octave.org>
parents: 19864
diff changeset
1994 // Work around bug #45577, LAPACK crashes Octave if norm is NaN
22044
571b42508e1e Avoid segfault with matrices containing Inf & NaN (bug #46330).
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22022
diff changeset
1995 // and bug #46330, segfault with matrices containing Inf & NaN
571b42508e1e Avoid segfault with matrices containing Inf & NaN (bug #46330).
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22022
diff changeset
1996 if (octave::math::isnan (anorm) || octave::math::isinf (anorm))
20598
ffc6cdcd02c5 Fix segfault when complex double matrix calls ZGETRF (bug #45577).
Rik <rik@octave.org>
parents: 19864
diff changeset
1997 info = -2;
ffc6cdcd02c5 Fix segfault when complex double matrix calls ZGETRF (bug #45577).
Rik <rik@octave.org>
parents: 19864
diff changeset
1998 else
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1999 {
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2000 F77_XFCN (zgetrf, ZGETRF, (nr, nr, F77_DBLE_CMPLX_ARG (tmp_data), nr, pipvt,
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2001 tmp_info));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2002
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2003 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2004 }
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2005
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2006 // Throw-away extra info LAPACK gives so as to not change output.
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2007 rcon = 0.0;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2008 if (info != 0)
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2009 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2010 info = -2;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2011
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2012 if (sing_handler)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2013 sing_handler (rcon);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2014 else
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
2015 octave::warn_singular_matrix ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2016
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2017 mattype.mark_as_rectangular ();
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2018 }
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2019 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2020 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2021 if (calc_cond)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2022 {
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2023 // Now calculate the condition number for
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2024 // non-singular matrix.
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2025 char job = '1';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2026 F77_XFCN (zgecon, ZGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
2027 nc, F77_DBLE_CMPLX_ARG (tmp_data), nr, anorm,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2028 rcon, F77_DBLE_CMPLX_ARG (pz), prz, tmp_info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2029 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2030
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2031 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2032
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2033 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2034 info = -2;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2035
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2036 volatile double rcond_plus_one = rcon + 1.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2037
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
2038 if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2039 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2040 info = -2;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2041
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2042 if (sing_handler)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2043 sing_handler (rcon);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2044 else
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
2045 octave::warn_singular_matrix (rcon);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2046 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2047 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2048
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2049 if (info == 0)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2050 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2051 retval = b;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2052 Complex *result = retval.fortran_vec ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2053
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2054 char job = 'N';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2055 F77_XFCN (zgetrs, ZGETRS, (F77_CONST_CHAR_ARG2 (&job, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
2056 nr, b_nc, F77_DBLE_CMPLX_ARG (tmp_data), nr,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2057 pipvt, F77_DBLE_CMPLX_ARG (result), b_nr, tmp_info
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2058 F77_CHAR_ARG_LEN (1)));
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2059
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2060 info = tmp_info;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2061 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2062 else
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2063 mattype.mark_as_rectangular ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2064 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2065 }
22085
bf5fbf347aaf Avoid segfault with complex matrices using LAPACK (bug #46330).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22044
diff changeset
2066
22044
571b42508e1e Avoid segfault with matrices containing Inf & NaN (bug #46330).
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22022
diff changeset
2067 if (octave::math::isinf (anorm))
571b42508e1e Avoid segfault with matrices containing Inf & NaN (bug #46330).
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22022
diff changeset
2068 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2069 retval = ComplexMatrix (b_nr, b_nc, Complex (0, 0));
22044
571b42508e1e Avoid segfault with matrices containing Inf & NaN (bug #46330).
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22022
diff changeset
2070 mattype.mark_as_full ();
571b42508e1e Avoid segfault with matrices containing Inf & NaN (bug #46330).
Lachlan Andrew <lachlanbis@gmail.com>
parents: 22022
diff changeset
2071 }
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2072 }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2073
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2074 return retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2075 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2076
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2077 ComplexMatrix
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2078 ComplexMatrix::solve (MatrixType &typ, const Matrix& b) const
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2079 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2080 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2081 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2082 return solve (typ, b, info, rcon, 0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2083 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2084
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2085 ComplexMatrix
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2086 ComplexMatrix::solve (MatrixType &typ, const Matrix& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2087 octave_idx_type& info) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2088 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2089 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2090 return solve (typ, b, info, rcon, 0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2091 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2092
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2093 ComplexMatrix
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2094 ComplexMatrix::solve (MatrixType &typ, const Matrix& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2095 double& rcon) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2096 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2097 return solve (typ, b, info, rcon, 0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2098 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2099
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2100 ComplexMatrix
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2101 ComplexMatrix::solve (MatrixType &typ, const Matrix& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2102 double& rcon, solve_singularity_handler sing_handler,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2103 bool singular_fallback, blas_trans_type transt) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2104 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2105 ComplexMatrix tmp (b);
9661
afcf852256d2 optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 9658
diff changeset
2106 return solve (typ, tmp, info, rcon, sing_handler, singular_fallback, transt);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2107 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2108
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2109 ComplexMatrix
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2110 ComplexMatrix::solve (MatrixType &typ, const ComplexMatrix& b) const
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2111 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2112 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2113 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2114 return solve (typ, b, info, rcon, 0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2115 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2116
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2117 ComplexMatrix
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2118 ComplexMatrix::solve (MatrixType &typ, const ComplexMatrix& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2119 octave_idx_type& info) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2120 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2121 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2122 return solve (typ, b, info, rcon, 0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2123 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2124
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2125 ComplexMatrix
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2126 ComplexMatrix::solve (MatrixType &typ, const ComplexMatrix& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2127 octave_idx_type& info, double& rcon) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2128 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2129 return solve (typ, b, info, rcon, 0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2130 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2131
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2132 ComplexMatrix
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2133 ComplexMatrix::solve (MatrixType &mattype, const ComplexMatrix& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2134 octave_idx_type& info, double& rcon,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2135 solve_singularity_handler sing_handler,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2136 bool singular_fallback, blas_trans_type transt) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2137 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2138 ComplexMatrix retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2139 int typ = mattype.type ();
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2140
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2141 if (typ == MatrixType::Unknown)
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2142 typ = mattype.type (*this);
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2143
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2144 // Only calculate the condition number for LU/Cholesky
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2145 if (typ == MatrixType::Upper || typ == MatrixType::Permuted_Upper)
19434
aee5fea8a03e compute condition number when solving triangular systems (bug #43875)
John W. Eaton <jwe@octave.org>
parents: 19408
diff changeset
2146 retval = utsolve (mattype, b, info, rcon, sing_handler, true, transt);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2147 else if (typ == MatrixType::Lower || typ == MatrixType::Permuted_Lower)
19434
aee5fea8a03e compute condition number when solving triangular systems (bug #43875)
John W. Eaton <jwe@octave.org>
parents: 19408
diff changeset
2148 retval = ltsolve (mattype, b, info, rcon, sing_handler, true, transt);
9661
afcf852256d2 optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 9658
diff changeset
2149 else if (transt == blas_trans)
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2150 return transpose ().solve (mattype, b, info, rcon, sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2151 singular_fallback);
9661
afcf852256d2 optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 9658
diff changeset
2152 else if (transt == blas_conj_trans)
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2153 retval = hermitian ().solve (mattype, b, info, rcon, sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2154 singular_fallback);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2155 else if (typ == MatrixType::Full || typ == MatrixType::Hermitian)
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2156 retval = fsolve (mattype, b, info, rcon, sing_handler, true);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2157 else if (typ != MatrixType::Rectangular)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
2158 (*current_liboctave_error_handler) ("unknown matrix type");
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2159
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2160 // Rectangular or one of the above solvers flags a singular matrix
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2161 if (singular_fallback && mattype.type () == MatrixType::Rectangular)
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2162 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2163 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2164 retval = lssolve (b, info, rank, rcon);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2165 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2166
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2167 return retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2168 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2169
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2170 ComplexColumnVector
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2171 ComplexMatrix::solve (MatrixType &typ, const ColumnVector& b) const
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2172 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2173 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2174 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2175 return solve (typ, ComplexColumnVector (b), info, rcon, 0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2176 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2177
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2178 ComplexColumnVector
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2179 ComplexMatrix::solve (MatrixType &typ, const ColumnVector& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2180 octave_idx_type& info) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2181 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2182 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2183 return solve (typ, ComplexColumnVector (b), info, rcon, 0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2184 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2185
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2186 ComplexColumnVector
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2187 ComplexMatrix::solve (MatrixType &typ, const ColumnVector& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2188 octave_idx_type& info, double& rcon) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2189 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2190 return solve (typ, ComplexColumnVector (b), info, rcon, 0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2191 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2192
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2193 ComplexColumnVector
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2194 ComplexMatrix::solve (MatrixType &typ, const ColumnVector& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2195 octave_idx_type& info, double& rcon,
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2196 solve_singularity_handler sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2197 blas_trans_type transt) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2198 {
9661
afcf852256d2 optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 9658
diff changeset
2199 return solve (typ, ComplexColumnVector (b), info, rcon, sing_handler, transt);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2200 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2201
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2202 ComplexColumnVector
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2203 ComplexMatrix::solve (MatrixType &typ, const ComplexColumnVector& b) const
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2204 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2205 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2206 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2207 return solve (typ, b, info, rcon, 0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2208 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2209
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2210 ComplexColumnVector
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2211 ComplexMatrix::solve (MatrixType &typ, const ComplexColumnVector& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2212 octave_idx_type& info) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2213 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2214 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2215 return solve (typ, b, info, rcon, 0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2216 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2217
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2218 ComplexColumnVector
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2219 ComplexMatrix::solve (MatrixType &typ, const ComplexColumnVector& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2220 octave_idx_type& info, double& rcon) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2221 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2222 return solve (typ, b, info, rcon, 0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2223 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2224
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2225 ComplexColumnVector
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2226 ComplexMatrix::solve (MatrixType &typ, const ComplexColumnVector& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2227 octave_idx_type& info, double& rcon,
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2228 solve_singularity_handler sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2229 blas_trans_type transt) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2230 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2231
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2232 ComplexMatrix tmp (b);
10352
a3635bc1ea19 remove Array2
Jaroslav Hajek <highegg@gmail.com>
parents: 10350
diff changeset
2233 tmp = solve (typ, tmp, info, rcon, sing_handler, true, transt);
15018
3d8ace26c5b4 maint: Use Octave coding conventions for cuddled parentheses in liboctave/.
Rik <rik@octave.org>
parents: 14846
diff changeset
2234 return tmp.column (static_cast<octave_idx_type> (0));
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2235 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2236
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2237 ComplexMatrix
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2238 ComplexMatrix::solve (const Matrix& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2239 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2240 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2241 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2242 return solve (b, info, rcon, 0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2243 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2244
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2245 ComplexMatrix
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2246 ComplexMatrix::solve (const Matrix& b, octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2247 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2248 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2249 return solve (b, info, rcon, 0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2250 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2251
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2252 ComplexMatrix
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2253 ComplexMatrix::solve (const Matrix& b, octave_idx_type& info,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2254 double& rcon) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2255 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2256 return solve (b, info, rcon, 0);
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2257 }
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2258
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2259 ComplexMatrix
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2260 ComplexMatrix::solve (const Matrix& b, octave_idx_type& info, double& rcon,
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2261 solve_singularity_handler sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2262 blas_trans_type transt) const
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2263 {
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2264 ComplexMatrix tmp (b);
9661
afcf852256d2 optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 9658
diff changeset
2265 return solve (tmp, info, rcon, sing_handler, transt);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2266 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2267
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2268 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2269 ComplexMatrix::solve (const ComplexMatrix& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2270 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2271 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2272 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2273 return solve (b, info, rcon, 0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2274 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2275
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2276 ComplexMatrix
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2277 ComplexMatrix::solve (const ComplexMatrix& b, octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2278 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2279 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2280 return solve (b, info, rcon, 0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2281 }
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2282
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2283 ComplexMatrix
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2284 ComplexMatrix::solve (const ComplexMatrix& b, octave_idx_type& info,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2285 double& rcon) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2286 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2287 return solve (b, info, rcon, 0);
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2288 }
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2289
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2290 ComplexMatrix
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2291 ComplexMatrix::solve (const ComplexMatrix& b, octave_idx_type& info,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2292 double& rcon,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2293 solve_singularity_handler sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2294 blas_trans_type transt) const
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2295 {
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2296 MatrixType mattype (*this);
9661
afcf852256d2 optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 9658
diff changeset
2297 return solve (mattype, b, info, rcon, sing_handler, true, transt);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2298 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2299
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2300 ComplexColumnVector
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2301 ComplexMatrix::solve (const ColumnVector& b) const
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2302 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2303 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2304 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2305 return solve (ComplexColumnVector (b), info, rcon, 0);
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2306 }
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2307
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2308 ComplexColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2309 ComplexMatrix::solve (const ColumnVector& b, octave_idx_type& info) const
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2310 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2311 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2312 return solve (ComplexColumnVector (b), info, rcon, 0);
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2313 }
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2314
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2315 ComplexColumnVector
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2316 ComplexMatrix::solve (const ColumnVector& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2317 double& rcon) const
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2318 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2319 return solve (ComplexColumnVector (b), info, rcon, 0);
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2320 }
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2321
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2322 ComplexColumnVector
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2323 ComplexMatrix::solve (const ColumnVector& b, octave_idx_type& info,
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2324 double& rcon,
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2325 solve_singularity_handler sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2326 blas_trans_type transt) const
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2327 {
9661
afcf852256d2 optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 9658
diff changeset
2328 return solve (ComplexColumnVector (b), info, rcon, sing_handler, transt);
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2329 }
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2330
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2331 ComplexColumnVector
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2332 ComplexMatrix::solve (const ComplexColumnVector& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2333 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2334 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2335 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2336 return solve (b, info, rcon, 0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2337 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2338
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2339 ComplexColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2340 ComplexMatrix::solve (const ComplexColumnVector& b, octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2341 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2342 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2343 return solve (b, info, rcon, 0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2344 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2345
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2346 ComplexColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2347 ComplexMatrix::solve (const ComplexColumnVector& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2348 double& rcon) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2349 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2350 return solve (b, info, rcon, 0);
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2351 }
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2352
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2353 ComplexColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2354 ComplexMatrix::solve (const ComplexColumnVector& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2355 double& rcon,
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2356 solve_singularity_handler sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2357 blas_trans_type transt) const
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2358 {
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2359 MatrixType mattype (*this);
9661
afcf852256d2 optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 9658
diff changeset
2360 return solve (mattype, b, info, rcon, sing_handler, transt);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2361 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2362
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2363 ComplexMatrix
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2364 ComplexMatrix::lssolve (const Matrix& b) const
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2365 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2366 octave_idx_type info;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2367 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2368 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2369 return lssolve (ComplexMatrix (b), info, rank, rcon);
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2370 }
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2371
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2372 ComplexMatrix
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2373 ComplexMatrix::lssolve (const Matrix& b, octave_idx_type& info) const
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2374 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2375 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2376 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2377 return lssolve (ComplexMatrix (b), info, rank, rcon);
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2378 }
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2379
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2380 ComplexMatrix
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2381 ComplexMatrix::lssolve (const Matrix& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2382 octave_idx_type& rank) const
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2383 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2384 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2385 return lssolve (ComplexMatrix (b), info, rank, rcon);
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2386 }
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2387
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2388 ComplexMatrix
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2389 ComplexMatrix::lssolve (const Matrix& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2390 octave_idx_type& rank, double& rcon) const
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2391 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2392 return lssolve (ComplexMatrix (b), info, rank, rcon);
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2393 }
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2394
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2395 ComplexMatrix
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2396 ComplexMatrix::lssolve (const ComplexMatrix& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2397 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2398 octave_idx_type info;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2399 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2400 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2401 return lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2402 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2403
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2404 ComplexMatrix
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2405 ComplexMatrix::lssolve (const ComplexMatrix& b, octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2406 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2407 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2408 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2409 return lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2410 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2411
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2412 ComplexMatrix
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2413 ComplexMatrix::lssolve (const ComplexMatrix& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2414 octave_idx_type& rank) const
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2415 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2416 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2417 return lssolve (b, info, rank, rcon);
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2418 }
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2419
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2420 ComplexMatrix
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2421 ComplexMatrix::lssolve (const ComplexMatrix& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2422 octave_idx_type& rank, double& rcon) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2423 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2424 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2425
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
2426 F77_INT nrhs = octave::to_f77_int (b.cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
2427
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
2428 F77_INT m = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
2429 F77_INT n = octave::to_f77_int (cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
2430
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
2431 F77_INT b_nr = octave::to_f77_int (b.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
2432 F77_INT b_nc = octave::to_f77_int (b.cols ());
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2433
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2434 if (m != b_nr)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2435 (*current_liboctave_error_handler)
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2436 ("matrix dimension mismatch solution of linear equations");
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
2437
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2438 if (m == 0 || n == 0 || b_nc == 0)
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2439 retval = ComplexMatrix (n, b_nc, Complex (0.0, 0.0));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2440 else
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2441 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2442 volatile F77_INT minmn = (m < n ? m : n);
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2443 F77_INT maxmn = m > n ? m : n;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2444 rcon = -1.0;
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2445
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2446 if (m != n)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2447 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2448 retval = ComplexMatrix (maxmn, nrhs);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2449
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2450 for (F77_INT j = 0; j < nrhs; j++)
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2451 for (F77_INT i = 0; i < m; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2452 retval.elem (i, j) = b.elem (i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2453 }
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2454 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2455 retval = b;
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2456
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2457 ComplexMatrix atmp = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2458 Complex *tmp_data = atmp.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2459
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2460 Complex *pretval = retval.fortran_vec ();
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
2461 Array<double> s (dim_vector (minmn, 1));
7071
c3b479e753dd [project @ 2007-10-26 15:14:34 by jwe]
jwe
parents: 7033
diff changeset
2462 double *ps = s.fortran_vec ();
2563
8b0911d576bf [project @ 1996-12-05 19:06:58 by jwe]
jwe
parents: 2443
diff changeset
2463
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2464 // Ask ZGELSD what the dimension of WORK should be.
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2465 F77_INT lwork = -1;
3752
719a44ff67c9 [project @ 2000-12-13 19:02:42 by jwe]
jwe
parents: 3726
diff changeset
2466
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
2467 Array<Complex> work (dim_vector (1, 1));
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2468
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2469 F77_INT smlsiz;
7477
8b22207ef9ca ilaenv --> xilaenv
John W. Eaton <jwe@octave.org>
parents: 7476
diff changeset
2470 F77_FUNC (xilaenv, XILAENV) (9, F77_CONST_CHAR_ARG2 ("ZGELSD", 6),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2471 F77_CONST_CHAR_ARG2 (" ", 1),
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2472 0, 0, 0, 0, smlsiz
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2473 F77_CHAR_ARG_LEN (6)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2474 F77_CHAR_ARG_LEN (1));
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2475
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2476 F77_INT mnthr;
7486
6a6d2abe51ff more xGELSD workspace fixes
John W. Eaton <jwe@octave.org>
parents: 7482
diff changeset
2477 F77_FUNC (xilaenv, XILAENV) (6, F77_CONST_CHAR_ARG2 ("ZGELSD", 6),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2478 F77_CONST_CHAR_ARG2 (" ", 1),
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2479 m, n, nrhs, -1, mnthr
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2480 F77_CHAR_ARG_LEN (6)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2481 F77_CHAR_ARG_LEN (1));
7486
6a6d2abe51ff more xGELSD workspace fixes
John W. Eaton <jwe@octave.org>
parents: 7482
diff changeset
2482
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2483 // We compute the size of rwork and iwork because ZGELSD in
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2484 // older versions of LAPACK does not return them on a query
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2485 // call.
7124
d07cb867891b [project @ 2007-11-08 01:09:44 by jwe]
jwe
parents: 7079
diff changeset
2486 double dminmn = static_cast<double> (minmn);
d07cb867891b [project @ 2007-11-08 01:09:44 by jwe]
jwe
parents: 7079
diff changeset
2487 double dsmlsizp1 = static_cast<double> (smlsiz+1);
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
2488 double tmp = octave::math::log2 (dminmn / dsmlsizp1);
22598
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2489 double anorm = 0.0;
18847
ff4da3c8ed16 use gnulib log2 modules (bug #42583)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
2490
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2491 F77_INT nlvl = static_cast<F77_INT> (tmp) + 1;
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2492 if (nlvl < 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2493 nlvl = 0;
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2494
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2495 F77_INT lrwork = minmn*(10 + 2*smlsiz + 8*nlvl)
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2496 + 3*smlsiz*nrhs
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2497 + std::max ((smlsiz+1)*(smlsiz+1),
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2498 n*(1+nrhs) + 2*nrhs);
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2499 if (lrwork < 1)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2500 lrwork = 1;
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
2501 Array<double> rwork (dim_vector (lrwork, 1));
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2502 double *prwork = rwork.fortran_vec ();
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2503
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2504 F77_INT liwork = 3 * minmn * nlvl + 11 * minmn;
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2505 if (liwork < 1)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2506 liwork = 1;
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2507 Array<F77_INT> iwork (dim_vector (liwork, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2508 F77_INT* piwork = iwork.fortran_vec ();
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2509
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2510 F77_INT tmp_info = 0;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2511 F77_INT tmp_rank = 0;
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2512
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
2513 F77_XFCN (zgelsd, ZGELSD, (m, n, nrhs, F77_DBLE_CMPLX_ARG (tmp_data), m,
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
2514 F77_DBLE_CMPLX_ARG (pretval), maxmn,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2515 ps, rcon, tmp_rank, F77_DBLE_CMPLX_ARG (work.fortran_vec ()),
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2516 lwork, prwork, piwork, tmp_info));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2517
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2518 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2519 rank = tmp_rank;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2520
7476
e9f10b4c05cf fix workspace size calculation for xGELSD
Jason Riedy
parents: 7416
diff changeset
2521 // The workspace query is broken in at least LAPACK 3.0.0
7488
6470f946a425 another small xGELSD workspace fix
John W. Eaton <jwe@octave.org>
parents: 7486
diff changeset
2522 // through 3.1.1 when n >= mnthr. The obtuse formula below
7486
6a6d2abe51ff more xGELSD workspace fixes
John W. Eaton <jwe@octave.org>
parents: 7482
diff changeset
2523 // should provide sufficient workspace for ZGELSD to operate
7476
e9f10b4c05cf fix workspace size calculation for xGELSD
Jason Riedy
parents: 7416
diff changeset
2524 // efficiently.
10813
2c2d4a2f1047 fix workspace bug workaround for xGELSD (since 7486:6a6d2abe51ff)
Jaroslav Hajek <highegg@gmail.com>
parents: 10806
diff changeset
2525 if (n > m && n >= mnthr)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2526 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2527 F77_INT addend = m;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2528
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2529 if (2*m-4 > addend)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2530 addend = 2*m-4;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2531
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2532 if (nrhs > addend)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2533 addend = nrhs;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2534
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2535 if (n-3*m > addend)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2536 addend = n-3*m;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2537
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2538 const F77_INT lworkaround = 4*m + m*m + addend;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2539
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
2540 if (octave::math::real (work(0)) < lworkaround)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2541 work(0) = lworkaround;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2542 }
7532
493bb0de3199 avoid another xGELSD workspace query bug
John W. Eaton <jwe@octave.org>
parents: 7503
diff changeset
2543 else if (m >= n)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2544 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2545 F77_INT lworkaround = 2*m + m*nrhs;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2546
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
2547 if (octave::math::real (work(0)) < lworkaround)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2548 work(0) = lworkaround;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2549 }
7476
e9f10b4c05cf fix workspace size calculation for xGELSD
Jason Riedy
parents: 7416
diff changeset
2550
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2551 lwork = static_cast<F77_INT> (octave::math::real (work(0)));
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
2552 work.resize (dim_vector (lwork, 1));
7482
29980c6b8604 don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents: 7478
diff changeset
2553
22598
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2554 anorm = xnorm (*this, 1);
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2555
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2556 if (octave::math::isinf (anorm) || octave::math::isnan (anorm))
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2557 {
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2558 rcon = 0.0;
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2559 octave::warn_singular_matrix ();
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2560 retval = Matrix (n, m, 0.0);
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2561 }
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2562 else
22598
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2563 {
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2564 F77_XFCN (zgelsd, ZGELSD, (m, n, nrhs, F77_DBLE_CMPLX_ARG (tmp_data),
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2565 m, F77_DBLE_CMPLX_ARG (pretval),
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2566 maxmn, ps, rcon, tmp_rank,
22598
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2567 F77_DBLE_CMPLX_ARG (work.fortran_vec ()),
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2568 lwork, prwork, piwork, tmp_info));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2569
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2570 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2571 rank = tmp_rank;
22598
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2572
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2573 if (s.elem (0) == 0.0)
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2574 rcon = 0.0;
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2575 else
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2576 rcon = s.elem (minmn - 1) / s.elem (0);
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2577
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2578 retval.resize (n, nrhs);
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2579 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2580 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2581
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2582 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2583 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2584
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2585 ComplexColumnVector
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2586 ComplexMatrix::lssolve (const ColumnVector& b) const
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2587 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2588 octave_idx_type info;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2589 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2590 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2591 return lssolve (ComplexColumnVector (b), info, rank, rcon);
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2592 }
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2593
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2594 ComplexColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2595 ComplexMatrix::lssolve (const ColumnVector& b, octave_idx_type& info) const
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2596 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2597 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2598 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2599 return lssolve (ComplexColumnVector (b), info, rank, rcon);
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2600 }
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2601
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2602 ComplexColumnVector
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2603 ComplexMatrix::lssolve (const ColumnVector& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2604 octave_idx_type& rank) const
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2605 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2606 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2607 return lssolve (ComplexColumnVector (b), info, rank, rcon);
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2608 }
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2609
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2610 ComplexColumnVector
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2611 ComplexMatrix::lssolve (const ColumnVector& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2612 octave_idx_type& rank, double& rcon) const
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2613 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2614 return lssolve (ComplexColumnVector (b), info, rank, rcon);
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2615 }
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2616
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
2617 ComplexColumnVector
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2618 ComplexMatrix::lssolve (const ComplexColumnVector& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2619 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2620 octave_idx_type info;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2621 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2622 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2623 return lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2624 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2625
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2626 ComplexColumnVector
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2627 ComplexMatrix::lssolve (const ComplexColumnVector& b,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2628 octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2629 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2630 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2631 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2632 return lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2633 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2634
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2635 ComplexColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2636 ComplexMatrix::lssolve (const ComplexColumnVector& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2637 octave_idx_type& rank) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2638 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2639 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2640 return lssolve (b, info, rank, rcon);
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2641
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2642 }
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2643
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2644 ComplexColumnVector
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2645 ComplexMatrix::lssolve (const ComplexColumnVector& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2646 octave_idx_type& rank, double& rcon) const
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2647 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2648 ComplexColumnVector retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2649
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2650 F77_INT nrhs = 1;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2651
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
2652 F77_INT m = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
2653 F77_INT n = octave::to_f77_int (cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
2654
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
2655 F77_INT b_nel = octave::to_f77_int (b.numel ());
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2656
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2657 if (m != b_nel)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2658 (*current_liboctave_error_handler)
6924
be176b7e110a [project @ 2007-09-25 19:08:19 by dbateman]
dbateman
parents: 6867
diff changeset
2659 ("matrix dimension mismatch solution of linear equations");
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
2660
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2661 if (m == 0 || n == 0)
6924
be176b7e110a [project @ 2007-09-25 19:08:19 by dbateman]
dbateman
parents: 6867
diff changeset
2662 retval = ComplexColumnVector (n, Complex (0.0, 0.0));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2663 else
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2664 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2665 volatile F77_INT minmn = (m < n ? m : n);
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2666 F77_INT maxmn = m > n ? m : n;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2667 rcon = -1.0;
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2668
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2669 if (m != n)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2670 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2671 retval = ComplexColumnVector (maxmn);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2672
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2673 for (F77_INT i = 0; i < m; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2674 retval.elem (i) = b.elem (i);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2675 }
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2676 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2677 retval = b;
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2678
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2679 ComplexMatrix atmp = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2680 Complex *tmp_data = atmp.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2681
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2682 Complex *pretval = retval.fortran_vec ();
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
2683 Array<double> s (dim_vector (minmn, 1));
7071
c3b479e753dd [project @ 2007-10-26 15:14:34 by jwe]
jwe
parents: 7033
diff changeset
2684 double *ps = s.fortran_vec ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2685
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2686 // Ask ZGELSD what the dimension of WORK should be.
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2687 F77_INT lwork = -1;
3752
719a44ff67c9 [project @ 2000-12-13 19:02:42 by jwe]
jwe
parents: 3726
diff changeset
2688
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
2689 Array<Complex> work (dim_vector (1, 1));
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2690
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2691 F77_INT smlsiz;
7544
f9983d2761df more xGELSD workspace fixes
Jaroslav Hajek <highegg@gmail.com>
parents: 7532
diff changeset
2692 F77_FUNC (xilaenv, XILAENV) (9, F77_CONST_CHAR_ARG2 ("ZGELSD", 6),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2693 F77_CONST_CHAR_ARG2 (" ", 1),
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2694 0, 0, 0, 0, smlsiz
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2695 F77_CHAR_ARG_LEN (6)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2696 F77_CHAR_ARG_LEN (1));
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2697
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2698 // We compute the size of rwork and iwork because ZGELSD in
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2699 // older versions of LAPACK does not return them on a query
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2700 // call.
7124
d07cb867891b [project @ 2007-11-08 01:09:44 by jwe]
jwe
parents: 7079
diff changeset
2701 double dminmn = static_cast<double> (minmn);
d07cb867891b [project @ 2007-11-08 01:09:44 by jwe]
jwe
parents: 7079
diff changeset
2702 double dsmlsizp1 = static_cast<double> (smlsiz+1);
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
2703 double tmp = octave::math::log2 (dminmn / dsmlsizp1);
18847
ff4da3c8ed16 use gnulib log2 modules (bug #42583)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
2704
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2705 F77_INT nlvl = static_cast<F77_INT> (tmp) + 1;
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2706 if (nlvl < 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2707 nlvl = 0;
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2708
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2709 F77_INT lrwork = minmn*(10 + 2*smlsiz + 8*nlvl)
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2710 + 3*smlsiz*nrhs + (smlsiz+1)*(smlsiz+1);
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2711 if (lrwork < 1)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2712 lrwork = 1;
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
2713 Array<double> rwork (dim_vector (lrwork, 1));
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2714 double *prwork = rwork.fortran_vec ();
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2715
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2716 F77_INT liwork = 3 * minmn * nlvl + 11 * minmn;
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2717 if (liwork < 1)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2718 liwork = 1;
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2719 Array<F77_INT> iwork (dim_vector (liwork, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2720 F77_INT* piwork = iwork.fortran_vec ();
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2721
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2722 F77_INT tmp_info = 0;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2723 F77_INT tmp_rank = 0;
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2724
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
2725 F77_XFCN (zgelsd, ZGELSD, (m, n, nrhs, F77_DBLE_CMPLX_ARG (tmp_data), m,
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
2726 F77_DBLE_CMPLX_ARG (pretval), maxmn,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2727 ps, rcon, tmp_rank, F77_DBLE_CMPLX_ARG (work.fortran_vec ()),
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2728 lwork, prwork, piwork, tmp_info));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2729
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2730 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2731 rank = tmp_rank;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2732
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2733 lwork = static_cast<F77_INT> (octave::math::real (work(0)));
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
2734 work.resize (dim_vector (lwork, 1));
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2735 rwork.resize (dim_vector (static_cast<F77_INT> (rwork(0)), 1));
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
2736 iwork.resize (dim_vector (iwork(0), 1));
7482
29980c6b8604 don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents: 7478
diff changeset
2737
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
2738 F77_XFCN (zgelsd, ZGELSD, (m, n, nrhs, F77_DBLE_CMPLX_ARG (tmp_data), m,
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
2739 F77_DBLE_CMPLX_ARG (pretval),
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2740 maxmn, ps, rcon, tmp_rank,
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
2741 F77_DBLE_CMPLX_ARG (work.fortran_vec ()), lwork,
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2742 prwork, piwork, tmp_info));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2743
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2744 info = tmp_info;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2745 rank = tmp_rank;
7482
29980c6b8604 don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents: 7478
diff changeset
2746
29980c6b8604 don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents: 7478
diff changeset
2747 if (rank < minmn)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2748 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2749 if (s.elem (0) == 0.0)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2750 rcon = 0.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2751 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2752 rcon = s.elem (minmn - 1) / s.elem (0);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2753
22848
a3bd04422a87 don't pass two dimensions to column vector resize method
John W. Eaton <jwe@octave.org>
parents: 22777
diff changeset
2754 retval.resize (n);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2755 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2756 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2757
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2758 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2759 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2760
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2761 // column vector by row vector -> matrix operations
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2762
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2763 ComplexMatrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2764 operator * (const ColumnVector& v, const ComplexRowVector& a)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2765 {
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2766 ComplexColumnVector tmp (v);
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2767 return tmp * a;
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2768 }
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2769
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2770 ComplexMatrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2771 operator * (const ComplexColumnVector& a, const RowVector& b)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2772 {
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2773 ComplexRowVector tmp (b);
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2774 return a * tmp;
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2775 }
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2776
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2777 ComplexMatrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2778 operator * (const ComplexColumnVector& v, const ComplexRowVector& a)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2779 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2780 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2781
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
2782 F77_INT len = octave::to_f77_int (v.numel ());
3233
98d0ee053ba4 [project @ 1999-01-27 20:23:40 by jwe]
jwe
parents: 3225
diff changeset
2783
98d0ee053ba4 [project @ 1999-01-27 20:23:40 by jwe]
jwe
parents: 3225
diff changeset
2784 if (len != 0)
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2785 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
2786 F77_INT a_len = octave::to_f77_int (a.numel ());
3233
98d0ee053ba4 [project @ 1999-01-27 20:23:40 by jwe]
jwe
parents: 3225
diff changeset
2787
9359
be6867ba8104 avoid useless zero initialization when doing matrix multiply
Jaroslav Hajek <highegg@gmail.com>
parents: 9227
diff changeset
2788 retval = ComplexMatrix (len, a_len);
3233
98d0ee053ba4 [project @ 1999-01-27 20:23:40 by jwe]
jwe
parents: 3225
diff changeset
2789 Complex *c = retval.fortran_vec ();
98d0ee053ba4 [project @ 1999-01-27 20:23:40 by jwe]
jwe
parents: 3225
diff changeset
2790
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4513
diff changeset
2791 F77_XFCN (zgemm, ZGEMM, (F77_CONST_CHAR_ARG2 ("N", 1),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2792 F77_CONST_CHAR_ARG2 ("N", 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
2793 len, a_len, 1, 1.0, F77_CONST_DBLE_CMPLX_ARG (v.data ()), len,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
2794 F77_CONST_DBLE_CMPLX_ARG (a.data ()), 1, 0.0, F77_DBLE_CMPLX_ARG (c), len
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2795 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2796 F77_CHAR_ARG_LEN (1)));
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2797 }
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2798
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2799 return retval;
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2800 }
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2801
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2802 // matrix by diagonal matrix -> matrix operations
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2803
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2804 ComplexMatrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2805 ComplexMatrix::operator += (const DiagMatrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2806 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2807 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2808 octave_idx_type nc = cols ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2809
22978
03819d65cc1d use correct dimensions for liboctave += and -= matrix operators
John W. Eaton <jwe@octave.org>
parents: 22600
diff changeset
2810 octave_idx_type a_nr = a.rows ();
03819d65cc1d use correct dimensions for liboctave += and -= matrix operators
John W. Eaton <jwe@octave.org>
parents: 22600
diff changeset
2811 octave_idx_type a_nc = a.cols ();
2384
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
2812
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
2813 if (nr != a_nr || nc != a_nc)
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
2814 octave::err_nonconformant ("operator +=", nr, nc, a_nr, a_nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2815
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2816 for (octave_idx_type i = 0; i < a.length (); i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2817 elem (i, i) += a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2818
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2819 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2820 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2821
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2822 ComplexMatrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2823 ComplexMatrix::operator -= (const DiagMatrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2824 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2825 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2826 octave_idx_type nc = cols ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2827
22978
03819d65cc1d use correct dimensions for liboctave += and -= matrix operators
John W. Eaton <jwe@octave.org>
parents: 22600
diff changeset
2828 octave_idx_type a_nr = a.rows ();
03819d65cc1d use correct dimensions for liboctave += and -= matrix operators
John W. Eaton <jwe@octave.org>
parents: 22600
diff changeset
2829 octave_idx_type a_nc = a.cols ();
2384
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
2830
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
2831 if (nr != a_nr || nc != a_nc)
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
2832 octave::err_nonconformant ("operator -=", nr, nc, a_nr, a_nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2833
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2834 for (octave_idx_type i = 0; i < a.length (); i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2835 elem (i, i) -= a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2836
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2837 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2838 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2839
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2840 ComplexMatrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2841 ComplexMatrix::operator += (const ComplexDiagMatrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2842 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2843 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2844 octave_idx_type nc = cols ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2845
22978
03819d65cc1d use correct dimensions for liboctave += and -= matrix operators
John W. Eaton <jwe@octave.org>
parents: 22600
diff changeset
2846 octave_idx_type a_nr = a.rows ();
03819d65cc1d use correct dimensions for liboctave += and -= matrix operators
John W. Eaton <jwe@octave.org>
parents: 22600
diff changeset
2847 octave_idx_type a_nc = a.cols ();
2384
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
2848
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
2849 if (nr != a_nr || nc != a_nc)
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
2850 octave::err_nonconformant ("operator +=", nr, nc, a_nr, a_nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2851
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2852 for (octave_idx_type i = 0; i < a.length (); i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2853 elem (i, i) += a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2854
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2855 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2856 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2857
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2858 ComplexMatrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2859 ComplexMatrix::operator -= (const ComplexDiagMatrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2860 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2861 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2862 octave_idx_type nc = cols ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2863
22978
03819d65cc1d use correct dimensions for liboctave += and -= matrix operators
John W. Eaton <jwe@octave.org>
parents: 22600
diff changeset
2864 octave_idx_type a_nr = a.rows ();
03819d65cc1d use correct dimensions for liboctave += and -= matrix operators
John W. Eaton <jwe@octave.org>
parents: 22600
diff changeset
2865 octave_idx_type a_nc = a.cols ();
2384
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
2866
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
2867 if (nr != a_nr || nc != a_nc)
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
2868 octave::err_nonconformant ("operator -=", nr, nc, a_nr, a_nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2869
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2870 for (octave_idx_type i = 0; i < a.length (); i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2871 elem (i, i) -= a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2872
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2873 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2874 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2875
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2876 // matrix by matrix -> matrix operations
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2877
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2878 ComplexMatrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2879 ComplexMatrix::operator += (const Matrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2880 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2881 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2882 octave_idx_type nc = cols ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2883
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2884 octave_idx_type a_nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2885 octave_idx_type a_nc = a.cols ();
2384
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
2886
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
2887 if (nr != a_nr || nc != a_nc)
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
2888 octave::err_nonconformant ("operator +=", nr, nc, a_nr, a_nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2889
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2890 if (nr == 0 || nc == 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2891 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2892
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2893 Complex *d = fortran_vec (); // Ensures only one reference to my privates!
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2894
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
2895 mx_inline_add2 (numel (), d, a.data ());
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2896 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2897 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2898
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2899 ComplexMatrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2900 ComplexMatrix::operator -= (const Matrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2901 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2902 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2903 octave_idx_type nc = cols ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2904
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2905 octave_idx_type a_nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2906 octave_idx_type a_nc = a.cols ();
2384
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
2907
d9147efd1a93 [project @ 1996-10-12 17:56:38 by jwe]
jwe
parents: 2354
diff changeset
2908 if (nr != a_nr || nc != a_nc)
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
2909 octave::err_nonconformant ("operator -=", nr, nc, a_nr, a_nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2910
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2911 if (nr == 0 || nc == 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2912 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2913
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2914 Complex *d = fortran_vec (); // Ensures only one reference to my privates!
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2915
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
2916 mx_inline_sub2 (numel (), d, a.data ());
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2917 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2918 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2919
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2920 // other operations
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2921
2832
4dff308e9acc [project @ 1997-03-26 05:16:58 by jwe]
jwe
parents: 2828
diff changeset
2922 boolMatrix
4015
6476dd85a65f [project @ 2002-08-02 07:59:19 by jwe]
jwe
parents: 3998
diff changeset
2923 ComplexMatrix::all (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2924 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2925 return ComplexNDArray::all (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2926 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2927
2832
4dff308e9acc [project @ 1997-03-26 05:16:58 by jwe]
jwe
parents: 2828
diff changeset
2928 boolMatrix
4015
6476dd85a65f [project @ 2002-08-02 07:59:19 by jwe]
jwe
parents: 3998
diff changeset
2929 ComplexMatrix::any (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2930 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2931 return ComplexNDArray::any (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2932 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2933
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2934 ComplexMatrix
3723
4c3774db5b3c [project @ 2000-10-12 05:10:08 by jwe]
jwe
parents: 3585
diff changeset
2935 ComplexMatrix::cumprod (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2936 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2937 return ComplexNDArray::cumprod (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2938 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2939
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2940 ComplexMatrix
3723
4c3774db5b3c [project @ 2000-10-12 05:10:08 by jwe]
jwe
parents: 3585
diff changeset
2941 ComplexMatrix::cumsum (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2942 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2943 return ComplexNDArray::cumsum (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2944 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2945
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2946 ComplexMatrix
3723
4c3774db5b3c [project @ 2000-10-12 05:10:08 by jwe]
jwe
parents: 3585
diff changeset
2947 ComplexMatrix::prod (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2948 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2949 return ComplexNDArray::prod (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2950 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2951
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2952 ComplexMatrix
3723
4c3774db5b3c [project @ 2000-10-12 05:10:08 by jwe]
jwe
parents: 3585
diff changeset
2953 ComplexMatrix::sum (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2954 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2955 return ComplexNDArray::sum (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2956 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2957
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2958 ComplexMatrix
3723
4c3774db5b3c [project @ 2000-10-12 05:10:08 by jwe]
jwe
parents: 3585
diff changeset
2959 ComplexMatrix::sumsq (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2960 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2961 return ComplexNDArray::sumsq (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2962 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2963
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2964 Matrix
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2965 ComplexMatrix::abs (void) const
4329
d53c33d93440 [project @ 2003-02-18 20:00:48 by jwe]
jwe
parents: 4316
diff changeset
2966 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2967 return ComplexNDArray::abs ();
4329
d53c33d93440 [project @ 2003-02-18 20:00:48 by jwe]
jwe
parents: 4316
diff changeset
2968 }
d53c33d93440 [project @ 2003-02-18 20:00:48 by jwe]
jwe
parents: 4316
diff changeset
2969
7620
36594d5bbe13 Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents: 7544
diff changeset
2970 ComplexMatrix
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2971 ComplexMatrix::diag (octave_idx_type k) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2972 {
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
2973 return ComplexNDArray::diag (k);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2974 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2975
14557
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2976 ComplexDiagMatrix
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2977 ComplexMatrix::diag (octave_idx_type m, octave_idx_type n) const
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2978 {
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2979 octave_idx_type nr = rows ();
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2980 octave_idx_type nc = cols ();
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2981
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
2982 if (nr != 1 && nc != 1)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
2983 (*current_liboctave_error_handler) ("diag: expecting vector argument");
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
2984
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
2985 return ComplexDiagMatrix (*this, m, n);
14557
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2986 }
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2987
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
2988 bool
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2989 ComplexMatrix::row_is_real_only (octave_idx_type i) const
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
2990 {
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
2991 bool retval = true;
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
2992
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2993 octave_idx_type nc = columns ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2994
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
2995 for (octave_idx_type j = 0; j < nc; j++)
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
2996 {
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
2997 if (octave::math::imag (elem (i, j)) != 0.0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2998 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2999 retval = false;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3000 break;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3001 }
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
3002 }
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
3003
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
3004 return retval;
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
3005 }
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
3006
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
3007 bool
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3008 ComplexMatrix::column_is_real_only (octave_idx_type j) const
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
3009 {
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
3010 bool retval = true;
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
3011
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3012 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3013
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3014 for (octave_idx_type i = 0; i < nr; i++)
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
3015 {
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
3016 if (octave::math::imag (elem (i, j)) != 0.0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3017 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3018 retval = false;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3019 break;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3020 }
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
3021 }
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
3022
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
3023 return retval;
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
3024 }
891
9e6bdfdfcf86 [project @ 1994-11-08 20:59:39 by jwe]
jwe
parents: 889
diff changeset
3025
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3026 ComplexColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3027 ComplexMatrix::row_min (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3028 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3029 Array<octave_idx_type> dummy_idx;
4587
7b957b442818 [project @ 2003-11-10 15:50:39 by jwe]
jwe
parents: 4552
diff changeset
3030 return row_min (dummy_idx);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3031 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3032
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3033 ComplexColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3034 ComplexMatrix::row_min (Array<octave_idx_type>& idx_arg) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3035 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3036 ComplexColumnVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3037
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3038 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3039 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3040
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3041 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3042 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3043 result.resize (nr);
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
3044 idx_arg.resize (dim_vector (nr, 1));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3045
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3046 for (octave_idx_type i = 0; i < nr; i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3047 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3048 bool real_only = row_is_real_only (i);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3049
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3050 octave_idx_type idx_j;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3051
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3052 Complex tmp_min;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3053
21723
bae585228161 use namespace for numeric_limits
John W. Eaton <jwe@octave.org>
parents: 21721
diff changeset
3054 double abs_min = octave::numeric_limits<double>::NaN ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3055
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3056 for (idx_j = 0; idx_j < nc; idx_j++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3057 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3058 tmp_min = elem (i, idx_j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3059
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3060 if (! octave::math::isnan (tmp_min))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3061 {
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
3062 abs_min = real_only ? tmp_min.real ()
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
3063 : std::abs (tmp_min);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3064 break;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3065 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3066 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3067
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3068 for (octave_idx_type j = idx_j+1; j < nc; j++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3069 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3070 Complex tmp = elem (i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3071
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3072 if (octave::math::isnan (tmp))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3073 continue;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3074
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
3075 double abs_tmp = real_only ? tmp.real () : std::abs (tmp);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3076
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3077 if (abs_tmp < abs_min)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3078 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3079 idx_j = j;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3080 tmp_min = tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3081 abs_min = abs_tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3082 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3083 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3084
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3085 if (octave::math::isnan (tmp_min))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3086 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3087 result.elem (i) = Complex_NaN_result;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3088 idx_arg.elem (i) = 0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3089 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3090 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3091 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3092 result.elem (i) = tmp_min;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3093 idx_arg.elem (i) = idx_j;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3094 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3095 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3096 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3097
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3098 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3099 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3100
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3101 ComplexColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3102 ComplexMatrix::row_max (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3103 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3104 Array<octave_idx_type> dummy_idx;
4587
7b957b442818 [project @ 2003-11-10 15:50:39 by jwe]
jwe
parents: 4552
diff changeset
3105 return row_max (dummy_idx);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3106 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3107
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3108 ComplexColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3109 ComplexMatrix::row_max (Array<octave_idx_type>& idx_arg) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3110 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3111 ComplexColumnVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3112
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3113 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3114 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3115
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3116 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3117 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3118 result.resize (nr);
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
3119 idx_arg.resize (dim_vector (nr, 1));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3120
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3121 for (octave_idx_type i = 0; i < nr; i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3122 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3123 bool real_only = row_is_real_only (i);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3124
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3125 octave_idx_type idx_j;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3126
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3127 Complex tmp_max;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3128
21723
bae585228161 use namespace for numeric_limits
John W. Eaton <jwe@octave.org>
parents: 21721
diff changeset
3129 double abs_max = octave::numeric_limits<double>::NaN ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3130
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3131 for (idx_j = 0; idx_j < nc; idx_j++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3132 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3133 tmp_max = elem (i, idx_j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3134
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3135 if (! octave::math::isnan (tmp_max))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3136 {
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
3137 abs_max = real_only ? tmp_max.real ()
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
3138 : std::abs (tmp_max);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3139 break;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3140 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3141 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3142
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3143 for (octave_idx_type j = idx_j+1; j < nc; j++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3144 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3145 Complex tmp = elem (i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3146
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3147 if (octave::math::isnan (tmp))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3148 continue;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3149
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
3150 double abs_tmp = real_only ? tmp.real () : std::abs (tmp);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3151
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3152 if (abs_tmp > abs_max)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3153 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3154 idx_j = j;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3155 tmp_max = tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3156 abs_max = abs_tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3157 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3158 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3159
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3160 if (octave::math::isnan (tmp_max))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3161 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3162 result.elem (i) = Complex_NaN_result;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3163 idx_arg.elem (i) = 0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3164 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3165 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3166 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3167 result.elem (i) = tmp_max;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3168 idx_arg.elem (i) = idx_j;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3169 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3170 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3171 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3172
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3173 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3174 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3175
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3176 ComplexRowVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3177 ComplexMatrix::column_min (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3178 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3179 Array<octave_idx_type> dummy_idx;
4587
7b957b442818 [project @ 2003-11-10 15:50:39 by jwe]
jwe
parents: 4552
diff changeset
3180 return column_min (dummy_idx);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3181 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3182
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3183 ComplexRowVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3184 ComplexMatrix::column_min (Array<octave_idx_type>& idx_arg) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3185 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3186 ComplexRowVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3187
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3188 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3189 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3190
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3191 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3192 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3193 result.resize (nc);
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
3194 idx_arg.resize (dim_vector (1, nc));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3195
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3196 for (octave_idx_type j = 0; j < nc; j++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3197 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3198 bool real_only = column_is_real_only (j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3199
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3200 octave_idx_type idx_i;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3201
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3202 Complex tmp_min;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3203
21723
bae585228161 use namespace for numeric_limits
John W. Eaton <jwe@octave.org>
parents: 21721
diff changeset
3204 double abs_min = octave::numeric_limits<double>::NaN ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3205
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3206 for (idx_i = 0; idx_i < nr; idx_i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3207 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3208 tmp_min = elem (idx_i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3209
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3210 if (! octave::math::isnan (tmp_min))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3211 {
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
3212 abs_min = real_only ? tmp_min.real ()
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
3213 : std::abs (tmp_min);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3214 break;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3215 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3216 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3217
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3218 for (octave_idx_type i = idx_i+1; i < nr; i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3219 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3220 Complex tmp = elem (i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3221
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3222 if (octave::math::isnan (tmp))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3223 continue;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3224
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
3225 double abs_tmp = real_only ? tmp.real () : std::abs (tmp);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3226
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3227 if (abs_tmp < abs_min)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3228 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3229 idx_i = i;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3230 tmp_min = tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3231 abs_min = abs_tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3232 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3233 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3234
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3235 if (octave::math::isnan (tmp_min))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3236 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3237 result.elem (j) = Complex_NaN_result;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3238 idx_arg.elem (j) = 0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3239 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3240 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3241 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3242 result.elem (j) = tmp_min;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3243 idx_arg.elem (j) = idx_i;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3244 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3245 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3246 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3247
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3248 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3249 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3250
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3251 ComplexRowVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3252 ComplexMatrix::column_max (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3253 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3254 Array<octave_idx_type> dummy_idx;
4587
7b957b442818 [project @ 2003-11-10 15:50:39 by jwe]
jwe
parents: 4552
diff changeset
3255 return column_max (dummy_idx);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3256 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3257
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3258 ComplexRowVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3259 ComplexMatrix::column_max (Array<octave_idx_type>& idx_arg) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3260 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3261 ComplexRowVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3262
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3263 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3264 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3265
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3266 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3267 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3268 result.resize (nc);
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
3269 idx_arg.resize (dim_vector (1, nc));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3270
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3271 for (octave_idx_type j = 0; j < nc; j++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3272 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3273 bool real_only = column_is_real_only (j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3274
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3275 octave_idx_type idx_i;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3276
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3277 Complex tmp_max;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3278
21723
bae585228161 use namespace for numeric_limits
John W. Eaton <jwe@octave.org>
parents: 21721
diff changeset
3279 double abs_max = octave::numeric_limits<double>::NaN ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3280
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3281 for (idx_i = 0; idx_i < nr; idx_i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3282 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3283 tmp_max = elem (idx_i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3284
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3285 if (! octave::math::isnan (tmp_max))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3286 {
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
3287 abs_max = real_only ? tmp_max.real ()
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
3288 : std::abs (tmp_max);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3289 break;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3290 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3291 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3292
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3293 for (octave_idx_type i = idx_i+1; i < nr; i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3294 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3295 Complex tmp = elem (i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3296
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3297 if (octave::math::isnan (tmp))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3298 continue;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3299
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
3300 double abs_tmp = real_only ? tmp.real () : std::abs (tmp);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3301
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3302 if (abs_tmp > abs_max)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3303 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3304 idx_i = i;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3305 tmp_max = tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3306 abs_max = abs_tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3307 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3308 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3309
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3310 if (octave::math::isnan (tmp_max))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3311 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3312 result.elem (j) = Complex_NaN_result;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3313 idx_arg.elem (j) = 0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3314 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3315 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3316 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3317 result.elem (j) = tmp_max;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3318 idx_arg.elem (j) = idx_i;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3319 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3320 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3321 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3322
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3323 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3324 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3325
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3326 // i/o
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3327
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3503
diff changeset
3328 std::ostream&
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3503
diff changeset
3329 operator << (std::ostream& os, const ComplexMatrix& a)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3330 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3331 for (octave_idx_type i = 0; i < a.rows (); i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3332 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3333 for (octave_idx_type j = 0; j < a.cols (); j++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3334 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3335 os << " ";
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3336 octave_write_complex (os, a.elem (i, j));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3337 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3338 os << "\n";
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3339 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3340 return os;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3341 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3342
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3503
diff changeset
3343 std::istream&
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3503
diff changeset
3344 operator >> (std::istream& is, ComplexMatrix& a)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3345 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3346 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3347 octave_idx_type nc = a.cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3348
8999
dc07bc4157b8 allow empty matrices in stream input operators
Jaroslav Hajek <highegg@gmail.com>
parents: 8956
diff changeset
3349 if (nr > 0 && nc > 0)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3350 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3351 Complex tmp;
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3352 for (octave_idx_type i = 0; i < nr; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3353 for (octave_idx_type j = 0; j < nc; j++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3354 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3355 tmp = octave_read_value<Complex> (is);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3356 if (is)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3357 a.elem (i, j) = tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3358 else
21168
26f85aa072de maint: Replace instances of goto in liboctave where convenient.
Rik <rik@octave.org>
parents: 21136
diff changeset
3359 return is;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3360 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3361 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3362
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3363 return is;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3364 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
3365
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3366 ComplexMatrix
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3367 Givens (const Complex& x, const Complex& y)
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3368 {
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3369 double cc;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3370 Complex cs, temp_r;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
3371
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3372 F77_FUNC (zlartg, ZLARTG) (F77_CONST_DBLE_CMPLX_ARG (&x),
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3373 F77_CONST_DBLE_CMPLX_ARG (&y),
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3374 cc,
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3375 F77_DBLE_CMPLX_ARG (&cs),
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3376 F77_DBLE_CMPLX_ARG (&temp_r));
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3377
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3378 ComplexMatrix g (2, 2);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3379
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3380 g.elem (0, 0) = cc;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3381 g.elem (1, 1) = cc;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3382 g.elem (0, 1) = cs;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3383 g.elem (1, 0) = -conj (cs);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3384
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3385 return g;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3386 }
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3387
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3388 ComplexMatrix
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3389 Sylvester (const ComplexMatrix& a, const ComplexMatrix& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3390 const ComplexMatrix& c)
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3391 {
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3392 ComplexMatrix retval;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3393
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
3394 // FIXME: need to check that a, b, and c are all the same size.
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3395
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3396 // Compute Schur decompositions
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3397
22317
6ca3acf5fad8 move some new numeric classes to namespace octave::math
John W. Eaton <jwe@octave.org>
parents: 22274
diff changeset
3398 octave::math::schur<ComplexMatrix> as (a, "U");
6ca3acf5fad8 move some new numeric classes to namespace octave::math
John W. Eaton <jwe@octave.org>
parents: 22274
diff changeset
3399 octave::math::schur<ComplexMatrix> bs (b, "U");
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
3400
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3401 // Transform c to new coordinates.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3402
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3403 ComplexMatrix ua = as.unitary_matrix ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3404 ComplexMatrix sch_a = as.schur_matrix ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3405
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3406 ComplexMatrix ub = bs.unitary_matrix ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3407 ComplexMatrix sch_b = bs.schur_matrix ();
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
3408
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3409 ComplexMatrix cx = ua.hermitian () * c * ub;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3410
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
3411 // Solve the sylvester equation, back-transform, and return the solution.
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3412
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
3413 F77_INT a_nr = octave::to_f77_int (a.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
3414 F77_INT b_nr = octave::to_f77_int (b.rows ());
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3415
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3416 double scale;
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
3417 F77_INT info;
1950
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3418
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3419 Complex *pa = sch_a.fortran_vec ();
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3420 Complex *pb = sch_b.fortran_vec ();
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3421 Complex *px = cx.fortran_vec ();
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
3422
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4513
diff changeset
3423 F77_XFCN (ztrsyl, ZTRSYL, (F77_CONST_CHAR_ARG2 ("N", 1),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3424 F77_CONST_CHAR_ARG2 ("N", 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
3425 1, a_nr, b_nr, F77_DBLE_CMPLX_ARG (pa), a_nr, F77_DBLE_CMPLX_ARG (pb),
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
3426 b_nr, F77_DBLE_CMPLX_ARG (px), a_nr, scale, info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3427 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3428 F77_CHAR_ARG_LEN (1)));
1950
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
3429
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
3430 // FIXME: check info?
7482
29980c6b8604 don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents: 7478
diff changeset
3431
19065
d20c81d3cd21 Deprecate syl, add new function sylvester.
Rik <rik@octave.org>
parents: 18850
diff changeset
3432 retval = ua * cx * ub.hermitian ();
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3433
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3434 return retval;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3435 }
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1699
diff changeset
3436
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3437 ComplexMatrix
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3438 operator * (const ComplexMatrix& m, const Matrix& a)
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3439 {
9663
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
3440 if (m.columns () > std::min (m.rows (), a.columns ()) / 10)
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
3441 return ComplexMatrix (real (m) * a, imag (m) * a);
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
3442 else
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
3443 return m * ComplexMatrix (a);
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3444 }
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3445
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3446 ComplexMatrix
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3447 operator * (const Matrix& m, const ComplexMatrix& a)
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3448 {
9663
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
3449 if (a.rows () > std::min (m.rows (), a.columns ()) / 10)
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
3450 return ComplexMatrix (m * real (a), m * imag (a));
7e5b4de5fbfe improve mixed real x complex ops
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
3451 else
11352
5ea2644b0111 fix cut and paste error in Matrix by ComplexMatrix multiplication operator
John W. Eaton <jwe@octave.org>
parents: 11130
diff changeset
3452 return ComplexMatrix (m) * a;
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3453 }
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3454
14427
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3455 /*
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3456
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3457 ## Simple Dot Product, Matrix-Vector, and Matrix-Matrix Unit tests
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3458 %!assert ([1+i 2+i 3+i] * [ 4+i ; 5+i ; 6+i], 29+21i, 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3459 %!assert ([1+i 2+i ; 3+i 4+i ] * [5+i ; 6+i], [15 + 14i ; 37 + 18i], 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3460 %!assert ([1+i 2+i ; 3+i 4+i ] * [5+i 6+i ; 7+i 8+i], [17 + 15i 20 + 17i; 41 + 19i 48 + 21i], 1e-14)
21317
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
3461 %!assert ([1 i]*[i 0]', -i)
14427
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3462
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3463 ## Test some simple identities
6162
b3c425131211 [project @ 2006-11-14 15:33:22 by jwe]
jwe
parents: 6060
diff changeset
3464 %!shared M, cv, rv
14427
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3465 %! M = randn (10,10) + i*rand (10,10);
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3466 %! cv = randn (10,1) + i*rand (10,1);
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3467 %! rv = randn (1,10) + i*rand (1,10);
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3468 %!assert ([M*cv,M*cv], M*[cv,cv], 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3469 %!assert ([M.'*cv,M.'*cv], M.'*[cv,cv], 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3470 %!assert ([M'*cv,M'*cv], M'*[cv,cv], 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3471 %!assert ([rv*M;rv*M], [rv;rv]*M, 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3472 %!assert ([rv*M.';rv*M.'], [rv;rv]*M.', 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3473 %!assert ([rv*M';rv*M'], [rv;rv]*M', 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3474 %!assert (2*rv*cv, [rv,rv]*[cv;cv], 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
3475
6162
b3c425131211 [project @ 2006-11-14 15:33:22 by jwe]
jwe
parents: 6060
diff changeset
3476 */
b3c425131211 [project @ 2006-11-14 15:33:22 by jwe]
jwe
parents: 6060
diff changeset
3477
11516
53edbf95fbb6 avoid GCC warnings
John W. Eaton <jwe@octave.org>
parents: 11352
diff changeset
3478 static inline char
7800
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3479 get_blas_trans_arg (bool trans, bool conj)
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3480 {
11516
53edbf95fbb6 avoid GCC warnings
John W. Eaton <jwe@octave.org>
parents: 11352
diff changeset
3481 return trans ? (conj ? 'C' : 'T') : 'N';
7800
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3482 }
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3483
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3484 // the general GEMM operation
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3485
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3486 ComplexMatrix
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
3487 xgemm (const ComplexMatrix& a, const ComplexMatrix& b,
9665
1dba57e9d08d use blas_trans_type for xgemm
Jaroslav Hajek <highegg@gmail.com>
parents: 9663
diff changeset
3488 blas_trans_type transa, blas_trans_type transb)
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3489 {
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3490 ComplexMatrix retval;
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3491
18084
8e056300994b Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents: 18083
diff changeset
3492 bool tra = transa != blas_no_trans;
8e056300994b Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents: 18083
diff changeset
3493 bool trb = transb != blas_no_trans;
8e056300994b Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents: 18083
diff changeset
3494 bool cja = transa == blas_conj_trans;
8e056300994b Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents: 18083
diff changeset
3495 bool cjb = transb == blas_conj_trans;
9665
1dba57e9d08d use blas_trans_type for xgemm
Jaroslav Hajek <highegg@gmail.com>
parents: 9663
diff changeset
3496
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
3497 F77_INT a_nr = octave::to_f77_int (tra ? a.cols () : a.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
3498 F77_INT a_nc = octave::to_f77_int (tra ? a.rows () : a.cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
3499
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
3500 F77_INT b_nr = octave::to_f77_int (trb ? b.cols () : b.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
3501 F77_INT b_nc = octave::to_f77_int (trb ? b.rows () : b.cols ());
7800
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3502
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3503 if (a_nc != b_nr)
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
3504 octave::err_nonconformant ("operator *", a_nr, a_nc, b_nr, b_nc);
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3505
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3506 if (a_nr == 0 || a_nc == 0 || b_nc == 0)
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3507 retval = ComplexMatrix (a_nr, b_nc, 0.0);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3508 else if (a.data () == b.data () && a_nr == b_nc && tra != trb)
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3509 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
3510 F77_INT lda = octave::to_f77_int (a.rows ());
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3511
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3512 // FIXME: looking at the reference BLAS, it appears that it
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3513 // should not be necessary to initialize the output matrix if
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3514 // BETA is 0 in the call to ZHERK, but ATLAS appears to
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3515 // use the result matrix before zeroing the elements.
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3516
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3517 retval = ComplexMatrix (a_nr, b_nc, 0.0);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3518 Complex *c = retval.fortran_vec ();
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3519
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3520 const char ctra = get_blas_trans_arg (tra, cja);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3521 if (cja || cjb)
7801
776791438957 map symmetric cases to xHERK, xSYRK
Jaroslav Hajek <highegg@gmail.com>
parents: 7800
diff changeset
3522 {
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3523 F77_XFCN (zherk, ZHERK, (F77_CONST_CHAR_ARG2 ("U", 1),
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3524 F77_CONST_CHAR_ARG2 (&ctra, 1),
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3525 a_nr, a_nc, 1.0,
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
3526 F77_CONST_DBLE_CMPLX_ARG (a.data ()), lda, 0.0, F77_DBLE_CMPLX_ARG (c), a_nr
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3527 F77_CHAR_ARG_LEN (1)
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3528 F77_CHAR_ARG_LEN (1)));
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
3529 for (F77_INT j = 0; j < a_nr; j++)
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
3530 for (F77_INT i = 0; i < j; i++)
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
3531 retval.xelem (j,i) = octave::math::conj (retval.xelem (i,j));
7801
776791438957 map symmetric cases to xHERK, xSYRK
Jaroslav Hajek <highegg@gmail.com>
parents: 7800
diff changeset
3532 }
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3533 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3534 {
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3535 F77_XFCN (zsyrk, ZSYRK, (F77_CONST_CHAR_ARG2 ("U", 1),
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3536 F77_CONST_CHAR_ARG2 (&ctra, 1),
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3537 a_nr, a_nc, 1.0,
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
3538 F77_CONST_DBLE_CMPLX_ARG (a.data ()), lda, 0.0, F77_DBLE_CMPLX_ARG (c), a_nr
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3539 F77_CHAR_ARG_LEN (1)
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3540 F77_CHAR_ARG_LEN (1)));
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
3541 for (F77_INT j = 0; j < a_nr; j++)
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
3542 for (F77_INT i = 0; i < j; i++)
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3543 retval.xelem (j,i) = retval.xelem (i,j);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3544
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3545 }
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3546
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3547 }
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3548 else
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3549 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
3550 F77_INT lda = octave::to_f77_int (a.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
3551 F77_INT tda = octave::to_f77_int (a.cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
3552 F77_INT ldb = octave::to_f77_int (b.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22981
diff changeset
3553 F77_INT tdb = octave::to_f77_int (b.cols ());
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3554
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3555 retval = ComplexMatrix (a_nr, b_nc, 0.0);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3556 Complex *c = retval.fortran_vec ();
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3557
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3558 if (b_nc == 1 && a_nr == 1)
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3559 {
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3560 if (cja == cjb)
7800
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3561 {
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3562 F77_FUNC (xzdotu, XZDOTU) (a_nc, F77_CONST_DBLE_CMPLX_ARG (a.data ()), 1,
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3563 F77_CONST_DBLE_CMPLX_ARG (b.data ()), 1,
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
3564 F77_DBLE_CMPLX_ARG (c));
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
3565 if (cja) *c = octave::math::conj (*c);
7800
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3566 }
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3567 else if (cja)
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3568 F77_FUNC (xzdotc, XZDOTC) (a_nc, F77_CONST_DBLE_CMPLX_ARG (a.data ()), 1,
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3569 F77_CONST_DBLE_CMPLX_ARG (b.data ()), 1,
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
3570 F77_DBLE_CMPLX_ARG (c));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3571 else
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3572 F77_FUNC (xzdotc, XZDOTC) (a_nc, F77_CONST_DBLE_CMPLX_ARG (b.data ()), 1,
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3573 F77_CONST_DBLE_CMPLX_ARG (a.data ()), 1,
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
3574 F77_DBLE_CMPLX_ARG (c));
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3575 }
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3576 else if (b_nc == 1 && ! cjb)
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3577 {
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3578 const char ctra = get_blas_trans_arg (tra, cja);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3579 F77_XFCN (zgemv, ZGEMV, (F77_CONST_CHAR_ARG2 (&ctra, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
3580 lda, tda, 1.0, F77_CONST_DBLE_CMPLX_ARG (a.data ()), lda,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
3581 F77_CONST_DBLE_CMPLX_ARG (b.data ()), 1, 0.0, F77_DBLE_CMPLX_ARG (c), 1
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3582 F77_CHAR_ARG_LEN (1)));
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3583 }
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3584 else if (a_nr == 1 && ! cja && ! cjb)
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3585 {
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3586 const char crevtrb = get_blas_trans_arg (! trb, cjb);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3587 F77_XFCN (zgemv, ZGEMV, (F77_CONST_CHAR_ARG2 (&crevtrb, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
3588 ldb, tdb, 1.0, F77_CONST_DBLE_CMPLX_ARG (b.data ()), ldb,
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
3589 F77_CONST_DBLE_CMPLX_ARG (a.data ()), 1, 0.0, F77_DBLE_CMPLX_ARG (c), 1
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3590 F77_CHAR_ARG_LEN (1)));
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3591 }
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3592 else
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3593 {
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3594 const char ctra = get_blas_trans_arg (tra, cja);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3595 const char ctrb = get_blas_trans_arg (trb, cjb);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3596 F77_XFCN (zgemm, ZGEMM, (F77_CONST_CHAR_ARG2 (&ctra, 1),
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3597 F77_CONST_CHAR_ARG2 (&ctrb, 1),
22135
407c66ae1e20 reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents: 22133
diff changeset
3598 a_nr, b_nc, a_nc, 1.0, F77_CONST_DBLE_CMPLX_ARG (a.data ()),
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3599 lda, F77_CONST_DBLE_CMPLX_ARG (b.data ()), ldb, 0.0, F77_DBLE_CMPLX_ARG (c),
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3600 a_nr
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3601 F77_CHAR_ARG_LEN (1)
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3602 F77_CHAR_ARG_LEN (1)));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3603 }
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3604 }
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3605
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3606 return retval;
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3607 }
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2815
diff changeset
3608
7800
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3609 ComplexMatrix
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3610 operator * (const ComplexMatrix& a, const ComplexMatrix& b)
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3611 {
9665
1dba57e9d08d use blas_trans_type for xgemm
Jaroslav Hajek <highegg@gmail.com>
parents: 9663
diff changeset
3612 return xgemm (a, b);
7800
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3613 }
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3614
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
3615 // FIXME: it would be nice to share code among the min/max functions below.
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3616
22197
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22135
diff changeset
3617 #define EMPTY_RETURN_CHECK(T) \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22135
diff changeset
3618 if (nr == 0 || nc == 0) \
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3619 return T (nr, nc);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3620
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3621 ComplexMatrix
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3622 min (const Complex& c, const ComplexMatrix& m)
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3623 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3624 octave_idx_type nr = m.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3625 octave_idx_type nc = m.columns ();
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3626
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3627 EMPTY_RETURN_CHECK (ComplexMatrix);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3628
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3629 ComplexMatrix result (nr, nc);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3630
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3631 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3632 for (octave_idx_type i = 0; i < nr; i++)
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3633 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3634 octave_quit ();
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3635 result(i, j) = octave::math::min (c, m(i, j));
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3636 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3637
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3638 return result;
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3639 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3640
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3641 ComplexMatrix
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3642 min (const ComplexMatrix& m, const Complex& c)
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3643 {
22085
bf5fbf347aaf Avoid segfault with complex matrices using LAPACK (bug #46330).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22044
diff changeset
3644 return min (c, m);
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3645 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3646
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3647 ComplexMatrix
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3648 min (const ComplexMatrix& a, const ComplexMatrix& b)
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3649 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3650 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3651 octave_idx_type nc = a.columns ();
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3652
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3653 if (nr != b.rows () || nc != b.columns ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
3654 (*current_liboctave_error_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
3655 ("two-arg min requires same size arguments");
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3656
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3657 EMPTY_RETURN_CHECK (ComplexMatrix);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3658
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3659 ComplexMatrix result (nr, nc);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3660
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3661 for (octave_idx_type j = 0; j < nc; j++)
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3662 {
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21317
diff changeset
3663 bool columns_are_real_only = true;
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3664 for (octave_idx_type i = 0; i < nr; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3665 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3666 octave_quit ();
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
3667 if (octave::math::imag (a(i, j)) != 0.0 || octave::math::imag (b(i, j)) != 0.0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3668 {
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21317
diff changeset
3669 columns_are_real_only = false;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3670 break;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3671 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3672 }
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3673
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3674 if (columns_are_real_only)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3675 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3676 for (octave_idx_type i = 0; i < nr; i++)
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3677 result(i, j) = octave::math::min (octave::math::real (a(i, j)),
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3678 octave::math::real (b(i, j)));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3679 }
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3680 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3681 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3682 for (octave_idx_type i = 0; i < nr; i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3683 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3684 octave_quit ();
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3685 result(i, j) = octave::math::min (a(i, j), b(i, j));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3686 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3687 }
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3688 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3689
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3690 return result;
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3691 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3692
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3693 ComplexMatrix
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3694 max (const Complex& c, const ComplexMatrix& m)
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3695 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3696 octave_idx_type nr = m.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3697 octave_idx_type nc = m.columns ();
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3698
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3699 EMPTY_RETURN_CHECK (ComplexMatrix);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3700
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3701 ComplexMatrix result (nr, nc);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3702
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3703 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3704 for (octave_idx_type i = 0; i < nr; i++)
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3705 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3706 octave_quit ();
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3707 result(i, j) = octave::math::max (c, m(i, j));
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3708 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3709
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3710 return result;
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3711 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3712
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3713 ComplexMatrix
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3714 max (const ComplexMatrix& m, const Complex& c)
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3715 {
22085
bf5fbf347aaf Avoid segfault with complex matrices using LAPACK (bug #46330).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22044
diff changeset
3716 return max (c, m);
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3717 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3718
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3719 ComplexMatrix
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3720 max (const ComplexMatrix& a, const ComplexMatrix& b)
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3721 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3722 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3723 octave_idx_type nc = a.columns ();
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3724
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3725 if (nr != b.rows () || nc != b.columns ())
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
3726 (*current_liboctave_error_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
3727 ("two-arg max requires same size arguments");
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3728
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3729 EMPTY_RETURN_CHECK (ComplexMatrix);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3730
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3731 ComplexMatrix result (nr, nc);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3732
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3733 for (octave_idx_type j = 0; j < nc; j++)
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3734 {
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21317
diff changeset
3735 bool columns_are_real_only = true;
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5260
diff changeset
3736 for (octave_idx_type i = 0; i < nr; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3737 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3738 octave_quit ();
22274
edcad35c364f don't rely on std:: overloads of arg, conj, imag, and real for real args
John W. Eaton <jwe@octave.org>
parents: 22261
diff changeset
3739 if (octave::math::imag (a(i, j)) != 0.0 || octave::math::imag (b(i, j)) != 0.0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3740 {
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21317
diff changeset
3741 columns_are_real_only = false;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3742 break;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3743 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3744 }
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3745
22085
bf5fbf347aaf Avoid segfault with complex matrices using LAPACK (bug #46330).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents: 22044
diff changeset
3746 // FIXME: is it so much faster?
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3747 if (columns_are_real_only)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3748 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3749 for (octave_idx_type i = 0; i < nr; i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3750 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3751 octave_quit ();
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3752 result(i, j) = octave::math::max (octave::math::real (a(i, j)),
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
3753 octave::math::real (b(i, j)));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3754 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3755 }
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3756 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3757 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3758 for (octave_idx_type i = 0; i < nr; i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3759 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3760 octave_quit ();
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3761 result(i, j) = octave::math::max (a(i, j), b(i, j));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3762 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3763 }
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3764 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3765
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3766 return result;
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3767 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4192
diff changeset
3768
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
3769 ComplexMatrix linspace (const ComplexColumnVector& x1,
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
3770 const ComplexColumnVector& x2,
9653
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3771 octave_idx_type n)
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3772 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
3773 octave_idx_type m = x1.numel ();
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
3774
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
3775 if (x2.numel () != m)
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
3776 (*current_liboctave_error_handler)
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
3777 ("linspace: vectors must be of equal length");
9653
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3778
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3779 NoAlias<ComplexMatrix> retval;
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3780
20466
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3781 if (n < 1)
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3782 {
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3783 retval.clear (m, 0);
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3784 return retval;
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3785 }
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3786
9653
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3787 retval.clear (m, n);
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3788 for (octave_idx_type i = 0; i < m; i++)
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3789 retval(i, 0) = x1(i);
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3790
20466
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3791 // The last column is unused so temporarily store delta there
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
3792 Complex *delta = &retval(0, n-1);
9653
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3793 for (octave_idx_type i = 0; i < m; i++)
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3794 delta[i] = (x2(i) - x1(i)) / (n - 1.0);
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3795
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3796 for (octave_idx_type j = 1; j < n-1; j++)
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3797 for (octave_idx_type i = 0; i < m; i++)
9658
3429c956de6f extend linspace & fix up liboctave rewrite
Jaroslav Hajek <highegg@gmail.com>
parents: 9653
diff changeset
3798 retval(i, j) = x1(i) + static_cast<double> (j)*delta[i];
9653
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3799
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3800 for (octave_idx_type i = 0; i < m; i++)
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3801 retval(i, n-1) = x2(i);
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3802
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3803 return retval;
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3804 }
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3805
9578
7dafdb8b062f refactor comparison ops implementations
Jaroslav Hajek <highegg@gmail.com>
parents: 9553
diff changeset
3806 MS_CMP_OPS (ComplexMatrix, Complex)
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9528
diff changeset
3807 MS_BOOL_OPS (ComplexMatrix, Complex)
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
3808
9578
7dafdb8b062f refactor comparison ops implementations
Jaroslav Hajek <highegg@gmail.com>
parents: 9553
diff changeset
3809 SM_CMP_OPS (Complex, ComplexMatrix)
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9528
diff changeset
3810 SM_BOOL_OPS (Complex, ComplexMatrix)
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
3811
9578
7dafdb8b062f refactor comparison ops implementations
Jaroslav Hajek <highegg@gmail.com>
parents: 9553
diff changeset
3812 MM_CMP_OPS (ComplexMatrix, ComplexMatrix)
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9528
diff changeset
3813 MM_BOOL_OPS (ComplexMatrix, ComplexMatrix)