annotate liboctave/array/dMatrix.cc @ 24195:d3dc76efb38b

Return correct value for pinv of zero vectors and scalars (bug #51246). CMatrix.cc, dMatrix.cc (pseudo_inverse): Change any computed tolerance of 0 to std::numeric_limits<double>::min() so that zero values are later dropped from calculation. fCMatrix.cc, fMatrix.cc (pseudo_inverse): Change calculation of default tolerance to us the <float> version of std::numeric_limits::epsilon () rather than the double version. Change any computed tolerance of 0 to std::numeric_limits<float>::min() so that zero values are later dropped from calculation. * pinv.cc (Fpinv): Add BIST tests.
author Rik <rik@octave.org>
date Fri, 03 Nov 2017 10:03:36 -0700
parents bc0aa7e18c96
children 2b769c242188
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1 /*
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2
23219
3ac9f9ecfae5 maint: Update copyright dates.
John W. Eaton <jwe@octave.org>
parents: 23083
diff changeset
3 Copyright (C) 1994-2017 John W. Eaton
7803
9bcb31cc56be add missing copyright
Jaroslav Hajek <highegg@gmail.com>
parents: 7801
diff changeset
4 Copyright (C) 2008 Jaroslav Hajek
9601
a9b37bae1802 add a couple of missing copyright statements
Jaroslav Hajek <highegg@gmail.com>
parents: 9578
diff changeset
5 Copyright (C) 2009 VZLU Prague, a.s.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
6
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
7 This file is part of Octave.
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
8
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
9 Octave is free software; you can redistribute it and/or modify it
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22598
diff changeset
10 under the terms of the GNU General Public License as published by
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22598
diff changeset
11 the Free Software Foundation; either version 3 of the License, or
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22598
diff changeset
12 (at your option) any later version.
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22598
diff changeset
13
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22598
diff changeset
14 Octave is distributed in the hope that it will be useful, but
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22598
diff changeset
15 WITHOUT ANY WARRANTY; without even the implied warranty of
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22598
diff changeset
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22598
diff changeset
17 GNU General Public License for more details.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
18
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
19 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: 6926
diff changeset
20 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6926
diff changeset
21 <http://www.gnu.org/licenses/>.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
22
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
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21723
diff changeset
25 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21273
diff changeset
26 # include "config.h"
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
27 #endif
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
28
23443
3f1bf237908b maint: Eliminate <cfloat.h> header from liboctave files.
Rik <rik@octave.org>
parents: 23433
diff changeset
29 #include <algorithm>
3503
d14c483b3c12 [project @ 2000-02-01 04:06:07 by jwe]
jwe
parents: 3480
diff changeset
30 #include <iostream>
23443
3f1bf237908b maint: Eliminate <cfloat.h> header from liboctave files.
Rik <rik@octave.org>
parents: 23433
diff changeset
31 #include <limits>
1367
9f9131a8d706 [project @ 1995-09-06 00:07:03 by jwe]
jwe
parents: 1365
diff changeset
32
4669
334a27c8f453 [project @ 2003-11-26 07:02:42 by jwe]
jwe
parents: 4634
diff changeset
33 #include "Array-util.h"
23443
3f1bf237908b maint: Eliminate <cfloat.h> header from liboctave files.
Rik <rik@octave.org>
parents: 23433
diff changeset
34 #include "CColVector.h"
3f1bf237908b maint: Eliminate <cfloat.h> header from liboctave files.
Rik <rik@octave.org>
parents: 23433
diff changeset
35 #include "CMatrix.h"
3f1bf237908b maint: Eliminate <cfloat.h> header from liboctave files.
Rik <rik@octave.org>
parents: 23433
diff changeset
36 #include "DET.h"
3f1bf237908b maint: Eliminate <cfloat.h> header from liboctave files.
Rik <rik@octave.org>
parents: 23433
diff changeset
37 #include "PermMatrix.h"
3f1bf237908b maint: Eliminate <cfloat.h> header from liboctave files.
Rik <rik@octave.org>
parents: 23433
diff changeset
38 #include "boolMatrix.h"
2317
8c09c04f7747 [project @ 1996-07-14 22:30:15 by jwe]
jwe
parents: 1993
diff changeset
39 #include "byte-swap.h"
19269
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"
23443
3f1bf237908b maint: Eliminate <cfloat.h> header from liboctave files.
Rik <rik@octave.org>
parents: 23433
diff changeset
42 #include "dColVector.h"
19269
65554f5847ac don't include oct-locbuf.h in header files unnecessarily
John W. Eaton <jwe@octave.org>
parents: 19065
diff changeset
43 #include "dDiagMatrix.h"
23443
3f1bf237908b maint: Eliminate <cfloat.h> header from liboctave files.
Rik <rik@octave.org>
parents: 23433
diff changeset
44 #include "dMatrix.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 "dRowVector.h"
7503
8c32f95c2639 convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents: 7488
diff changeset
46 #include "functor.h"
22322
93b3cdd36854 move most f77 function decls to separate header files
John W. Eaton <jwe@octave.org>
parents: 22317
diff changeset
47 #include "lo-blas-proto.h"
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
48 #include "lo-error.h"
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
49 #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
50 #include "lo-lapack-proto.h"
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
51 #include "lo-mappers.h"
1968
a2e206524aa0 [project @ 1996-02-17 02:54:24 by jwe]
jwe
parents: 1959
diff changeset
52 #include "lo-utils.h"
3176
fccab8e7d35f [project @ 1998-05-18 20:33:31 by jwe]
jwe
parents: 3145
diff changeset
53 #include "mx-dm-m.h"
1367
9f9131a8d706 [project @ 1995-09-06 00:07:03 by jwe]
jwe
parents: 1365
diff changeset
54 #include "mx-inlines.cc"
23443
3f1bf237908b maint: Eliminate <cfloat.h> header from liboctave files.
Rik <rik@octave.org>
parents: 23433
diff changeset
55 #include "mx-m-dm.h"
8774
b756ce0002db split implementation and interface in mx-op-defs and MArray-defs
Jaroslav Hajek <highegg@gmail.com>
parents: 8743
diff changeset
56 #include "mx-op-defs.h"
1650
23aa282707e8 [project @ 1995-12-20 06:53:12 by jwe]
jwe
parents: 1574
diff changeset
57 #include "oct-cmplx.h"
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9469
diff changeset
58 #include "oct-fftw.h"
22322
93b3cdd36854 move most f77 function decls to separate header files
John W. Eaton <jwe@octave.org>
parents: 22317
diff changeset
59 #include "oct-locbuf.h"
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
60 #include "oct-norm.h"
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
61 #include "quit.h"
23443
3f1bf237908b maint: Eliminate <cfloat.h> header from liboctave files.
Rik <rik@octave.org>
parents: 23433
diff changeset
62 #include "schur.h"
3f1bf237908b maint: Eliminate <cfloat.h> header from liboctave files.
Rik <rik@octave.org>
parents: 23433
diff changeset
63 #include "svd.h"
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
64
1360
7eb93d12654c [project @ 1995-09-05 21:51:54 by jwe]
jwe
parents: 1321
diff changeset
65 // Matrix class.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
66
2349
b369227ce3d2 [project @ 1996-07-27 07:59:20 by jwe]
jwe
parents: 2317
diff changeset
67 Matrix::Matrix (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
68 : NDArray (rv)
22417
48c00363dc74 maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents: 22402
diff changeset
69 { }
2349
b369227ce3d2 [project @ 1996-07-27 07:59:20 by jwe]
jwe
parents: 2317
diff changeset
70
b369227ce3d2 [project @ 1996-07-27 07:59:20 by jwe]
jwe
parents: 2317
diff changeset
71 Matrix::Matrix (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
72 : NDArray (cv)
22417
48c00363dc74 maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents: 22402
diff changeset
73 { }
2349
b369227ce3d2 [project @ 1996-07-27 07:59:20 by jwe]
jwe
parents: 2317
diff changeset
74
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
75 Matrix::Matrix (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
76 : NDArray (a.dims (), 0.0)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
77 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
78 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
79 elem (i, i) = a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
80 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
81
19391
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19321
diff changeset
82 Matrix::Matrix (const MDiagArray2<double>& a)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19321
diff changeset
83 : NDArray (a.dims (), 0.0)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19321
diff changeset
84 {
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19321
diff changeset
85 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: 19321
diff changeset
86 elem (i, i) = a.elem (i, i);
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19321
diff changeset
87 }
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19321
diff changeset
88
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19321
diff changeset
89 Matrix::Matrix (const DiagArray2<double>& a)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19321
diff changeset
90 : NDArray (a.dims (), 0.0)
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19321
diff changeset
91 {
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19321
diff changeset
92 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: 19321
diff changeset
93 elem (i, i) = a.elem (i, i);
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19321
diff changeset
94 }
385499581a5e allow disabling of permutation and diagonal matrices
John W. Eaton <jwe@octave.org>
parents: 19321
diff changeset
95
8367
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8337
diff changeset
96 Matrix::Matrix (const PermMatrix& a)
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
97 : NDArray (a.dims (), 0.0)
8367
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8337
diff changeset
98 {
18849
aa9ca67f09fb make all permutation matrices column permutations (bug #42418)
David Spies <dnspies@gmail.com>
parents: 18632
diff changeset
99 const Array<octave_idx_type> ia (a.col_perm_vec ());
8367
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8337
diff changeset
100 octave_idx_type len = a.rows ();
18849
aa9ca67f09fb make all permutation matrices column permutations (bug #42418)
David Spies <dnspies@gmail.com>
parents: 18632
diff changeset
101 for (octave_idx_type i = 0; i < len; i++)
aa9ca67f09fb make all permutation matrices column permutations (bug #42418)
David Spies <dnspies@gmail.com>
parents: 18632
diff changeset
102 elem (ia(i), i) = 1.0;
8367
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8337
diff changeset
103 }
445d27d79f4e support permutation matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents: 8337
diff changeset
104
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
105 // 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
106
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
107 Matrix::Matrix (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
108 : NDArray (a)
22417
48c00363dc74 maint: Use '{ }' for empty function bodies in C++.
Rik <rik@octave.org>
parents: 22402
diff changeset
109 { }
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
110
1574
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
111 Matrix::Matrix (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
112 : NDArray (a.dims ())
1574
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
113 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
114 for (octave_idx_type i = 0; i < a.rows (); i++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
115 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
116 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
117 }
dd7d27461567 [project @ 1995-10-19 04:34:20 by jwe]
jwe
parents: 1561
diff changeset
118
2385
170053c0f75e [project @ 1996-10-12 18:23:01 by jwe]
jwe
parents: 2354
diff changeset
119 bool
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
120 Matrix::operator == (const Matrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
121 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
122 if (rows () != a.rows () || cols () != a.cols ())
2385
170053c0f75e [project @ 1996-10-12 18:23:01 by jwe]
jwe
parents: 2354
diff changeset
123 return false;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
124
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
125 return mx_inline_equal (numel (), data (), a.data ());
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
126 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
127
2385
170053c0f75e [project @ 1996-10-12 18:23:01 by jwe]
jwe
parents: 2354
diff changeset
128 bool
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
129 Matrix::operator != (const Matrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
130 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
131 return !(*this == a);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
132 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
133
3354
87721841efd7 [project @ 1999-11-17 19:06:11 by jwe]
jwe
parents: 3331
diff changeset
134 bool
23596
b63c3a09aee7 maint: Deprecate is_symmetric and replace with issymmetric.
Rik <rik@octave.org>
parents: 23594
diff changeset
135 Matrix::issymmetric (void) const
3354
87721841efd7 [project @ 1999-11-17 19:06:11 by jwe]
jwe
parents: 3331
diff changeset
136 {
23593
a8361bc2361a maint: Deprecate is_square and replace with issquare.
Rik <rik@octave.org>
parents: 23461
diff changeset
137 if (issquare () && rows () > 0)
3354
87721841efd7 [project @ 1999-11-17 19:06:11 by jwe]
jwe
parents: 3331
diff changeset
138 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
139 for (octave_idx_type i = 0; i < rows (); i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
140 for (octave_idx_type j = i+1; j < cols (); j++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
141 if (elem (i, j) != elem (j, i))
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
142 return false;
3354
87721841efd7 [project @ 1999-11-17 19:06:11 by jwe]
jwe
parents: 3331
diff changeset
143
87721841efd7 [project @ 1999-11-17 19:06:11 by jwe]
jwe
parents: 3331
diff changeset
144 return true;
87721841efd7 [project @ 1999-11-17 19:06:11 by jwe]
jwe
parents: 3331
diff changeset
145 }
87721841efd7 [project @ 1999-11-17 19:06:11 by jwe]
jwe
parents: 3331
diff changeset
146
87721841efd7 [project @ 1999-11-17 19:06:11 by jwe]
jwe
parents: 3331
diff changeset
147 return false;
87721841efd7 [project @ 1999-11-17 19:06:11 by jwe]
jwe
parents: 3331
diff changeset
148 }
87721841efd7 [project @ 1999-11-17 19:06:11 by jwe]
jwe
parents: 3331
diff changeset
149
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
150 Matrix&
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
151 Matrix::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
152 {
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10314
diff changeset
153 Array<double>::insert (a, r, c);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
154 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
155 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
156
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
157 Matrix&
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
158 Matrix::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
159 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
160 octave_idx_type a_len = a.numel ();
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
161
1698
0892abda7553 [project @ 1996-01-07 02:28:21 by jwe]
jwe
parents: 1697
diff changeset
162 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
163 (*current_liboctave_error_handler) ("range error for insert");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
164
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
165 if (a_len > 0)
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
166 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
167 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
168
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
169 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
170 xelem (r, c+i) = a.elem (i);
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
171 }
458
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;
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
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
176 Matrix&
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
177 Matrix::insert (const ColumnVector& a, octave_idx_type r, octave_idx_type c)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
178 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
179 octave_idx_type a_len = a.numel ();
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
180
1698
0892abda7553 [project @ 1996-01-07 02:28:21 by jwe]
jwe
parents: 1697
diff changeset
181 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
182 (*current_liboctave_error_handler) ("range error for insert");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
183
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
184 if (a_len > 0)
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
185 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
186 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
187
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
188 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
189 xelem (r+i, c) = a.elem (i);
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
190 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
191
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
192 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
193 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
194
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
195 Matrix&
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
196 Matrix::insert (const DiagMatrix& a, octave_idx_type r, octave_idx_type c)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
197 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
198 octave_idx_type a_nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
199 octave_idx_type a_nc = a.cols ();
1697
597c3ca9f6e8 [project @ 1996-01-07 02:13:24 by jwe]
jwe
parents: 1657
diff changeset
200
1698
0892abda7553 [project @ 1996-01-07 02:28:21 by jwe]
jwe
parents: 1697
diff changeset
201 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
202 (*current_liboctave_error_handler) ("range error for insert");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
203
1697
597c3ca9f6e8 [project @ 1996-01-07 02:13:24 by jwe]
jwe
parents: 1657
diff changeset
204 fill (0.0, r, c, r + a_nr - 1, c + a_nc - 1);
597c3ca9f6e8 [project @ 1996-01-07 02:13:24 by jwe]
jwe
parents: 1657
diff changeset
205
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
206 octave_idx_type a_len = a.length ();
4316
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 if (a_len > 0)
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
209 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
210 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
211
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
212 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
213 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
214 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
215
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
216 return *this;
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
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
219 Matrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
220 Matrix::fill (double val)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
221 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
222 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
223 octave_idx_type nc = cols ();
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
224
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
225 if (nr > 0 && nc > 0)
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
226 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
227 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
228
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
229 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
230 for (octave_idx_type i = 0; i < nr; i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
231 xelem (i, j) = val;
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 Matrix&
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
238 Matrix::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
239 octave_idx_type r2, octave_idx_type c2)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
240 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
241 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
242 octave_idx_type nc = cols ();
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
243
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
244 if (r1 < 0 || r2 < 0 || c1 < 0 || c2 < 0
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
245 || 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
246 (*current_liboctave_error_handler) ("range error for fill");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
247
17663
7975d75f933c Use std::swap in liboctave instead of temporary variable.
Rik <rik@octave.org>
parents: 16300
diff changeset
248 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
249 if (c1 > c2) { std::swap (c1, c2); }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
250
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
251 if (r2 >= r1 && c2 >= c1)
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
252 {
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
253 make_unique ();
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
254
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
255 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
256 for (octave_idx_type i = r1; i <= r2; i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
257 xelem (i, j) = val;
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
258 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
259
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
260 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
261 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
262
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
263 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
264 Matrix::append (const Matrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
265 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
266 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
267 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
268 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
269 (*current_liboctave_error_handler) ("row dimension mismatch for append");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
270
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
271 octave_idx_type nc_insert = nc;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
272 Matrix retval (nr, nc + a.cols ());
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
273 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
274 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
275 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
276 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
277
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
278 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
279 Matrix::append (const RowVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
280 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
281 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
282 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
283 if (nr != 1)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
284 (*current_liboctave_error_handler) ("row dimension mismatch for append");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
285
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
286 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
287 Matrix retval (nr, nc + a.numel ());
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
288 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
289 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
290 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
291 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
292
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
293 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
294 Matrix::append (const ColumnVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
295 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
296 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
297 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
298 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
299 (*current_liboctave_error_handler) ("row dimension mismatch for append");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
300
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
301 octave_idx_type nc_insert = nc;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
302 Matrix retval (nr, nc + 1);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
303 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
304 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
305 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
306 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
307
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
308 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
309 Matrix::append (const DiagMatrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
310 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
311 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
312 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
313 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
314 (*current_liboctave_error_handler) ("row dimension mismatch for append");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
315
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
316 octave_idx_type nc_insert = nc;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
317 Matrix retval (nr, nc + a.cols ());
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
318 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
319 retval.insert (a, 0, nc_insert);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
320 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
321 }
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 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
324 Matrix::stack (const Matrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
325 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
326 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
327 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
328 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
329 (*current_liboctave_error_handler) ("column dimension mismatch for stack");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
330
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
331 octave_idx_type nr_insert = nr;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
332 Matrix retval (nr + a.rows (), nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
333 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
334 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
335 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
336 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
337
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
338 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
339 Matrix::stack (const RowVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
340 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
341 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
342 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
343 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
344 (*current_liboctave_error_handler) ("column dimension mismatch for stack");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
345
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
346 octave_idx_type nr_insert = nr;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
347 Matrix retval (nr + 1, nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
348 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
349 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
350 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
351 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
352
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
353 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
354 Matrix::stack (const ColumnVector& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
355 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
356 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
357 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
358 if (nc != 1)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
359 (*current_liboctave_error_handler) ("column dimension mismatch for stack");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
360
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
361 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
362 Matrix retval (nr + a.numel (), nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
363 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
364 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
365 return retval;
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
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
368 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
369 Matrix::stack (const DiagMatrix& a) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
370 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
371 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
372 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
373 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
374 (*current_liboctave_error_handler) ("column dimension mismatch for stack");
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
375
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
376 octave_idx_type nr_insert = nr;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
377 Matrix retval (nr + a.rows (), nc);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
378 retval.insert (*this, 0, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
379 retval.insert (a, nr_insert, 0);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
380 return retval;
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
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
383 Matrix
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
384 real (const ComplexMatrix& a)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
385 {
10363
a0728e81ed25 improve diag matrix interface & implementation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
386 return do_mx_unary_op<double, Complex> (a, mx_inline_real);
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
387 }
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
388
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
389 Matrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
390 imag (const ComplexMatrix& a)
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
391 {
10363
a0728e81ed25 improve diag matrix interface & implementation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
392 return do_mx_unary_op<double, Complex> (a, mx_inline_imag);
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
393 }
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
394
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
395 Matrix
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
396 Matrix::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
397 octave_idx_type r2, octave_idx_type c2) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
398 {
17663
7975d75f933c Use std::swap in liboctave instead of temporary variable.
Rik <rik@octave.org>
parents: 16300
diff changeset
399 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
400 if (c1 > c2) { std::swap (c1, c2); }
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
401
10805
8c858a1a2079 simplify Matrix::extract
Jaroslav Hajek <highegg@gmail.com>
parents: 10630
diff changeset
402 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
403 }
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
404
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
405 Matrix
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
406 Matrix::extract_n (octave_idx_type r1, octave_idx_type c1, octave_idx_type nr,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
407 octave_idx_type nc) const
4316
236c10efcde2 [project @ 2003-02-10 21:57:15 by jwe]
jwe
parents: 4309
diff changeset
408 {
10806
7c542263a92a omissions from last two patches
Jaroslav Hajek <highegg@gmail.com>
parents: 10805
diff changeset
409 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
410 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
411
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
412 // extract row or column i.
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
413
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
414 RowVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
415 Matrix::row (octave_idx_type i) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
416 {
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10314
diff changeset
417 return index (idx_vector (i), idx_vector::colon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
418 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
419
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
420 ColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
421 Matrix::column (octave_idx_type i) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
422 {
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10314
diff changeset
423 return index (idx_vector::colon, idx_vector (i));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
424 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
425
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
426 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
427 Matrix::inverse (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
428 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
429 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
430 double rcon;
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
431 MatrixType mattype (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
432 return inverse (mattype, info, rcon, 0, 0);
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
433 }
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
434
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
435 Matrix
6479
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
436 Matrix::inverse (octave_idx_type& info) const
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
437 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
438 double rcon;
6479
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
439 MatrixType mattype (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
440 return inverse (mattype, info, rcon, 0, 0);
6479
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
441 }
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
442
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
443 Matrix
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
444 Matrix::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: 21301
diff changeset
445 bool calc_cond) const
6479
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
446 {
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
447 MatrixType mattype (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
448 return inverse (mattype, info, rcon, force, calc_cond);
6479
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
449 }
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
450
2ee8293554a3 [project @ 2007-04-03 15:30:58 by jwe]
jwe
parents: 6390
diff changeset
451 Matrix
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
452 Matrix::inverse (MatrixType& mattype) const
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
453 {
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
454 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
455 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
456 return inverse (mattype, info, rcon, 0, 0);
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
457 }
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
458
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
459 Matrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
460 Matrix::inverse (MatrixType& mattype, octave_idx_type& info) const
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
461 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
462 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
463 return inverse (mattype, info, rcon, 0, 0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
464 }
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 Matrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
467 Matrix::tinverse (MatrixType& mattype, octave_idx_type& info, double& rcon,
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
468 bool force, bool calc_cond) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
469 {
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
470 Matrix retval;
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
471
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
472 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
473 F77_INT nc = octave::to_f77_int (cols ());
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
474
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
475 if (nr != nc || nr == 0 || nc == 0)
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
476 (*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
477
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
478 int typ = mattype.type ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
479 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
480 char udiag = 'N';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
481 retval = *this;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
482 double *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
483
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
484 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
485
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
486 F77_XFCN (dtrtri, DTRTRI, (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
487 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
488 nr, 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
489 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
490 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
491
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
492 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
493
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
494 // 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
495 rcon = 0.0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
496 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
497 info = -1;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
498 else if (calc_cond)
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
499 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
500 F77_INT dtrcon_info = 0;
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
501 char job = '1';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
502
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
503 OCTAVE_LOCAL_BUFFER (double, work, 3 * 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
504 OCTAVE_LOCAL_BUFFER (F77_INT, iwork, nr);
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
505
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
506 F77_XFCN (dtrcon, DTRCON, (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
507 F77_CONST_CHAR_ARG2 (&uplo, 1),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
508 F77_CONST_CHAR_ARG2 (&udiag, 1),
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
509 nr, tmp_data, nr, rcon,
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
510 work, iwork, dtrcon_info
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
511 F77_CHAR_ARG_LEN (1)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
512 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
513 F77_CHAR_ARG_LEN (1)));
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
514
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
515 if (dtrcon_info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
516 info = -1;
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
517 }
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
518
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
519 if (info == -1 && ! force)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
520 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
521
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
522 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
523 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
524
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
525 Matrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
526 Matrix::finverse (MatrixType& mattype, octave_idx_type& info, double& rcon,
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
527 bool force, bool calc_cond) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
528 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
529 Matrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
530
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
531 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
532 F77_INT nc = octave::to_f77_int (cols ());
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
533
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
534 if (nr != nc || nr == 0 || nc == 0)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
535 (*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
536
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
537 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
538 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
539
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
540 retval = *this;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
541 double *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
542
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
543 Array<double> 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
544 F77_INT lwork = -1;
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
545
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
546 F77_INT tmp_info = 0;
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
547
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
548 // 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
549 F77_XFCN (dgetri, DGETRI, (nc, 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
550 z.fortran_vec (), lwork, 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
551
24035
bc0aa7e18c96 fix possible array bounds error when calculating inverse (bug #49235)
Mike Miller <mtmiller@octave.org>
parents: 23807
diff changeset
552 info = tmp_info;
bc0aa7e18c96 fix possible array bounds error when calculating inverse (bug #49235)
Mike Miller <mtmiller@octave.org>
parents: 23807
diff changeset
553
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
554 lwork = static_cast<F77_INT> (z(0));
24035
bc0aa7e18c96 fix possible array bounds error when calculating inverse (bug #49235)
Mike Miller <mtmiller@octave.org>
parents: 23807
diff changeset
555 lwork = (lwork < 4 * nc ? 4 * nc : lwork);
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
556 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
557 double *pz = z.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
558
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
559 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
560 tmp_info = 0;
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
561
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
562 // Calculate the norm of the matrix, for later use.
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
563 double anorm = 0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
564 if (calc_cond)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
565 anorm = retval.abs ().sum ().row (static_cast<octave_idx_type>(0))
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
566 .max ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
567
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
568 F77_XFCN (dgetrf, DGETRF, (nc, nc, tmp_data, nr, pipvt, 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
569
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
570 info = tmp_info;
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
571
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
572 // 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
573 rcon = 0.0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
574 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
575 info = -1;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
576 else if (calc_cond)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
577 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
578 F77_INT dgecon_info = 0;
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
579
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
580 // Now calculate 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
581 char job = '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
582 Array<F77_INT> iz (dim_vector (nc, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
583 F77_INT *piz = iz.fortran_vec ();
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
584 F77_XFCN (dgecon, DGECON, (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
585 nc, tmp_data, nr, anorm,
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
586 rcon, pz, piz, dgecon_info
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
587 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
588
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
589 if (dgecon_info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
590 info = -1;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
591 }
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
592
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
593 if (info == -1 && ! force)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
594 retval = *this; // Restore matrix contents.
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
595 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
596 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
597 F77_INT dgetri_info = 0;
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
598
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
599 F77_XFCN (dgetri, DGETRI, (nc, tmp_data, nr, pipvt,
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
600 pz, lwork, dgetri_info));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
601
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
602 if (dgetri_info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
603 info = -1;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
604 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
605
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
606 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
607 mattype.mark_as_rectangular ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
608
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
609 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
610 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
611
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
612 Matrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
613 Matrix::inverse (MatrixType& mattype, octave_idx_type& info, double& rcon,
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
614 bool force, bool calc_cond) const
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
615 {
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
616 int typ = mattype.type (false);
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
617 Matrix ret;
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
618
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
619 if (typ == MatrixType::Unknown)
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
620 typ = mattype.type (*this);
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
621
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
622 if (typ == MatrixType::Upper || typ == MatrixType::Lower)
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
623 ret = tinverse (mattype, info, rcon, force, calc_cond);
6840
2f17d5556756 [project @ 2007-08-29 08:37:47 by dbateman]
dbateman
parents: 6699
diff changeset
624 else
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
625 {
23594
af5b813503cb maint: Deprecate is_hermitian and replace with ishermitian.
Rik <rik@octave.org>
parents: 23593
diff changeset
626 if (mattype.ishermitian ())
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
627 {
22317
6ca3acf5fad8 move some new numeric classes to namespace octave::math
John W. Eaton <jwe@octave.org>
parents: 22274
diff changeset
628 octave::math::chol<Matrix> chol (*this, info, true, calc_cond);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
629 if (info == 0)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
630 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
631 if (calc_cond)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
632 rcon = chol.rcond ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
633 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
634 rcon = 1.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
635 ret = chol.inverse ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
636 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
637 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
638 mattype.mark_as_unsymmetric ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
639 }
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
640
23594
af5b813503cb maint: Deprecate is_hermitian and replace with ishermitian.
Rik <rik@octave.org>
parents: 23593
diff changeset
641 if (! mattype.ishermitian ())
15018
3d8ace26c5b4 maint: Use Octave coding conventions for cuddled parentheses in liboctave/.
Rik <rik@octave.org>
parents: 14846
diff changeset
642 ret = finverse (mattype, info, rcon, force, calc_cond);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
643
23594
af5b813503cb maint: Deprecate is_hermitian and replace with ishermitian.
Rik <rik@octave.org>
parents: 23593
diff changeset
644 if ((calc_cond || mattype.ishermitian ()) && rcon == 0.
22849
1d242ae72240 Return 0 for special case of scalar Inf input to inverse (bug #49690).
Rik <rik@octave.org>
parents: 22848
diff changeset
645 && ! (numel () == 1))
1d242ae72240 Return 0 for special case of scalar Inf input to inverse (bug #49690).
Rik <rik@octave.org>
parents: 22848
diff changeset
646 ret = Matrix (rows (), columns (),
1d242ae72240 Return 0 for special case of scalar Inf input to inverse (bug #49690).
Rik <rik@octave.org>
parents: 22848
diff changeset
647 octave::numeric_limits<double>::Inf ());
6207
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
648 }
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
649
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
650 return ret;
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
651 }
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
652
3c92b8d892dd [project @ 2006-12-06 20:19:14 by dbateman]
dbateman
parents: 6162
diff changeset
653 Matrix
4384
f1fcc371e5ef [project @ 2003-04-23 19:51:57 by jwe]
jwe
parents: 4330
diff changeset
654 Matrix::pseudo_inverse (double tol) const
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
655 {
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
656 octave::math::svd<Matrix> result (*this,
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
657 octave::math::svd<Matrix>::Type::economy);
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
658
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
659 DiagMatrix S = result.singular_values ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
660 Matrix U = result.left_singular_matrix ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
661 Matrix V = result.right_singular_matrix ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
662
15448
0a0912a9ab6e Replace deprecated DiagArray2<T>::diag calls with DiagArray2<T>::extract_diag
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15383
diff changeset
663 ColumnVector sigma = S.extract_diag ();
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
664
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
665 octave_idx_type r = sigma.numel () - 1;
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
666 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
667 octave_idx_type nc = cols ();
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
668
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
669 if (tol <= 0.0)
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
670 {
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
671 if (nr > nc)
15220
61822c866ba1 use std::numeric_limits<T>::epsilon in C++ code
John W. Eaton <jwe@octave.org>
parents: 15212
diff changeset
672 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
673 else
15220
61822c866ba1 use std::numeric_limits<T>::epsilon in C++ code
John W. Eaton <jwe@octave.org>
parents: 15212
diff changeset
674 tol = nc * sigma.elem (0) * std::numeric_limits<double>::epsilon ();
24195
d3dc76efb38b Return correct value for pinv of zero vectors and scalars (bug #51246).
Rik <rik@octave.org>
parents: 24035
diff changeset
675
d3dc76efb38b Return correct value for pinv of zero vectors and scalars (bug #51246).
Rik <rik@octave.org>
parents: 24035
diff changeset
676 if (tol == 0)
d3dc76efb38b Return correct value for pinv of zero vectors and scalars (bug #51246).
Rik <rik@octave.org>
parents: 24035
diff changeset
677 tol = std::numeric_limits<double>::min ();
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
678 }
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
679
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
680 while (r >= 0 && sigma.elem (r) < tol)
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
681 r--;
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
682
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
683 if (r < 0)
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
684 return Matrix (nc, nr, 0.0);
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
685 else
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
686 {
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
687 Matrix 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
688 DiagMatrix D = DiagMatrix (sigma.extract (0, r)).inverse ();
740
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
689 Matrix Vr = V.extract (0, 0, nc-1, r);
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
690 return Vr * D * Ur.transpose ();
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
691 }
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
692 }
d8295febb0df [project @ 1994-09-30 14:42:37 by jwe]
jwe
parents: 677
diff changeset
693
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9469
diff changeset
694 #if defined (HAVE_FFTW)
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
695
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
696 ComplexMatrix
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
697 Matrix::fourier (void) const
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
698 {
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
699 size_t nr = rows ();
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
700 size_t nc = cols ();
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
701
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
702 ComplexMatrix retval (nr, nc);
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
703
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
704 size_t npts, nsamples;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
705
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
706 if (nr == 1 || nc == 1)
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
707 {
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23449
diff changeset
708 npts = (nr > nc ? nr : nc);
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
709 nsamples = 1;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
710 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
711 else
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
712 {
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
713 npts = nr;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
714 nsamples = nc;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
715 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
716
4773
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
717 const double *in (fortran_vec ());
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
718 Complex *out (retval.fortran_vec ());
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
719
23058
5839d16828cb move fftw classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22988
diff changeset
720 octave::fftw::fft (in, out, npts, nsamples);
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
721
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
722 return retval;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
723 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
724
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
725 ComplexMatrix
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
726 Matrix::ifourier (void) const
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
727 {
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
728 size_t nr = rows ();
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
729 size_t nc = cols ();
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
730
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
731 ComplexMatrix retval (nr, nc);
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
732
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
733 size_t npts, nsamples;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
734
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
735 if (nr == 1 || nc == 1)
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
736 {
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23449
diff changeset
737 npts = (nr > nc ? nr : nc);
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
738 nsamples = 1;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
739 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
740 else
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
741 {
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
742 npts = nr;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
743 nsamples = nc;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
744 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
745
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
746 ComplexMatrix tmp (*this);
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
747 Complex *in (tmp.fortran_vec ());
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
748 Complex *out (retval.fortran_vec ());
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
749
23058
5839d16828cb move fftw classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22988
diff changeset
750 octave::fftw::ifft (in, out, npts, nsamples);
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
751
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
752 return retval;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
753 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
754
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
755 ComplexMatrix
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
756 Matrix::fourier2d (void) const
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
757 {
20218
b2100e1659ac maint: Use cuddled parentheses when indexing dimension_vectors.
Rik <rik@octave.org>
parents: 19864
diff changeset
758 dim_vector dv (rows (), cols ());
4773
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
759
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
760 const double *in = fortran_vec ();
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
761 ComplexMatrix retval (rows (), cols ());
23058
5839d16828cb move fftw classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22988
diff changeset
762 octave::fftw::fftNd (in, retval.fortran_vec (), 2, dv);
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
763
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
764 return retval;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
765 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
766
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
767 ComplexMatrix
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
768 Matrix::ifourier2d (void) const
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
769 {
20218
b2100e1659ac maint: Use cuddled parentheses when indexing dimension_vectors.
Rik <rik@octave.org>
parents: 19864
diff changeset
770 dim_vector dv (rows (), cols ());
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
771
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
772 ComplexMatrix retval (*this);
4773
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
773 Complex *out (retval.fortran_vec ());
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
774
23058
5839d16828cb move fftw classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22988
diff changeset
775 octave::fftw::ifftNd (out, out, 2, dv);
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
776
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
777 return retval;
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
778 }
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
779
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
780 #else
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
781
22322
93b3cdd36854 move most f77 function decls to separate header files
John W. Eaton <jwe@octave.org>
parents: 22317
diff changeset
782 #include "lo-fftpack-proto.h"
9523
0ce82753dd72 more configure changes for libraries
John W. Eaton <jwe@octave.org>
parents: 9469
diff changeset
783
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
784 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
785 Matrix::fourier (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
786 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
787 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
788
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
789 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
790 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
791 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
792
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
793 F77_INT npts;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
794
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
795 if (nr == 1 || nc == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
796 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
797 npts = octave::to_f77_int (nr > nc ? nr : nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
798 nsamples = 1;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
799 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
800 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
801 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
802 npts = octave::to_f77_int (nr);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
803 nsamples = nc;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
804 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
805
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
806 octave_idx_type nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
807
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
808 Array<Complex> wsave (dim_vector (nn, 1));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
809 Complex *pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
810
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
811 retval = ComplexMatrix (*this);
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
812 Complex *tmp_data = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
813
22261
77c4d43e06d1 Use new macros for passing complex arguments to Fortran FFTPACK subroutines
Mike Miller <mtmiller@octave.org>
parents: 22204
diff changeset
814 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
815
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
816 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
817 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9812
diff changeset
818 octave_quit ();
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
819
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
820 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
821 F77_DBLE_CMPLX_ARG (pwsave));
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
822 }
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
823
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
824 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
825 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
826
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
827 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
828 Matrix::ifourier (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
829 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
830 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
831
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
832 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
833 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
834 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
835
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
836 F77_INT npts;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
837
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
838 if (nr == 1 || nc == 1)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
839 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
840 npts = octave::to_f77_int (nr > nc ? nr : nc);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
841 nsamples = 1;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
842 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
843 else
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
844 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
845 npts = octave::to_f77_int (nr);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
846 nsamples = nc;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
847 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
848
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
849 octave_idx_type nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
850
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
851 Array<Complex> wsave (dim_vector (nn, 1));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
852 Complex *pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
853
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
854 retval = ComplexMatrix (*this);
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
855 Complex *tmp_data = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
856
22261
77c4d43e06d1 Use new macros for passing complex arguments to Fortran FFTPACK subroutines
Mike Miller <mtmiller@octave.org>
parents: 22204
diff changeset
857 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
858
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
859 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
860 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9812
diff changeset
861 octave_quit ();
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
862
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
863 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
864 F77_DBLE_CMPLX_ARG (pwsave));
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
865 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
866
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
867 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
868 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
869
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
870 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
871 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
872
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
873 ComplexMatrix
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
874 Matrix::fourier2d (void) const
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
875 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
876 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
877
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
878 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
879 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
880
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
881 F77_INT npts, nsamples;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
882
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
883 if (nr == 1 || nc == 1)
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
884 {
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23449
diff changeset
885 npts = (nr > nc ? nr : nc);
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
886 nsamples = 1;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
887 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
888 else
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
889 {
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
890 npts = nr;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
891 nsamples = nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
892 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
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 nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
895
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
896 Array<Complex> wsave (dim_vector (nn, 1));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
897 Complex *pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
898
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
899 retval = ComplexMatrix (*this);
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
900 Complex *tmp_data = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
901
22261
77c4d43e06d1 Use new macros for passing complex arguments to Fortran FFTPACK subroutines
Mike Miller <mtmiller@octave.org>
parents: 22204
diff changeset
902 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
903
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
904 for (F77_INT j = 0; j < nsamples; j++)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
905 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9812
diff changeset
906 octave_quit ();
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
907
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
908 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
909 F77_DBLE_CMPLX_ARG (pwsave));
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
910 }
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
911
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
912 npts = nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
913 nsamples = nr;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
914 nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
915
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
916 wsave.resize (dim_vector (nn, 1));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
917 pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
918
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
919 Array<Complex> tmp (dim_vector (npts, 1));
4773
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
920 Complex *prow = tmp.fortran_vec ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
921
22261
77c4d43e06d1 Use new macros for passing complex arguments to Fortran FFTPACK subroutines
Mike Miller <mtmiller@octave.org>
parents: 22204
diff changeset
922 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
923
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
924 for (F77_INT j = 0; j < nsamples; j++)
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
925 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9812
diff changeset
926 octave_quit ();
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
927
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
928 for (F77_INT i = 0; i < npts; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
929 prow[i] = tmp_data[i*nr + j];
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
930
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
931 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
932 F77_DBLE_CMPLX_ARG (pwsave));
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
933
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
934 for (F77_INT i = 0; i < npts; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
935 tmp_data[i*nr + j] = prow[i];
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
936 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
937
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
938 return retval;
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
939 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
940
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
941 ComplexMatrix
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
942 Matrix::ifourier2d (void) const
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
943 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
944 ComplexMatrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
945
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
946 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
947 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
948
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
949 F77_INT npts, nsamples;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
950
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
951 if (nr == 1 || nc == 1)
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
952 {
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23449
diff changeset
953 npts = (nr > nc ? nr : nc);
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
954 nsamples = 1;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
955 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
956 else
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
957 {
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
958 npts = nr;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
959 nsamples = nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
960 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
961
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
962 F77_INT nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
963
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
964 Array<Complex> wsave (dim_vector (nn, 1));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
965 Complex *pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
966
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3580
diff changeset
967 retval = ComplexMatrix (*this);
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
968 Complex *tmp_data = retval.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
969
22261
77c4d43e06d1 Use new macros for passing complex arguments to Fortran FFTPACK subroutines
Mike Miller <mtmiller@octave.org>
parents: 22204
diff changeset
970 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
971
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
972 for (F77_INT j = 0; j < nsamples; j++)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
973 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9812
diff changeset
974 octave_quit ();
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
975
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
976 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
977 F77_DBLE_CMPLX_ARG (pwsave));
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
978 }
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
979
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
980 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
981 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
982
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
983 npts = nc;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
984 nsamples = nr;
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
985 nn = 4*npts+15;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
986
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
987 wsave.resize (dim_vector (nn, 1));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
988 pwsave = wsave.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
989
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
990 Array<Complex> tmp (dim_vector (npts, 1));
4773
ccfbd6047a54 [project @ 2004-02-16 19:02:32 by jwe]
jwe
parents: 4669
diff changeset
991 Complex *prow = tmp.fortran_vec ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
992
22261
77c4d43e06d1 Use new macros for passing complex arguments to Fortran FFTPACK subroutines
Mike Miller <mtmiller@octave.org>
parents: 22204
diff changeset
993 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
994
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
995 for (F77_INT j = 0; j < nsamples; j++)
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
996 {
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9812
diff changeset
997 octave_quit ();
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents: 4130
diff changeset
998
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
999 for (F77_INT i = 0; i < npts; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1000 prow[i] = tmp_data[i*nr + j];
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1001
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22327
diff changeset
1002 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
1003 F77_DBLE_CMPLX_ARG (pwsave));
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1004
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1005 for (F77_INT i = 0; i < npts; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1006 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
1007 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1008
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
1009 return retval;
677
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1010 }
01da6806197b [project @ 1994-09-08 04:43:13 by jwe]
jwe
parents: 533
diff changeset
1011
3827
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1012 #endif
ba548facf43b [project @ 2001-05-02 06:15:06 by jwe]
jwe
parents: 3769
diff changeset
1013
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1014 DET
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1015 Matrix::determinant (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1016 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
1017 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1018 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1019 return determinant (info, rcon, 0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1020 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1021
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1022 DET
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
1023 Matrix::determinant (octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1024 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1025 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1026 return determinant (info, rcon, 0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1027 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1028
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1029 DET
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
1030 Matrix::determinant (octave_idx_type& info, double& rcon, bool calc_cond) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1031 {
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1032 MatrixType mattype (*this);
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1033 return determinant (mattype, info, rcon, calc_cond);
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1034 }
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1035
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1036 DET
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1037 Matrix::determinant (MatrixType& mattype,
21719
ff054947d132 use bool instead of int for some logical flags
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
1038 octave_idx_type& info, double& rcon, bool calc_cond) const
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1039 {
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1040 DET retval (1.0);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1041
13828
f1b023fd098d always initialize info and rcon in Matrix determinant methods
John W. Eaton <jwe@octave.org>
parents: 13756
diff changeset
1042 info = 0;
f1b023fd098d always initialize info and rcon in Matrix determinant methods
John W. Eaton <jwe@octave.org>
parents: 13756
diff changeset
1043 rcon = 0.0;
f1b023fd098d always initialize info and rcon in Matrix determinant methods
John W. Eaton <jwe@octave.org>
parents: 13756
diff changeset
1044
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1045 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1046 F77_INT nc = octave::to_f77_int (cols ());
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1047
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1048 if (nr != nc)
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1049 (*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
1050
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1051 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
1052
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1053 // 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
1054 // 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
1055 // completes.
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1056
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1057 if (typ == MatrixType::Unknown)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1058 typ = mattype.type (*this);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1059 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
1060 typ = MatrixType::Full;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1061
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1062 if (typ == MatrixType::Lower || typ == MatrixType::Upper)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1063 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1064 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
1065 retval *= elem (i,i);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1066 }
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1067 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
1068 {
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1069 Matrix atmp = *this;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1070 double *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
1071
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1072 double anorm = 0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1073 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
1074
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1075 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
1076
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1077 char job = 'L';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1078 F77_XFCN (dpotrf, DPOTRF, (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
1079 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
1080 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
1081
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1082 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
1083
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1084 if (info != 0)
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1085 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1086 rcon = 0.0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1087 mattype.mark_as_unsymmetric ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1088 typ = MatrixType::Full;
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1089 }
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1090 else
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1091 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1092 Array<double> z (dim_vector (3 * nc, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1093 double *pz = z.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
1094 Array<F77_INT> iz (dim_vector (nc, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1095 F77_INT *piz = iz.fortran_vec ();
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1096
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1097 F77_XFCN (dpocon, DPOCON, (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
1098 nr, 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
1099 rcon, pz, piz, tmp_info
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1100 F77_CHAR_ARG_LEN (1)));
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1101
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1102 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
1103
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1104 if (info != 0)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1105 rcon = 0.0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1106
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1107 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
1108 retval *= atmp (i,i);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1109
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1110 retval = retval.square ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1111 }
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1112 }
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1113 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
1114 (*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
1115
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1116 if (typ == MatrixType::Full)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1117 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1118 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
1119 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
1120
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1121 Matrix atmp = *this;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1122 double *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
1123
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1124 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
1125 F77_INT tmp_info = 0;
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1126
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1127 // Calculate the norm of the matrix, for later use.
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1128 double anorm = 0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1129 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
1130
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1131 F77_XFCN (dgetrf, DGETRF, (nr, nr, tmp_data, nr, pipvt, 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
1132
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1133 info = tmp_info;
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1134
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1135 // 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
1136 rcon = 0.0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1137 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1138 {
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1139 info = -1;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1140 retval = DET ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1141 }
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1142 else
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1143 {
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1144 if (calc_cond)
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1145 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1146 // 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
1147 char job = '1';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1148 Array<double> z (dim_vector (4 * nc, 1));
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1149 double *pz = z.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
1150 Array<F77_INT> iz (dim_vector (nc, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1151 F77_INT *piz = iz.fortran_vec ();
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1152
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1153 F77_XFCN (dgecon, DGECON, (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
1154 nc, 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
1155 rcon, pz, piz, tmp_info
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1156 F77_CHAR_ARG_LEN (1)));
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1157 }
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1158
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1159 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
1160
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1161 if (info != 0)
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1162 {
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1163 info = -1;
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1164 retval = DET ();
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1165 }
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1166 else
8336
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1167 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1168 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
1169 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1170 double c = atmp(i,i);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1171 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
1172 }
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1173 }
9813c07ca946 make det take advantage of matrix type
Jaroslav Hajek <highegg@gmail.com>
parents: 8335
diff changeset
1174 }
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
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1177 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1178 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1179
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1180 double
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1181 Matrix::rcond (void) const
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1182 {
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1183 MatrixType mattype (*this);
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1184 return rcond (mattype);
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1185 }
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1186
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1187 double
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1188 Matrix::rcond (MatrixType& mattype) const
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1189 {
21723
bae585228161 use namespace for numeric_limits
John W. Eaton <jwe@octave.org>
parents: 21721
diff changeset
1190 double rcon = octave::numeric_limits<double>::NaN ();
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1191 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1192 F77_INT nc = octave::to_f77_int (cols ());
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1193
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1194 if (nr != nc)
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1195 (*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
1196
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1197 if (nr == 0 || nc == 0)
21723
bae585228161 use namespace for numeric_limits
John W. Eaton <jwe@octave.org>
parents: 21721
diff changeset
1198 rcon = octave::numeric_limits<double>::Inf ();
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1199 else
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1200 {
16300
23c5f90f92cd eliminate some variable might be clobbered by 'longjmp' or 'vfork' warnings
John W. Eaton <jwe@octave.org>
parents: 15448
diff changeset
1201 volatile int typ = mattype.type ();
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1202
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1203 if (typ == MatrixType::Unknown)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1204 typ = mattype.type (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1205
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1206 // Only calculate the condition number for LU/Cholesky
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1207 if (typ == MatrixType::Upper)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1208 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1209 const double *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
1210 F77_INT info = 0;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1211 char norm = '1';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1212 char uplo = 'U';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1213 char dia = 'N';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1214
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1215 Array<double> z (dim_vector (3 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1216 double *pz = z.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
1217 Array<F77_INT> iz (dim_vector (nc, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1218 F77_INT *piz = iz.fortran_vec ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1219
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1220 F77_XFCN (dtrcon, DTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1221 F77_CONST_CHAR_ARG2 (&uplo, 1),
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1222 F77_CONST_CHAR_ARG2 (&dia, 1),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1223 nr, tmp_data, nr, rcon,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1224 pz, piz, info
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1225 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1226 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1227 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1228
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1229 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1230 rcon = 0.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1231 }
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1232 else if (typ == MatrixType::Permuted_Upper)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1233 (*current_liboctave_error_handler)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1234 ("permuted triangular matrix not implemented");
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1235 else if (typ == MatrixType::Lower)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1236 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1237 const double *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
1238 F77_INT info = 0;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1239 char norm = '1';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1240 char uplo = 'L';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1241 char dia = 'N';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1242
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1243 Array<double> z (dim_vector (3 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1244 double *pz = z.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
1245 Array<F77_INT> iz (dim_vector (nc, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1246 F77_INT *piz = iz.fortran_vec ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1247
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1248 F77_XFCN (dtrcon, DTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1249 F77_CONST_CHAR_ARG2 (&uplo, 1),
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1250 F77_CONST_CHAR_ARG2 (&dia, 1),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1251 nr, tmp_data, nr, rcon,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1252 pz, piz, info
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1253 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1254 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1255 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1256
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1257 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1258 rcon = 0.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1259 }
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1260 else if (typ == MatrixType::Permuted_Lower)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1261 (*current_liboctave_error_handler)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1262 ("permuted triangular matrix not implemented");
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1263 else if (typ == MatrixType::Full || typ == MatrixType::Hermitian)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1264 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1265 double anorm = -1.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1266
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1267 if (typ == MatrixType::Hermitian)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1268 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1269 F77_INT info = 0;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1270 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
1271
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
1272 Matrix 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
1273 double *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
1274
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1275 anorm = atmp.abs().sum().
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1276 row(static_cast<octave_idx_type>(0)).max();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1277
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1278 F77_XFCN (dpotrf, DPOTRF, (F77_CONST_CHAR_ARG2 (&job, 1), nr,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1279 tmp_data, nr, info
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1280 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1281
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1282 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1283 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1284 rcon = 0.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1285 mattype.mark_as_unsymmetric ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1286 typ = MatrixType::Full;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1287 }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1288 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1289 {
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1290 Array<double> z (dim_vector (3 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1291 double *pz = z.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
1292 Array<F77_INT> iz (dim_vector (nc, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1293 F77_INT *piz = iz.fortran_vec ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1294
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1295 F77_XFCN (dpocon, DPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1296 nr, tmp_data, nr, anorm,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1297 rcon, pz, piz, info
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1298 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1299
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1300 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1301 rcon = 0.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1302 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1303 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1304
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1305 if (typ == MatrixType::Full)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1306 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1307 F77_INT info = 0;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1308
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
1309 Matrix 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
1310 double *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
1311
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1312 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
1313 F77_INT *pipvt = ipvt.fortran_vec ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1314
15018
3d8ace26c5b4 maint: Use Octave coding conventions for cuddled parentheses in liboctave/.
Rik <rik@octave.org>
parents: 14846
diff changeset
1315 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
1316 anorm = atmp.abs ().sum ().
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1317 row(static_cast<octave_idx_type>(0)).max ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1318
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1319 Array<double> z (dim_vector (4 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1320 double *pz = z.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
1321 Array<F77_INT> iz (dim_vector (nc, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1322 F77_INT *piz = iz.fortran_vec ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1323
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1324 F77_XFCN (dgetrf, DGETRF, (nr, nr, tmp_data, nr, pipvt, info));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1325
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1326 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1327 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1328 rcon = 0.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1329 mattype.mark_as_rectangular ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1330 }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1331 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1332 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1333 char job = '1';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1334 F77_XFCN (dgecon, DGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1335 nc, tmp_data, nr, anorm,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1336 rcon, pz, piz, info
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1337 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1338
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1339 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1340 rcon = 0.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1341 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1342 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1343 }
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1344 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1345 rcon = 0.0;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1346 }
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1347
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1348 return rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1349 }
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1350
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1351 Matrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1352 Matrix::utsolve (MatrixType& mattype, const Matrix& b, octave_idx_type& info,
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1353 double& rcon, solve_singularity_handler sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1354 bool calc_cond, blas_trans_type transt) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1355 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1356 Matrix retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1357
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1358 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1359 F77_INT nc = octave::to_f77_int (cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1360
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1361 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: 22971
diff changeset
1362 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
1363
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1364 if (nr != b_nr)
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1365 (*current_liboctave_error_handler)
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1366 ("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
1367
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1368 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
1369 retval = Matrix (nc, b_nc, 0.0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1370 else
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1371 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1372 volatile int typ = mattype.type ();
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1373
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1374 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
1375 (*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
1376
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1377 rcon = 1.;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1378 info = 0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1379
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1380 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
1381 (*current_liboctave_error_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1382 ("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
1383
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1384 const double *tmp_data = fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1385
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1386 retval = b;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1387 double *result = retval.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1388
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1389 char uplo = 'U';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1390 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
1391 char dia = 'N';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1392
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1393 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
1394
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1395 F77_XFCN (dtrtrs, DTRTRS, (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
1396 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
1397 F77_CONST_CHAR_ARG2 (&dia, 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1398 nr, b_nc, 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
1399 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
1400 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
1401 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
1402 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
1403
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1404 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
1405
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1406 if (calc_cond)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1407 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1408 char norm = '1';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1409 uplo = 'U';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1410 dia = 'N';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1411
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1412 Array<double> z (dim_vector (3 * nc, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1413 double *pz = z.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
1414 Array<F77_INT> iz (dim_vector (nc, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1415 F77_INT *piz = iz.fortran_vec ();
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1416
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1417 F77_XFCN (dtrcon, DTRCON, (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
1418 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
1419 F77_CONST_CHAR_ARG2 (&dia, 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1420 nr, 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
1421 pz, piz, tmp_info
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1422 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
1423 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
1424 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
1425
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1426 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
1427
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1428 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1429 info = -2;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1430
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1431 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
1432
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1433 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
1434 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1435 info = -2;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1436
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1437 if (sing_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1438 sing_handler (rcon);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1439 else
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
1440 octave::warn_singular_matrix (rcon);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1441 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1442 }
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1443 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1444
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1445 return retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1446 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1447
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1448 Matrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1449 Matrix::ltsolve (MatrixType& mattype, const Matrix& b, octave_idx_type& info,
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1450 double& rcon, solve_singularity_handler sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1451 bool calc_cond, blas_trans_type transt) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1452 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1453 Matrix retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1454
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1455 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1456 F77_INT nc = octave::to_f77_int (cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1457
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1458 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: 22971
diff changeset
1459 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
1460
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1461 if (nr != b_nr)
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1462 (*current_liboctave_error_handler)
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1463 ("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
1464
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1465 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
1466 retval = Matrix (nc, b_nc, 0.0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1467 else
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1468 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1469 volatile int typ = mattype.type ();
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1470
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1471 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
1472 (*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
1473
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1474 rcon = 1.;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1475 info = 0;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1476
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1477 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
1478 (*current_liboctave_error_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1479 ("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
1480
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1481 const double *tmp_data = fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1482
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1483 retval = b;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1484 double *result = retval.fortran_vec ();
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1485
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1486 char uplo = 'L';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1487 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
1488 char dia = 'N';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1489
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1490 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
1491
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1492 F77_XFCN (dtrtrs, DTRTRS, (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
1493 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
1494 F77_CONST_CHAR_ARG2 (&dia, 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1495 nr, b_nc, 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
1496 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
1497 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
1498 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
1499 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
1500
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1501 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
1502
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1503 if (calc_cond)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1504 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1505 char norm = '1';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1506 uplo = 'L';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1507 dia = 'N';
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1508
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1509 Array<double> z (dim_vector (3 * nc, 1));
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1510 double *pz = z.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
1511 Array<F77_INT> iz (dim_vector (nc, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1512 F77_INT *piz = iz.fortran_vec ();
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1513
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1514 F77_XFCN (dtrcon, DTRCON, (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
1515 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
1516 F77_CONST_CHAR_ARG2 (&dia, 1),
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1517 nr, 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
1518 pz, piz, tmp_info
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1519 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
1520 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
1521 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
1522
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 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
1524
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1525 if (info != 0)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1526 info = -2;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1527
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1528 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
1529
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1530 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
1531 {
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1532 info = -2;
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1533
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1534 if (sing_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1535 sing_handler (rcon);
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1536 else
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
1537 octave::warn_singular_matrix (rcon);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1538 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1539 }
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1540 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1541
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1542 return retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1543 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1544
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1545 Matrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1546 Matrix::fsolve (MatrixType& mattype, const Matrix& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1547 double& rcon, solve_singularity_handler sing_handler,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1548 bool calc_cond) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1549 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1550 Matrix retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1551
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1552 F77_INT nr = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1553 F77_INT nc = octave::to_f77_int (cols ());
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1554
6924
be176b7e110a [project @ 2007-09-25 19:08:19 by dbateman]
dbateman
parents: 6840
diff changeset
1555 if (nr != nc || nr != b.rows ())
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1556 (*current_liboctave_error_handler)
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1557 ("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
1558
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
1559 if (nr == 0 || b.cols () == 0)
6924
be176b7e110a [project @ 2007-09-25 19:08:19 by dbateman]
dbateman
parents: 6840
diff changeset
1560 retval = Matrix (nc, b.cols (), 0.0);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1561 else
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1562 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1563 volatile int typ = mattype.type ();
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1564
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1565 // 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
1566 double anorm = -1.;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1567
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1568 if (typ == MatrixType::Hermitian)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1569 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1570 info = 0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1571 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
1572
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1573 Matrix atmp = *this;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1574 double *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
1575
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1576 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
1577
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1578 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
1579
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1580 F77_XFCN (dpotrf, DPOTRF, (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
1581 tmp_data, nr, tmp_info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1582 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1583
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1584 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
1585
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1586 // 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
1587 rcon = 0.0;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1588 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1589 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1590 info = -2;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1591
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1592 mattype.mark_as_unsymmetric ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1593 typ = MatrixType::Full;
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 else
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 if (calc_cond)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1598 {
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1599 Array<double> z (dim_vector (3 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1600 double *pz = z.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
1601 Array<F77_INT> iz (dim_vector (nc, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1602 F77_INT *piz = iz.fortran_vec ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1603
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1604 F77_XFCN (dpocon, DPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1605 nr, 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
1606 rcon, pz, piz, tmp_info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1607 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1608
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1609 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
1610
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1611 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1612 info = -2;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1613
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1614 volatile double rcond_plus_one = rcon + 1.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1615
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1616 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
1617 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1618 info = -2;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1619
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1620 if (sing_handler)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1621 sing_handler (rcon);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1622 else
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
1623 octave::warn_singular_matrix (rcon);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1624 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1625 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1626
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1627 if (info == 0)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1628 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1629 retval = b;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1630 double *result = retval.fortran_vec ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1631
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1632 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: 22971
diff changeset
1633 F77_INT b_nc = octave::to_f77_int (b.cols ());
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1634
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1635 F77_XFCN (dpotrs, DPOTRS, (F77_CONST_CHAR_ARG2 (&job, 1),
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1636 nr, b_nc, 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
1637 result, b_nr, tmp_info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1638 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
1639
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1640 info = tmp_info;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1641 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1642 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1643 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1644 mattype.mark_as_unsymmetric ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1645 typ = MatrixType::Full;
11586
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 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1648 }
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1649
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1650 if (typ == MatrixType::Full)
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 info = 0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1653
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1654 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
1655 F77_INT *pipvt = ipvt.fortran_vec ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1656
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1657 Matrix atmp = *this;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1658 double *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
1659
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1660 if (anorm < 0.)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1661 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
1662
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
1663 Array<double> z (dim_vector (4 * nc, 1));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1664 double *pz = z.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
1665 Array<F77_INT> iz (dim_vector (nc, 1));
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1666 F77_INT *piz = iz.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
1667
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1668 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
1669
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1670 F77_XFCN (dgetrf, DGETRF, (nr, nr, tmp_data, nr, pipvt, 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
1671
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1672 info = tmp_info;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1673
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1674 // 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
1675 rcon = 0.0;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1676 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1677 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1678 info = -2;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1679
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1680 if (sing_handler)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1681 sing_handler (rcon);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1682 else
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
1683 octave::warn_singular_matrix ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1684
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1685 mattype.mark_as_rectangular ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1686 }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1687 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1688 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1689 if (calc_cond)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1690 {
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1691 // Now calculate the condition number for
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1692 // non-singular matrix.
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1693 char job = '1';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1694 F77_XFCN (dgecon, DGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1695 nc, 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
1696 rcon, pz, piz, tmp_info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1697 F77_CHAR_ARG_LEN (1)));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1698
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1699 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
1700
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
1701 if (info != 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1702 info = -2;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1703
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1704 volatile double rcond_plus_one = rcon + 1.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1705
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
1706 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
1707 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1708 info = -2;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1709
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1710 if (sing_handler)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1711 sing_handler (rcon);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1712 else
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
1713 octave::warn_singular_matrix (rcon);
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1714 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1715 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1716
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1717 if (info == 0)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1718 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1719 retval = b;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1720 double *result = retval.fortran_vec ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1721
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
1722 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: 22971
diff changeset
1723 F77_INT b_nc = octave::to_f77_int (b.cols ());
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1724
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1725 char job = 'N';
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1726 F77_XFCN (dgetrs, DGETRS, (F77_CONST_CHAR_ARG2 (&job, 1),
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1727 nr, b_nc, 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
1728 pipvt, result, b_nr, tmp_info
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1729 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
1730
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
1731 info = tmp_info;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1732 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1733 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1734 mattype.mark_as_rectangular ();
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1735 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1736 }
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1737 else if (typ != MatrixType::Hermitian)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1738 (*current_liboctave_error_handler) ("incorrect matrix type");
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1739 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1740
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1741 return retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1742 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1743
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1744 Matrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1745 Matrix::solve (MatrixType& mattype, const Matrix& b) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1746 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1747 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1748 double rcon;
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23708
diff changeset
1749 return solve (mattype, b, info, rcon, nullptr);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1750 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1751
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1752 Matrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1753 Matrix::solve (MatrixType& mattype, const Matrix& b,
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1754 octave_idx_type& info) const
9662
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1755 {
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1756 double rcon;
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23708
diff changeset
1757 return solve (mattype, b, info, rcon, nullptr);
9662
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1758 }
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1759
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1760 Matrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1761 Matrix::solve (MatrixType& mattype, const Matrix& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1762 double& rcon) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1763 {
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23708
diff changeset
1764 return solve (mattype, b, info, rcon, nullptr);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1765 }
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 Matrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1768 Matrix::solve (MatrixType& mattype, const Matrix& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1769 double& rcon, solve_singularity_handler sing_handler,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1770 bool singular_fallback, blas_trans_type transt) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1771 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1772 Matrix retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1773 int typ = mattype.type ();
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1774
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1775 if (typ == MatrixType::Unknown)
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1776 typ = mattype.type (*this);
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1777
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1778 // Only calculate the condition number for LU/Cholesky
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1779 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
1780 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
1781 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
1782 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
1783 else if (transt == blas_trans || transt == blas_conj_trans)
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1784 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
1785 singular_fallback);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1786 else if (typ == MatrixType::Full || typ == MatrixType::Hermitian)
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1787 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
1788 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
1789 (*current_liboctave_error_handler) ("unknown matrix type");
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1790
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1791 // 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
1792 if (singular_fallback && mattype.type () == MatrixType::Rectangular)
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1793 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1794 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1795 retval = lssolve (b, info, rank, rcon);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1796 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1797
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1798 return retval;
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1799 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1800
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1801 ComplexMatrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1802 Matrix::solve (MatrixType& mattype, const ComplexMatrix& b) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1803 {
9662
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1804 octave_idx_type info;
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1805 double rcon;
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23708
diff changeset
1806 return solve (mattype, b, info, rcon, nullptr);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1807 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1808
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1809 ComplexMatrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1810 Matrix::solve (MatrixType& mattype, const ComplexMatrix& b,
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1811 octave_idx_type& info) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1812 {
9662
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1813 double rcon;
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23708
diff changeset
1814 return solve (mattype, b, info, rcon, nullptr);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1815 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1816
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1817 ComplexMatrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1818 Matrix::solve (MatrixType& mattype, const ComplexMatrix& b,
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1819 octave_idx_type& info, double& rcon) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1820 {
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23708
diff changeset
1821 return solve (mattype, b, info, rcon, nullptr);
9662
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1822 }
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1823
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1824 static Matrix
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1825 stack_complex_matrix (const ComplexMatrix& cm)
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1826 {
18084
8e056300994b Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents: 18083
diff changeset
1827 octave_idx_type m = cm.rows ();
8e056300994b Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents: 18083
diff changeset
1828 octave_idx_type n = cm.cols ();
8e056300994b Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents: 18083
diff changeset
1829 octave_idx_type nel = m*n;
9662
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1830 Matrix retval (m, 2*n);
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1831 const Complex *cmd = cm.data ();
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1832 double *rd = retval.fortran_vec ();
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1833 for (octave_idx_type i = 0; i < nel; i++)
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1834 {
23708
750e42a35adc Use imag, real, arg from std library for Complex types.
Rik <rik@octave.org>
parents: 23596
diff changeset
1835 rd[i] = std::real (cmd[i]);
750e42a35adc Use imag, real, arg from std library for Complex types.
Rik <rik@octave.org>
parents: 23596
diff changeset
1836 rd[nel+i] = std::imag (cmd[i]);
9662
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1837 }
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1838 return retval;
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1839 }
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1840
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1841 static ComplexMatrix
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1842 unstack_complex_matrix (const Matrix& sm)
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1843 {
18084
8e056300994b Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents: 18083
diff changeset
1844 octave_idx_type m = sm.rows ();
8e056300994b Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents: 18083
diff changeset
1845 octave_idx_type n = sm.cols () / 2;
8e056300994b Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents: 18083
diff changeset
1846 octave_idx_type nel = m*n;
9662
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1847 ComplexMatrix retval (m, n);
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1848 const double *smd = sm.data ();
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1849 Complex *rd = retval.fortran_vec ();
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1850 for (octave_idx_type i = 0; i < nel; i++)
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1851 rd[i] = Complex (smd[i], smd[nel+i]);
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1852 return retval;
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1853 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1854
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1855 ComplexMatrix
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1856 Matrix::solve (MatrixType& mattype, const ComplexMatrix& b,
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1857 octave_idx_type& info, double& rcon,
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1858 solve_singularity_handler sing_handler,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1859 bool singular_fallback, blas_trans_type transt) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1860 {
9662
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1861 Matrix tmp = stack_complex_matrix (b);
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1862 tmp = solve (mattype, tmp, info, rcon, sing_handler, singular_fallback,
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1863 transt);
9662
0d3b248f4ab6 further improve mixed real-complex division
Jaroslav Hajek <highegg@gmail.com>
parents: 9661
diff changeset
1864 return unstack_complex_matrix (tmp);
5785
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
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1867 ColumnVector
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1868 Matrix::solve (MatrixType& mattype, const ColumnVector& b) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1869 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1870 octave_idx_type info; double rcon;
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1871 return solve (mattype, b, info, rcon);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1872 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1873
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1874 ColumnVector
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1875 Matrix::solve (MatrixType& mattype, const ColumnVector& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1876 octave_idx_type& info) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1877 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1878 double rcon;
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1879 return solve (mattype, b, info, rcon);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1880 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1881
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1882 ColumnVector
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1883 Matrix::solve (MatrixType& mattype, const ColumnVector& b,
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1884 octave_idx_type& info, double& rcon) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1885 {
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23708
diff changeset
1886 return solve (mattype, b, info, rcon, nullptr);
5785
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
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1889 ColumnVector
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1890 Matrix::solve (MatrixType& mattype, const ColumnVector& b,
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1891 octave_idx_type& info, double& rcon,
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1892 solve_singularity_handler sing_handler,
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1893 blas_trans_type transt) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1894 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1895 Matrix tmp (b);
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1896 tmp = solve (mattype, 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
1897 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
1898 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1899
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1900 ComplexColumnVector
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1901 Matrix::solve (MatrixType& mattype, const ComplexColumnVector& b) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1902 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1903 ComplexMatrix tmp (*this);
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1904 return tmp.solve (mattype, b);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1905 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1906
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1907 ComplexColumnVector
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1908 Matrix::solve (MatrixType& mattype, const ComplexColumnVector& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1909 octave_idx_type& info) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1910 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1911 ComplexMatrix tmp (*this);
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1912 return tmp.solve (mattype, b, info);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1913 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1914
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1915 ComplexColumnVector
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1916 Matrix::solve (MatrixType& mattype, const ComplexColumnVector& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1917 octave_idx_type& info, double& rcon) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1918 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1919 ComplexMatrix tmp (*this);
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1920 return tmp.solve (mattype, b, info, rcon);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1921 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1922
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1923 ComplexColumnVector
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1924 Matrix::solve (MatrixType& mattype, const ComplexColumnVector& b,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
1925 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
1926 solve_singularity_handler sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1927 blas_trans_type transt) const
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1928 {
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1929 ComplexMatrix tmp (*this);
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
1930 return tmp.solve (mattype, b, info, rcon, sing_handler, transt);
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1931 }
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1932
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1933 Matrix
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1934 Matrix::solve (const Matrix& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1935 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
1936 octave_idx_type info;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1937 double rcon;
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23708
diff changeset
1938 return solve (b, info, rcon, nullptr);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1939 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1940
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1941 Matrix
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
1942 Matrix::solve (const Matrix& b, octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1943 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1944 double rcon;
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23708
diff changeset
1945 return solve (b, info, rcon, nullptr);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1946 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1947
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1948 Matrix
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1949 Matrix::solve (const Matrix& b, octave_idx_type& info, double& rcon) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1950 {
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23708
diff changeset
1951 return solve (b, info, rcon, nullptr);
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
1952 }
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
1953
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
1954 Matrix
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1955 Matrix::solve (const Matrix& b, octave_idx_type& info,
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1956 double& rcon, solve_singularity_handler sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1957 blas_trans_type transt) const
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
1958 {
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
1959 MatrixType mattype (*this);
9661
afcf852256d2 optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 9658
diff changeset
1960 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
1961 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1962
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1963 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1964 Matrix::solve (const ComplexMatrix& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1965 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1966 ComplexMatrix tmp (*this);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1967 return tmp.solve (b);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1968 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1969
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1970 ComplexMatrix
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
1971 Matrix::solve (const ComplexMatrix& b, octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1972 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1973 ComplexMatrix tmp (*this);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1974 return tmp.solve (b, info);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1975 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1976
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1977 ComplexMatrix
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1978 Matrix::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
1979 double& rcon) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1980 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1981 ComplexMatrix tmp (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1982 return tmp.solve (b, info, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1983 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1984
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
1985 ComplexMatrix
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1986 Matrix::solve (const ComplexMatrix& 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
1987 solve_singularity_handler sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
1988 blas_trans_type transt) const
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
1989 {
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
1990 ComplexMatrix tmp (*this);
9661
afcf852256d2 optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 9658
diff changeset
1991 return tmp.solve (b, info, rcon, sing_handler, transt);
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
1992 }
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
1993
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1994 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1995 Matrix::solve (const ColumnVector& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1996 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1997 octave_idx_type info; double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
1998 return solve (b, info, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
1999 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2000
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2001 ColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2002 Matrix::solve (const ColumnVector& b, octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2003 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2004 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2005 return solve (b, info, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2006 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2007
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2008 ColumnVector
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2009 Matrix::solve (const ColumnVector& b, octave_idx_type& info, double& rcon) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2010 {
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23708
diff changeset
2011 return solve (b, info, rcon, nullptr);
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2012 }
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2013
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2014 ColumnVector
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2015 Matrix::solve (const ColumnVector& 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
2016 solve_singularity_handler sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2017 blas_trans_type transt) const
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2018 {
5785
6b9cec830d72 [project @ 2006-05-03 19:32:46 by dbateman]
dbateman
parents: 5775
diff changeset
2019 MatrixType mattype (*this);
9661
afcf852256d2 optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 9658
diff changeset
2020 return solve (mattype, b, info, rcon, sing_handler, transt);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2021 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2022
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2023 ComplexColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2024 Matrix::solve (const ComplexColumnVector& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2025 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2026 ComplexMatrix tmp (*this);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2027 return tmp.solve (b);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2028 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2029
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2030 ComplexColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2031 Matrix::solve (const ComplexColumnVector& b, octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2032 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2033 ComplexMatrix tmp (*this);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2034 return tmp.solve (b, info);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2035 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2036
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2037 ComplexColumnVector
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2038 Matrix::solve (const ComplexColumnVector& b, octave_idx_type& info,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2039 double& rcon) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2040 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2041 ComplexMatrix tmp (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2042 return tmp.solve (b, info, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2043 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2044
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2045 ComplexColumnVector
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2046 Matrix::solve (const ComplexColumnVector& b, octave_idx_type& info,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2047 double& rcon,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2048 solve_singularity_handler sing_handler,
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2049 blas_trans_type transt) const
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2050 {
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2051 ComplexMatrix tmp (*this);
9661
afcf852256d2 optimize / and '\ for triangular matrices
Jaroslav Hajek <highegg@gmail.com>
parents: 9658
diff changeset
2052 return tmp.solve (b, info, rcon, sing_handler, transt);
3480
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2053 }
45742a3b1f7c [project @ 2000-01-26 06:16:41 by jwe]
jwe
parents: 3469
diff changeset
2054
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2055 Matrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2056 Matrix::lssolve (const Matrix& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2057 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2058 octave_idx_type info;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2059 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2060 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2061 return lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2062 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2063
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2064 Matrix
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2065 Matrix::lssolve (const Matrix& b, octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2066 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2067 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2068 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2069 return lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2070 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2071
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2072 Matrix
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2073 Matrix::lssolve (const Matrix& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2074 octave_idx_type& rank) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2075 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2076 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2077 return lssolve (b, info, rank, rcon);
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2078 }
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2079
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2080 Matrix
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2081 Matrix::lssolve (const Matrix& b, octave_idx_type& info,
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
2082 octave_idx_type& rank, double& rcon) const
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2083 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2084 Matrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2085
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2086 F77_INT nrhs = octave::to_f77_int (b.cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2087
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2088 F77_INT m = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2089 F77_INT n = octave::to_f77_int (cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2090
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2091 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: 22971
diff changeset
2092 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
2093
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2094 if (m != b_nr)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2095 (*current_liboctave_error_handler)
6924
be176b7e110a [project @ 2007-09-25 19:08:19 by dbateman]
dbateman
parents: 6840
diff changeset
2096 ("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
2097
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2098 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
2099 retval = Matrix (n, b_nc, 0.0);
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2100 else
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2101 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2102 volatile F77_INT minmn = (m < n ? m : n);
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23449
diff changeset
2103 F77_INT maxmn = (m > n ? m : n);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2104 rcon = -1.0;
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2105 if (m != n)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2106 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2107 retval = Matrix (maxmn, nrhs, 0.0);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2108
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2109 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
2110 for (F77_INT i = 0; i < m; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2111 retval.elem (i, j) = b.elem (i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2112 }
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2113 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2114 retval = b;
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2115
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2116 Matrix atmp = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2117 double *tmp_data = atmp.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2118
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2119 double *pretval = retval.fortran_vec ();
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
2120 Array<double> s (dim_vector (minmn, 1));
7071
c3b479e753dd [project @ 2007-10-26 15:14:34 by jwe]
jwe
parents: 7033
diff changeset
2121 double *ps = s.fortran_vec ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2122
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2123 // Ask DGELSD 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
2124 F77_INT lwork = -1;
3752
719a44ff67c9 [project @ 2000-12-13 19:02:42 by jwe]
jwe
parents: 3726
diff changeset
2125
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
2126 Array<double> work (dim_vector (1, 1));
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2127
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2128 F77_INT smlsiz;
7477
8b22207ef9ca ilaenv --> xilaenv
John W. Eaton <jwe@octave.org>
parents: 7476
diff changeset
2129 F77_FUNC (xilaenv, XILAENV) (9, F77_CONST_CHAR_ARG2 ("DGELSD", 6),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2130 F77_CONST_CHAR_ARG2 (" ", 1),
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2131 0, 0, 0, 0, smlsiz
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2132 F77_CHAR_ARG_LEN (6)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2133 F77_CHAR_ARG_LEN (1));
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2134
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2135 F77_INT mnthr;
7486
6a6d2abe51ff more xGELSD workspace fixes
John W. Eaton <jwe@octave.org>
parents: 7482
diff changeset
2136 F77_FUNC (xilaenv, XILAENV) (6, F77_CONST_CHAR_ARG2 ("DGELSD", 6),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2137 F77_CONST_CHAR_ARG2 (" ", 1),
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2138 m, n, nrhs, -1, mnthr
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2139 F77_CHAR_ARG_LEN (6)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2140 F77_CHAR_ARG_LEN (1));
7486
6a6d2abe51ff more xGELSD workspace fixes
John W. Eaton <jwe@octave.org>
parents: 7482
diff changeset
2141
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2142 // We compute the size of iwork because DGELSD in older versions
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2143 // of LAPACK does not return it on a query call.
7124
d07cb867891b [project @ 2007-11-08 01:09:44 by jwe]
jwe
parents: 7079
diff changeset
2144 double dminmn = static_cast<double> (minmn);
d07cb867891b [project @ 2007-11-08 01:09:44 by jwe]
jwe
parents: 7079
diff changeset
2145 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
2146 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
2147 double anorm = 0.0;
18847
ff4da3c8ed16 use gnulib log2 modules (bug #42583)
John W. Eaton <jwe@octave.org>
parents: 17769
diff changeset
2148
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2149 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
2150 if (nlvl < 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2151 nlvl = 0;
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2152
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2153 F77_INT liwork = 3 * minmn * nlvl + 11 * minmn;
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2154 if (liwork < 1)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2155 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
2156 Array<F77_INT> iwork (dim_vector (liwork, 1));
23449
c763214a8260 maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents: 23443
diff changeset
2157 F77_INT *piwork = iwork.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
2158
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2159 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
2160 F77_INT tmp_rank = 0;
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2161
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2162 F77_XFCN (dgelsd, DGELSD, (m, n, nrhs, tmp_data, m, 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
2163 ps, rcon, tmp_rank, 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
2164 lwork, 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
2165
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2166 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
2167 rank = tmp_rank;
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2168
7476
e9f10b4c05cf fix workspace size calculation for xGELSD
Jason Riedy
parents: 7416
diff changeset
2169 // 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
2170 // through 3.1.1 when n >= mnthr. The obtuse formula below
7476
e9f10b4c05cf fix workspace size calculation for xGELSD
Jason Riedy
parents: 7416
diff changeset
2171 // should provide sufficient workspace for DGELSD to operate
e9f10b4c05cf fix workspace size calculation for xGELSD
Jason Riedy
parents: 7416
diff changeset
2172 // efficiently.
10813
2c2d4a2f1047 fix workspace bug workaround for xGELSD (since 7486:6a6d2abe51ff)
Jaroslav Hajek <highegg@gmail.com>
parents: 10806
diff changeset
2173 if (n > m && n >= mnthr)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2174 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2175 const F77_INT wlalsd
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2176 = 9*m + 2*m*smlsiz + 8*m*nlvl + m*nrhs + (smlsiz+1)*(smlsiz+1);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2177
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2178 F77_INT addend = m;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2179
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2180 if (2*m-4 > addend)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2181 addend = 2*m-4;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2182
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2183 if (nrhs > addend)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2184 addend = nrhs;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2185
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2186 if (n-3*m > addend)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2187 addend = n-3*m;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2188
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2189 if (wlalsd > addend)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2190 addend = wlalsd;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2191
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2192 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
2193
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2194 if (work(0) < lworkaround)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2195 work(0) = lworkaround;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2196 }
7532
493bb0de3199 avoid another xGELSD workspace query bug
John W. Eaton <jwe@octave.org>
parents: 7503
diff changeset
2197 else if (m >= n)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2198 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2199 F77_INT lworkaround
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2200 = 12*n + 2*n*smlsiz + 8*n*nlvl + n*nrhs + (smlsiz+1)*(smlsiz+1);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2201
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2202 if (work(0) < lworkaround)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2203 work(0) = lworkaround;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2204 }
7476
e9f10b4c05cf fix workspace size calculation for xGELSD
Jason Riedy
parents: 7416
diff changeset
2205
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2206 lwork = static_cast<F77_INT> (work(0));
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
2207 work.resize (dim_vector (lwork, 1));
7482
29980c6b8604 don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents: 7478
diff changeset
2208
22598
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2209 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
2210
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2211 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
2212 {
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2213 rcon = 0.0;
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2214 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
2215 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
2216 }
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2217 else
22598
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2218 {
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2219 F77_XFCN (dgelsd, DGELSD, (m, n, nrhs, tmp_data, m, 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
2220 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
2221 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
2222 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
2223
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2224 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
2225 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
2226
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2227 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
2228 rcon = 0.0;
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2229 else
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2230 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
2231
5aa8f199e328 avoid invalid BLAS calls that then invoke xerbla (bug #39000)
Avinoam Kalma <a.kalma@gmail.com>
parents: 22417
diff changeset
2232 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
2233 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2234 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2235
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2236 return retval;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2237 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2238
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2239 ComplexMatrix
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2240 Matrix::lssolve (const ComplexMatrix& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2241 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2242 ComplexMatrix tmp (*this);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2243 octave_idx_type info;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2244 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2245 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2246 return tmp.lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2247 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2248
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2249 ComplexMatrix
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2250 Matrix::lssolve (const ComplexMatrix& b, octave_idx_type& info) const
458
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 tmp (*this);
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2253 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2254 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2255 return tmp.lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2256 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2257
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2258 ComplexMatrix
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2259 Matrix::lssolve (const ComplexMatrix& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2260 octave_idx_type& rank) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2261 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2262 ComplexMatrix tmp (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2263 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2264 return tmp.lssolve (b, info, rank, rcon);
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2265 }
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2266
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2267 ComplexMatrix
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2268 Matrix::lssolve (const ComplexMatrix& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2269 octave_idx_type& rank, double& rcon) const
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2270 {
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2271 ComplexMatrix tmp (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2272 return tmp.lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2273 }
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 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2276 Matrix::lssolve (const ColumnVector& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2277 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2278 octave_idx_type info;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2279 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2280 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2281 return lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2282 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2283
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2284 ColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2285 Matrix::lssolve (const ColumnVector& b, octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2286 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2287 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2288 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2289 return lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2290 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2291
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2292 ColumnVector
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2293 Matrix::lssolve (const ColumnVector& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2294 octave_idx_type& rank) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2295 {
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2296 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2297 return lssolve (b, info, rank, rcon);
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2298 }
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2299
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2300 ColumnVector
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2301 Matrix::lssolve (const ColumnVector& b, octave_idx_type& info,
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
2302 octave_idx_type& rank, double& rcon) const
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2303 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2304 ColumnVector retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2305
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2306 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
2307
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2308 F77_INT m = octave::to_f77_int (rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2309 F77_INT n = octave::to_f77_int (cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2310
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2311 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
2312
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2313 if (m != b_nel)
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2314 (*current_liboctave_error_handler)
6924
be176b7e110a [project @ 2007-09-25 19:08:19 by dbateman]
dbateman
parents: 6840
diff changeset
2315 ("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
2316
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
2317 if (m == 0 || n == 0)
6924
be176b7e110a [project @ 2007-09-25 19:08:19 by dbateman]
dbateman
parents: 6840
diff changeset
2318 retval = ColumnVector (n, 0.0);
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2319 else
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2320 {
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2321 volatile F77_INT minmn = (m < n ? m : n);
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23449
diff changeset
2322 F77_INT maxmn = (m > n ? m : n);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2323 rcon = -1.0;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2324
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2325 if (m != n)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2326 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2327 retval = ColumnVector (maxmn, 0.0);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2328
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2329 for (F77_INT i = 0; i < m; i++)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2330 retval.elem (i) = b.elem (i);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2331 }
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2332 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2333 retval = b;
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2334
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2335 Matrix atmp = *this;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2336 double *tmp_data = atmp.fortran_vec ();
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2337
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2338 double *pretval = retval.fortran_vec ();
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
2339 Array<double> s (dim_vector (minmn, 1));
7071
c3b479e753dd [project @ 2007-10-26 15:14:34 by jwe]
jwe
parents: 7033
diff changeset
2340 double *ps = s.fortran_vec ();
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2341
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2342 // Ask DGELSD 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
2343 F77_INT lwork = -1;
3752
719a44ff67c9 [project @ 2000-12-13 19:02:42 by jwe]
jwe
parents: 3726
diff changeset
2344
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
2345 Array<double> work (dim_vector (1, 1));
3752
719a44ff67c9 [project @ 2000-12-13 19:02:42 by jwe]
jwe
parents: 3726
diff changeset
2346
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2347 F77_INT smlsiz;
7544
f9983d2761df more xGELSD workspace fixes
Jaroslav Hajek <highegg@gmail.com>
parents: 7532
diff changeset
2348 F77_FUNC (xilaenv, XILAENV) (9, F77_CONST_CHAR_ARG2 ("DGELSD", 6),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2349 F77_CONST_CHAR_ARG2 (" ", 1),
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2350 0, 0, 0, 0, smlsiz
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2351 F77_CHAR_ARG_LEN (6)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2352 F77_CHAR_ARG_LEN (1));
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2353
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2354 // We compute the size of iwork because DGELSD in older versions
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2355 // of LAPACK does not return it on a query call.
7124
d07cb867891b [project @ 2007-11-08 01:09:44 by jwe]
jwe
parents: 7079
diff changeset
2356 double dminmn = static_cast<double> (minmn);
d07cb867891b [project @ 2007-11-08 01:09:44 by jwe]
jwe
parents: 7079
diff changeset
2357 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
2358 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
2359
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2360 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
2361 if (nlvl < 0)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2362 nlvl = 0;
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2363
22971
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2364 F77_INT liwork = 3 * minmn * nlvl + 11 * minmn;
7079
6d3e53a2f963 [project @ 2007-10-30 19:26:32 by jwe]
jwe
parents: 7076
diff changeset
2365 if (liwork < 1)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2366 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
2367 Array<F77_INT> iwork (dim_vector (liwork, 1));
23449
c763214a8260 maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents: 23443
diff changeset
2368 F77_INT *piwork = iwork.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
2369
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2370 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
2371 F77_INT tmp_rank = 0;
7072
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2372
b48d486f641d [project @ 2007-10-26 15:52:57 by jwe]
jwe
parents: 7071
diff changeset
2373 F77_XFCN (dgelsd, DGELSD, (m, n, nrhs, tmp_data, m, 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
2374 ps, rcon, tmp_rank, 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
2375 lwork, 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
2376
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2377 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
2378 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
2379
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2380 lwork = static_cast<F77_INT> (work(0));
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
2381 work.resize (dim_vector (lwork, 1));
7482
29980c6b8604 don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents: 7478
diff changeset
2382
29980c6b8604 don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents: 7478
diff changeset
2383 F77_XFCN (dgelsd, DGELSD, (m, n, nrhs, tmp_data, m, 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
2384 maxmn, ps, rcon, tmp_rank,
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2385 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
2386 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
2387
d244af1d0bc7 use F77_INT instead of octave_idx_type for liboctave Matrix classes
John W. Eaton <jwe@octave.org>
parents: 22849
diff changeset
2388 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
2389 rank = tmp_rank;
7482
29980c6b8604 don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents: 7478
diff changeset
2390
29980c6b8604 don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents: 7478
diff changeset
2391 if (rank < minmn)
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2392 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2393 if (s.elem (0) == 0.0)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2394 rcon = 0.0;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2395 else
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2396 rcon = s.elem (minmn - 1) / s.elem (0);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2397 }
7482
29980c6b8604 don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents: 7478
diff changeset
2398
22848
a3bd04422a87 don't pass two dimensions to column vector resize method
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
2399 retval.resize (n);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2400 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2401
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2402 return retval;
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
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2405 ComplexColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2406 Matrix::lssolve (const ComplexColumnVector& b) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2407 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2408 ComplexMatrix tmp (*this);
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2409 octave_idx_type info;
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2410 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2411 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2412 return tmp.lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2413 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2414
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2415 ComplexColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2416 Matrix::lssolve (const ComplexColumnVector& b, octave_idx_type& info) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2417 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2418 ComplexMatrix tmp (*this);
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2419 octave_idx_type rank;
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2420 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2421 return tmp.lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2422 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2423
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2424 ComplexColumnVector
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2425 Matrix::lssolve (const ComplexColumnVector& b, octave_idx_type& info,
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2426 octave_idx_type& rank) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2427 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2428 ComplexMatrix tmp (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2429 double rcon;
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2430 return tmp.lssolve (b, info, rank, rcon);
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2431 }
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2432
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2433 ComplexColumnVector
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2434 Matrix::lssolve (const ComplexColumnVector& b, octave_idx_type& info,
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
2435 octave_idx_type& rank, double& rcon) const
7076
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2436 {
0bade2dc44a1 [project @ 2007-10-29 18:09:57 by jwe]
jwe
parents: 7072
diff changeset
2437 ComplexMatrix tmp (*this);
7788
45f5faba05a2 Add the rcond function
David Bateman <dbateman@free.fr>
parents: 7620
diff changeset
2438 return tmp.lssolve (b, info, rank, rcon);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2439 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2440
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2441 Matrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2442 Matrix::operator += (const DiagMatrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2443 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2444 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2445 octave_idx_type nc = cols ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2446
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2447 octave_idx_type a_nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2448 octave_idx_type a_nc = a.cols ();
2385
170053c0f75e [project @ 1996-10-12 18:23:01 by jwe]
jwe
parents: 2354
diff changeset
2449
170053c0f75e [project @ 1996-10-12 18:23:01 by jwe]
jwe
parents: 2354
diff changeset
2450 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
2451 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
2452
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2453 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
2454 elem (i, i) += a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2455
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2456 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2457 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2459 Matrix&
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2460 Matrix::operator -= (const DiagMatrix& a)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2461 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2462 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2463 octave_idx_type nc = cols ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2464
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2465 octave_idx_type a_nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2466 octave_idx_type a_nc = a.cols ();
2385
170053c0f75e [project @ 1996-10-12 18:23:01 by jwe]
jwe
parents: 2354
diff changeset
2467
170053c0f75e [project @ 1996-10-12 18:23:01 by jwe]
jwe
parents: 2354
diff changeset
2468 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
2469 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
2470
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2471 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
2472 elem (i, i) -= a.elem (i, i);
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2473
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2474 return *this;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2475 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2476
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2477 // unary operations
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2478
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2479 // column vector by row vector -> matrix operations
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2480
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2481 Matrix
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2482 operator * (const ColumnVector& v, const RowVector& a)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2483 {
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2484 Matrix retval;
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2485
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2486 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
2487
98d0ee053ba4 [project @ 1999-01-27 20:23:40 by jwe]
jwe
parents: 3225
diff changeset
2488 if (len != 0)
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2489 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2490 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
2491
9359
be6867ba8104 avoid useless zero initialization when doing matrix multiply
Jaroslav Hajek <highegg@gmail.com>
parents: 9227
diff changeset
2492 retval = Matrix (len, a_len);
3233
98d0ee053ba4 [project @ 1999-01-27 20:23:40 by jwe]
jwe
parents: 3225
diff changeset
2493 double *c = retval.fortran_vec ();
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2494
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4513
diff changeset
2495 F77_XFCN (dgemm, DGEMM, (F77_CONST_CHAR_ARG2 ("N", 1),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2496 F77_CONST_CHAR_ARG2 ("N", 1),
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2497 len, a_len, 1, 1.0, v.data (), len,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2498 a.data (), 1, 0.0, c, len
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2499 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2500 F77_CHAR_ARG_LEN (1)));
1205
8302fab9fe24 [project @ 1995-04-04 02:05:01 by jwe]
jwe
parents: 1195
diff changeset
2501 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2502
1948
d7dec93d4b87 [project @ 1996-02-14 03:45:49 by jwe]
jwe
parents: 1882
diff changeset
2503 return retval;
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2504 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2505
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2506 // other operations.
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2507
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2508 // FIXME: Do these really belong here? Maybe they should be in a base class?
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2509
2832
4dff308e9acc [project @ 1997-03-26 05:16:58 by jwe]
jwe
parents: 2828
diff changeset
2510 boolMatrix
4015
6476dd85a65f [project @ 2002-08-02 07:59:19 by jwe]
jwe
parents: 3887
diff changeset
2511 Matrix::all (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2512 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2513 return NDArray::all (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2514 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2515
2832
4dff308e9acc [project @ 1997-03-26 05:16:58 by jwe]
jwe
parents: 2828
diff changeset
2516 boolMatrix
4015
6476dd85a65f [project @ 2002-08-02 07:59:19 by jwe]
jwe
parents: 3887
diff changeset
2517 Matrix::any (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2518 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2519 return NDArray::any (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2520 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2521
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2522 Matrix
3723
4c3774db5b3c [project @ 2000-10-12 05:10:08 by jwe]
jwe
parents: 3585
diff changeset
2523 Matrix::cumprod (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2524 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2525 return NDArray::cumprod (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2526 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2527
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2528 Matrix
3723
4c3774db5b3c [project @ 2000-10-12 05:10:08 by jwe]
jwe
parents: 3585
diff changeset
2529 Matrix::cumsum (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2530 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2531 return NDArray::cumsum (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2532 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2533
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2534 Matrix
3723
4c3774db5b3c [project @ 2000-10-12 05:10:08 by jwe]
jwe
parents: 3585
diff changeset
2535 Matrix::prod (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2536 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2537 return NDArray::prod (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2538 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2539
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2540 Matrix
3723
4c3774db5b3c [project @ 2000-10-12 05:10:08 by jwe]
jwe
parents: 3585
diff changeset
2541 Matrix::sum (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2542 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2543 return NDArray::sum (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2544 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2545
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2546 Matrix
3723
4c3774db5b3c [project @ 2000-10-12 05:10:08 by jwe]
jwe
parents: 3585
diff changeset
2547 Matrix::sumsq (int dim) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2548 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2549 return NDArray::sumsq (dim);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2550 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2551
2385
170053c0f75e [project @ 1996-10-12 18:23:01 by jwe]
jwe
parents: 2354
diff changeset
2552 Matrix
170053c0f75e [project @ 1996-10-12 18:23:01 by jwe]
jwe
parents: 2354
diff changeset
2553 Matrix::abs (void) const
170053c0f75e [project @ 1996-10-12 18:23:01 by jwe]
jwe
parents: 2354
diff changeset
2554 {
19321
3746b92739f7 Replace some duplicated code and count on methods implemented on base classes.
Carnë Draug <carandraug@octave.org>
parents: 19320
diff changeset
2555 return NDArray::abs ();
2385
170053c0f75e [project @ 1996-10-12 18:23:01 by jwe]
jwe
parents: 2354
diff changeset
2556 }
170053c0f75e [project @ 1996-10-12 18:23:01 by jwe]
jwe
parents: 2354
diff changeset
2557
7620
36594d5bbe13 Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents: 7544
diff changeset
2558 Matrix
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2559 Matrix::diag (octave_idx_type k) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2560 {
19320
d0c73e23a505 Change inheritance tree so that <T>Matrix inherit from <T>NDArray.
Carnë Draug <carandraug@octave.org>
parents: 19269
diff changeset
2561 return NDArray::diag (k);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2562 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2563
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
2564 DiagMatrix
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2565 Matrix::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
2566 {
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2567 DiagMatrix retval;
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2568
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2569 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
2570 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
2571
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2572 if (nr == 1 || nc == 1)
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2573 retval = DiagMatrix (*this, m, n);
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2574 else
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
2575 (*current_liboctave_error_handler) ("diag: expecting vector argument");
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
2576
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2577 return retval;
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2578 }
e8e86ae3abbc make diag (x, m, n) return a proper diagonal matrix object (bug #36099)
John W. Eaton <jwe@octave.org>
parents: 14427
diff changeset
2579
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2580 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2581 Matrix::row_min (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2582 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2583 Array<octave_idx_type> dummy_idx;
4587
7b957b442818 [project @ 2003-11-10 15:50:39 by jwe]
jwe
parents: 4574
diff changeset
2584 return row_min (dummy_idx);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2585 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2586
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2587 ColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2588 Matrix::row_min (Array<octave_idx_type>& idx_arg) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2589 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2590 ColumnVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2591
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2592 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2593 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2594
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2595 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2596 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2597 result.resize (nr);
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
2598 idx_arg.resize (dim_vector (nr, 1));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2599
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2600 for (octave_idx_type i = 0; i < nr; i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2601 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2602 octave_idx_type idx_j;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2603
21723
bae585228161 use namespace for numeric_limits
John W. Eaton <jwe@octave.org>
parents: 21721
diff changeset
2604 double tmp_min = octave::numeric_limits<double>::NaN ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2605
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2606 for (idx_j = 0; idx_j < nc; idx_j++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2607 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2608 tmp_min = elem (i, idx_j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2609
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
2610 if (! octave::math::isnan (tmp_min))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2611 break;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2612 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2613
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2614 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
2615 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2616 double tmp = elem (i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2617
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
2618 if (octave::math::isnan (tmp))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2619 continue;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2620 else if (tmp < tmp_min)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2621 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2622 idx_j = j;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2623 tmp_min = tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2624 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2625 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2626
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2627 result.elem (i) = tmp_min;
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23449
diff changeset
2628 idx_arg.elem (i) = (octave::math::isnan (tmp_min) ? 0 : idx_j);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2629 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2630 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2631
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2632 return result;
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 ColumnVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2636 Matrix::row_max (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2637 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2638 Array<octave_idx_type> dummy_idx;
4587
7b957b442818 [project @ 2003-11-10 15:50:39 by jwe]
jwe
parents: 4574
diff changeset
2639 return row_max (dummy_idx);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2640 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2641
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2642 ColumnVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2643 Matrix::row_max (Array<octave_idx_type>& idx_arg) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2644 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2645 ColumnVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2646
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2647 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2648 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2649
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2650 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2651 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2652 result.resize (nr);
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
2653 idx_arg.resize (dim_vector (nr, 1));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2654
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2655 for (octave_idx_type i = 0; i < nr; i++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2656 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2657 octave_idx_type idx_j;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2658
21723
bae585228161 use namespace for numeric_limits
John W. Eaton <jwe@octave.org>
parents: 21721
diff changeset
2659 double tmp_max = octave::numeric_limits<double>::NaN ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2660
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2661 for (idx_j = 0; idx_j < nc; idx_j++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2662 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2663 tmp_max = elem (i, idx_j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2664
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
2665 if (! octave::math::isnan (tmp_max))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2666 break;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2667 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2668
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2669 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
2670 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2671 double tmp = elem (i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2672
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
2673 if (octave::math::isnan (tmp))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2674 continue;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2675 else if (tmp > tmp_max)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2676 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2677 idx_j = j;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2678 tmp_max = tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2679 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2680 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2681
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2682 result.elem (i) = tmp_max;
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23449
diff changeset
2683 idx_arg.elem (i) = (octave::math::isnan (tmp_max) ? 0 : idx_j);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2684 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2685 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2686
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2687 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2688 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2689
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2690 RowVector
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2691 Matrix::column_min (void) const
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2692 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2693 Array<octave_idx_type> dummy_idx;
4587
7b957b442818 [project @ 2003-11-10 15:50:39 by jwe]
jwe
parents: 4574
diff changeset
2694 return column_min (dummy_idx);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2695 }
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
2696
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2697 RowVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2698 Matrix::column_min (Array<octave_idx_type>& idx_arg) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2699 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2700 RowVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2701
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2702 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2703 octave_idx_type nc = cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2704
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2705 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2706 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2707 result.resize (nc);
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
2708 idx_arg.resize (dim_vector (1, nc));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2709
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2710 for (octave_idx_type j = 0; j < nc; j++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2711 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2712 octave_idx_type idx_i;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2713
21723
bae585228161 use namespace for numeric_limits
John W. Eaton <jwe@octave.org>
parents: 21721
diff changeset
2714 double tmp_min = octave::numeric_limits<double>::NaN ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2715
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2716 for (idx_i = 0; idx_i < nr; idx_i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2717 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2718 tmp_min = elem (idx_i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2719
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
2720 if (! octave::math::isnan (tmp_min))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2721 break;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2722 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2723
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2724 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
2725 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2726 double tmp = elem (i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2727
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
2728 if (octave::math::isnan (tmp))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2729 continue;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2730 else if (tmp < tmp_min)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2731 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2732 idx_i = i;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2733 tmp_min = tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2734 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2735 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2736
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2737 result.elem (j) = tmp_min;
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23449
diff changeset
2738 idx_arg.elem (j) = (octave::math::isnan (tmp_min) ? 0 : idx_i);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2739 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2740 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2741
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2742 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2743 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2744
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
2745 RowVector
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
2746 Matrix::column_max (void) const
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
2747 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2748 Array<octave_idx_type> dummy_idx;
4587
7b957b442818 [project @ 2003-11-10 15:50:39 by jwe]
jwe
parents: 4574
diff changeset
2749 return column_max (dummy_idx);
2354
2ce6e1ec9b53 [project @ 1996-08-20 22:44:25 by jwe]
jwe
parents: 2349
diff changeset
2750 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2751
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2752 RowVector
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2753 Matrix::column_max (Array<octave_idx_type>& idx_arg) const
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2754 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2755 RowVector result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2756
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2757 octave_idx_type nr = rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2758 octave_idx_type nc = cols ();
458
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 if (nr > 0 && nc > 0)
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2761 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2762 result.resize (nc);
11574
a83bad07f7e3 attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
2763 idx_arg.resize (dim_vector (1, nc));
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2764
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2765 for (octave_idx_type j = 0; j < nc; j++)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2766 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2767 octave_idx_type idx_i;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2768
21723
bae585228161 use namespace for numeric_limits
John W. Eaton <jwe@octave.org>
parents: 21721
diff changeset
2769 double tmp_max = octave::numeric_limits<double>::NaN ();
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2770
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2771 for (idx_i = 0; idx_i < nr; idx_i++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2772 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2773 tmp_max = elem (idx_i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2774
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
2775 if (! octave::math::isnan (tmp_max))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2776 break;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2777 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2778
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2779 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
2780 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2781 double tmp = elem (i, j);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2782
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
2783 if (octave::math::isnan (tmp))
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2784 continue;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2785 else if (tmp > tmp_max)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2786 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2787 idx_i = i;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2788 tmp_max = tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2789 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2790 }
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2791
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2792 result.elem (j) = tmp_max;
23450
855122b993da maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents: 23449
diff changeset
2793 idx_arg.elem (j) = (octave::math::isnan (tmp_max) ? 0 : idx_i);
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2794 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2795 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2796
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2797 return result;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2798 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2799
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3503
diff changeset
2800 std::ostream&
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3503
diff changeset
2801 operator << (std::ostream& os, const Matrix& a)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2802 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2803 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
2804 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2805 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
2806 {
23807
336f89b6208b Use character literals 'c' rather than string literals "c" when possible.
Rik <rik@octave.org>
parents: 23795
diff changeset
2807 os << ' ';
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2808 octave_write_double (os, a.elem (i, j));
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2809 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2810 os << "\n";
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2811 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2812 return os;
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2813 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2814
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3503
diff changeset
2815 std::istream&
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3503
diff changeset
2816 operator >> (std::istream& is, Matrix& a)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2817 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2818 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2819 octave_idx_type nc = a.cols ();
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2820
8999
dc07bc4157b8 allow empty matrices in stream input operators
Jaroslav Hajek <highegg@gmail.com>
parents: 8956
diff changeset
2821 if (nr > 0 && nc > 0)
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2822 {
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2823 double tmp;
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
2824 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
2825 for (octave_idx_type j = 0; j < nc; j++)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2826 {
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2827 tmp = octave_read_value<double> (is);
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2828 if (is)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2829 a.elem (i, j) = tmp;
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2830 else
21169
40051830f89b maint: Replace more instances of goto in liboctave with other constructs.
Rik <rik@octave.org>
parents: 21136
diff changeset
2831 return is;
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2832 }
458
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2833 }
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2834
38cb88095913 [project @ 1994-06-06 00:41:10 by jwe]
jwe
parents:
diff changeset
2835 return is;
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
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2838 Matrix
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2839 Givens (double x, double y)
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2840 {
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2841 double cc, s, temp_r;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2842
3887
7da18459c08b [project @ 2002-04-04 00:44:21 by jwe]
jwe
parents: 3864
diff changeset
2843 F77_FUNC (dlartg, DLARTG) (x, y, cc, s, temp_r);
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2844
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2845 Matrix g (2, 2);
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2846
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2847 g.elem (0, 0) = cc;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2848 g.elem (1, 1) = cc;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2849 g.elem (0, 1) = s;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2850 g.elem (1, 0) = -s;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2851
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2852 return g;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2853 }
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2854
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2855 Matrix
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2856 Sylvester (const Matrix& a, const Matrix& b, const Matrix& c)
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2857 {
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2858 Matrix retval;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2859
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2860 // 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: 1698
diff changeset
2861
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2862 // Compute Schur decompositions.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2863
22317
6ca3acf5fad8 move some new numeric classes to namespace octave::math
John W. Eaton <jwe@octave.org>
parents: 22274
diff changeset
2864 octave::math::schur<Matrix> as (a, "U");
6ca3acf5fad8 move some new numeric classes to namespace octave::math
John W. Eaton <jwe@octave.org>
parents: 22274
diff changeset
2865 octave::math::schur<Matrix> bs (b, "U");
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2866
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2867 // Transform c to new coordinates.
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2868
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2869 Matrix ua = as.unitary_matrix ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2870 Matrix sch_a = as.schur_matrix ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2871
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2872 Matrix ub = bs.unitary_matrix ();
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2873 Matrix sch_b = bs.schur_matrix ();
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2874
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2875 Matrix cx = ua.transpose () * c * ub;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2876
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2877 // Solve the sylvester equation, back-transform, and return the solution.
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2878
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2879 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: 22971
diff changeset
2880 F77_INT b_nr = octave::to_f77_int (b.rows ());
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2881
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2882 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
2883 F77_INT info;
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2884
1950
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
2885 double *pa = sch_a.fortran_vec ();
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
2886 double *pb = sch_b.fortran_vec ();
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
2887 double *px = cx.fortran_vec ();
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
2888
4552
6f3382e08a52 [project @ 2003-10-27 20:38:02 by jwe]
jwe
parents: 4513
diff changeset
2889 F77_XFCN (dtrsyl, DTRSYL, (F77_CONST_CHAR_ARG2 ("N", 1),
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2890 F77_CONST_CHAR_ARG2 ("N", 1),
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2891 1, a_nr, b_nr, pa, a_nr, pb,
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2892 b_nr, px, a_nr, scale, info
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2893 F77_CHAR_ARG_LEN (1)
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
2894 F77_CHAR_ARG_LEN (1)));
1950
ab6abe89aaa1 [project @ 1996-02-14 04:36:21 by jwe]
jwe
parents: 1948
diff changeset
2895
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
2896 // FIXME: check info?
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2897
19065
d20c81d3cd21 Deprecate syl, add new function sylvester.
Rik <rik@octave.org>
parents: 18850
diff changeset
2898 retval = ua*cx*ub.transpose ();
1819
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2899
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2900 return retval;
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2901 }
8b8498bf8ec5 [project @ 1996-01-31 11:29:17 by jwe]
jwe
parents: 1698
diff changeset
2902
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
2903 // matrix by matrix -> matrix operations
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
2904
14427
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
2905 /*
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
2906
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
2907 ## 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
2908 %!assert ([1 2 3] * [ 4 ; 5 ; 6], 32, 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
2909 %!assert ([1 2 ; 3 4 ] * [5 ; 6], [17 ; 39 ], 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
2910 %!assert ([1 2 ; 3 4 ] * [5 6 ; 7 8], [19 22; 43 50], 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
2911
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
2912 ## Test some simple identities
12992
0413227e407b dMatrix.cc: Fix tests introduced by changeset f217edac2c71. Declare variables
Marco atzeri <marco.atzeri@gmail.com>
parents: 12986
diff changeset
2913 %!shared M, cv, rv, Mt, rvt
14427
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
2914 %! M = randn (10,10) + 100*eye (10,10);
12986
f217edac2c71 fix dimension check for A'\B (bug #33997)
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
2915 %! Mt = M';
14427
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
2916 %! cv = randn (10,1);
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
2917 %! rv = randn (1,10);
12986
f217edac2c71 fix dimension check for A'\B (bug #33997)
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
2918 %! rvt = rv';
22152
19d54df7d719 test: increase tolerance on Matrix tests
Mike Miller <mtmiller@octave.org>
parents: 22133
diff changeset
2919 %!assert ([M*cv,M*cv], M*[cv,cv], 2e-13)
19d54df7d719 test: increase tolerance on Matrix tests
Mike Miller <mtmiller@octave.org>
parents: 22133
diff changeset
2920 %!assert ([M'*cv,M'*cv], M'*[cv,cv], 2e-13)
19d54df7d719 test: increase tolerance on Matrix tests
Mike Miller <mtmiller@octave.org>
parents: 22133
diff changeset
2921 %!assert ([rv*M;rv*M], [rv;rv]*M, 2e-13)
19d54df7d719 test: increase tolerance on Matrix tests
Mike Miller <mtmiller@octave.org>
parents: 22133
diff changeset
2922 %!assert ([rv*M';rv*M'], [rv;rv]*M', 2e-13)
19d54df7d719 test: increase tolerance on Matrix tests
Mike Miller <mtmiller@octave.org>
parents: 22133
diff changeset
2923 %!assert (2*rv*cv, [rv,rv]*[cv;cv], 2e-13)
14427
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
2924 %!assert (M'\cv, Mt\cv, 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
2925 %!assert (M'\rv', Mt\rvt, 1e-14)
d07e989686b0 Use Octave coding conventions in liboctave %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
2926
6162
b3c425131211 [project @ 2006-11-14 15:33:22 by jwe]
jwe
parents: 5983
diff changeset
2927 */
b3c425131211 [project @ 2006-11-14 15:33:22 by jwe]
jwe
parents: 5983
diff changeset
2928
11516
53edbf95fbb6 avoid GCC warnings
John W. Eaton <jwe@octave.org>
parents: 11130
diff changeset
2929 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
2930 get_blas_trans_arg (bool trans)
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2931 {
11516
53edbf95fbb6 avoid GCC warnings
John W. Eaton <jwe@octave.org>
parents: 11130
diff changeset
2932 return trans ? '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
2933 }
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2934
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2935 // 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
2936
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2937 Matrix
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
2938 xgemm (const Matrix& a, const Matrix& b,
9665
1dba57e9d08d use blas_trans_type for xgemm
Jaroslav Hajek <highegg@gmail.com>
parents: 9662
diff changeset
2939 blas_trans_type transa, blas_trans_type transb)
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
2940 {
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
2941 Matrix retval;
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
2942
18084
8e056300994b Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents: 18083
diff changeset
2943 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
2944 bool trb = transb != blas_no_trans;
9665
1dba57e9d08d use blas_trans_type for xgemm
Jaroslav Hajek <highegg@gmail.com>
parents: 9662
diff changeset
2945
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2946 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: 22971
diff changeset
2947 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: 22971
diff changeset
2948
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2949 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: 22971
diff changeset
2950 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
2951
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
2952 if (a_nc != b_nr)
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
2953 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
2954
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2955 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
2956 retval = Matrix (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
2957 else if (a.data () == b.data () && a_nr == b_nc && tra != trb)
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2958 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2959 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
2960
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2961 retval = Matrix (a_nr, b_nc);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2962 double *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
2963
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2964 const char ctra = get_blas_trans_arg (tra);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2965 F77_XFCN (dsyrk, DSYRK, (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
2966 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
2967 a_nr, a_nc, 1.0,
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2968 a.data (), lda, 0.0, c, a_nr
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2969 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
2970 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
2971 for (int j = 0; j < a_nr; j++)
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2972 for (int i = 0; i < j; i++)
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2973 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
2974
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2975 }
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
2976 else
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
2977 {
22988
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2978 F77_INT lda = octave::to_f77_int (a.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2979 F77_INT tda = octave::to_f77_int (a.cols ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2980 F77_INT ldb = octave::to_f77_int (b.rows ());
cd33c785e80e put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22971
diff changeset
2981 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
2982
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2983 retval = Matrix (a_nr, b_nc);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2984 double *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
2985
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2986 if (b_nc == 1)
7801
776791438957 map symmetric cases to xHERK, xSYRK
Jaroslav Hajek <highegg@gmail.com>
parents: 7800
diff changeset
2987 {
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2988 if (a_nr == 1)
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2989 F77_FUNC (xddot, XDDOT) (a_nc, a.data (), 1, b.data (), 1, *c);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2990 else
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2991 {
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2992 const char ctra = get_blas_trans_arg (tra);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2993 F77_XFCN (dgemv, DGEMV, (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
2994 lda, tda, 1.0, a.data (), lda,
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2995 b.data (), 1, 0.0, c, 1
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2996 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
2997 }
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2998 }
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
2999 else if (a_nr == 1)
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3000 {
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3001 const char crevtrb = get_blas_trans_arg (! trb);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3002 F77_XFCN (dgemv, DGEMV, (F77_CONST_CHAR_ARG2 (&crevtrb, 1),
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3003 ldb, tdb, 1.0, b.data (), ldb,
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3004 a.data (), 1, 0.0, c, 1
7801
776791438957 map symmetric cases to xHERK, xSYRK
Jaroslav Hajek <highegg@gmail.com>
parents: 7800
diff changeset
3005 F77_CHAR_ARG_LEN (1)));
776791438957 map symmetric cases to xHERK, xSYRK
Jaroslav Hajek <highegg@gmail.com>
parents: 7800
diff changeset
3006 }
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
3007 else
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3008 {
21120
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3009 const char ctra = get_blas_trans_arg (tra);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3010 const char ctrb = get_blas_trans_arg (trb);
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3011 F77_XFCN (dgemm, DGEMM, (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
3012 F77_CONST_CHAR_ARG2 (&ctrb, 1),
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3013 a_nr, b_nc, a_nc, 1.0, a.data (),
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3014 lda, b.data (), ldb, 0.0, c, a_nr
499b851fbfae Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
Rik <rik@octave.org>
parents: 21112
diff changeset
3015 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
3016 F77_CHAR_ARG_LEN (1)));
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3017 }
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
3018 }
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
3019
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
3020 return retval;
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
3021 }
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2800
diff changeset
3022
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
3023 Matrix
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3024 operator * (const Matrix& a, const Matrix& 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
3025 {
9665
1dba57e9d08d use blas_trans_type for xgemm
Jaroslav Hajek <highegg@gmail.com>
parents: 9662
diff changeset
3026 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
3027 }
5861b95e9879 support for compound operators, implement trans_mul, mul_trans, herm_mul and mul_herm
Jaroslav Hajek <highegg@gmail.com>
parents: 7789
diff changeset
3028
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
3029 // 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: 4293
diff changeset
3030
22197
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22152
diff changeset
3031 #define EMPTY_RETURN_CHECK(T) \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22152
diff changeset
3032 if (nr == 0 || nc == 0) \
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3033 return T (nr, nc);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3034
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3035 Matrix
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3036 min (double d, const Matrix& m)
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3037 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3038 octave_idx_type nr = m.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3039 octave_idx_type nc = m.columns ();
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3040
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3041 EMPTY_RETURN_CHECK (Matrix);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3042
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3043 Matrix result (nr, nc);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3044
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3045 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3046 for (octave_idx_type i = 0; i < nr; i++)
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3047 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3048 octave_quit ();
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3049 result(i, j) = octave::math::min (d, m(i, j));
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3050 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3051
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3052 return result;
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3053 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3054
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3055 Matrix
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3056 min (const Matrix& m, double d)
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3057 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3058 octave_idx_type nr = m.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3059 octave_idx_type nc = m.columns ();
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3060
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3061 EMPTY_RETURN_CHECK (Matrix);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3062
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3063 Matrix result (nr, nc);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3064
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3065 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3066 for (octave_idx_type i = 0; i < nr; i++)
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3067 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3068 octave_quit ();
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3069 result(i, j) = octave::math::min (m(i, j), d);
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3070 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3071
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3072 return result;
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3073 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3074
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3075 Matrix
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3076 min (const Matrix& a, const Matrix& b)
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3077 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3078 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3079 octave_idx_type nc = a.columns ();
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3080
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3081 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
3082 (*current_liboctave_error_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
3083 ("two-arg min requires same size arguments");
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3084
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3085 EMPTY_RETURN_CHECK (Matrix);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3086
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3087 Matrix result (nr, nc);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3088
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3089 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3090 for (octave_idx_type i = 0; i < nr; i++)
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3091 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3092 octave_quit ();
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3093 result(i, j) = octave::math::min (a(i, j), b(i, j));
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3094 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3095
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3096 return result;
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3097 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3098
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3099 Matrix
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3100 max (double d, const Matrix& m)
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3101 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3102 octave_idx_type nr = m.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3103 octave_idx_type nc = m.columns ();
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3104
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3105 EMPTY_RETURN_CHECK (Matrix);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3106
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3107 Matrix result (nr, nc);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3108
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3109 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3110 for (octave_idx_type i = 0; i < nr; i++)
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3111 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3112 octave_quit ();
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3113 result(i, j) = octave::math::max (d, m(i, j));
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3114 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3115
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3116 return result;
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3117 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3118
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3119 Matrix
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3120 max (const Matrix& m, double d)
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3121 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3122 octave_idx_type nr = m.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3123 octave_idx_type nc = m.columns ();
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3124
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3125 EMPTY_RETURN_CHECK (Matrix);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3126
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3127 Matrix result (nr, nc);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3128
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3129 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3130 for (octave_idx_type i = 0; i < nr; i++)
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3131 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3132 octave_quit ();
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3133 result(i, j) = octave::math::max (m(i, j), d);
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3134 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3135
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3136 return result;
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3137 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3138
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3139 Matrix
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3140 max (const Matrix& a, const Matrix& b)
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3141 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3142 octave_idx_type nr = a.rows ();
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3143 octave_idx_type nc = a.columns ();
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3144
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3145 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
3146 (*current_liboctave_error_handler)
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 21129
diff changeset
3147 ("two-arg max requires same size arguments");
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3148
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3149 EMPTY_RETURN_CHECK (Matrix);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3150
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3151 Matrix result (nr, nc);
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3152
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3153 for (octave_idx_type j = 0; j < nc; j++)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
3154 for (octave_idx_type i = 0; i < nr; i++)
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3155 {
10314
07ebe522dac2 untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents: 10213
diff changeset
3156 octave_quit ();
21782
2aef506f3fec use namespace for lo-mappers.h functions
John W. Eaton <jwe@octave.org>
parents: 21751
diff changeset
3157 result(i, j) = octave::math::max (a(i, j), b(i, j));
4309
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3158 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3159
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3160 return result;
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3161 }
a9560cebae6e [project @ 2003-01-28 23:24:58 by jwe]
jwe
parents: 4293
diff changeset
3162
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
3163 Matrix linspace (const ColumnVector& x1,
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11574
diff changeset
3164 const ColumnVector& x2,
9653
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3165 octave_idx_type n)
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3166
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3167 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
3168 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
3169
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
3170 if (x2.numel () != m)
17769
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
3171 (*current_liboctave_error_handler)
49a5a4be04a1 maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents: 17744
diff changeset
3172 ("linspace: vectors must be of equal length");
9653
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3173
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3174 NoAlias<Matrix> retval;
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3175
20466
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3176 if (n < 1)
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3177 {
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3178 retval.clear (m, 0);
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3179 return retval;
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3180 }
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3181
9653
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3182 retval.clear (m, n);
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3183 for (octave_idx_type i = 0; i < m; i++)
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3184 retval(i, 0) = x1(i);
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3185
20466
16b9ec39ff46 Return empty matrix when linspace called with 0 points (bug #45820)
Rik <rik@octave.org>
parents: 20462
diff changeset
3186 // 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
3187 double *delta = &retval(0, n-1);
9653
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3188 for (octave_idx_type i = 0; i < m; i++)
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3189 delta[i] = (x2(i) - x1(i)) / (n - 1);
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3190
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3191 for (octave_idx_type j = 1; j < n-1; j++)
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3192 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
3193 retval(i, j) = x1(i) + j*delta[i];
9653
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3194
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3195 for (octave_idx_type i = 0; i < m; i++)
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3196 retval(i, n-1) = x2(i);
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3197
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3198 return retval;
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3199 }
e087d7c77ff9 improve linspace in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9601
diff changeset
3200
9578
7dafdb8b062f refactor comparison ops implementations
Jaroslav Hajek <highegg@gmail.com>
parents: 9553
diff changeset
3201 MS_CMP_OPS (Matrix, double)
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9528
diff changeset
3202 MS_BOOL_OPS (Matrix, double)
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
3203
9578
7dafdb8b062f refactor comparison ops implementations
Jaroslav Hajek <highegg@gmail.com>
parents: 9553
diff changeset
3204 SM_CMP_OPS (double, Matrix)
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9528
diff changeset
3205 SM_BOOL_OPS (double, Matrix)
2870
3241d0057e78 [project @ 1997-04-19 01:21:29 by jwe]
jwe
parents: 2847
diff changeset
3206
9578
7dafdb8b062f refactor comparison ops implementations
Jaroslav Hajek <highegg@gmail.com>
parents: 9553
diff changeset
3207 MM_CMP_OPS (Matrix, Matrix)
9550
3d6a9aea2aea refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents: 9528
diff changeset
3208 MM_BOOL_OPS (Matrix, Matrix)