Mercurial > octave
annotate liboctave/numeric/sparse-qr.cc @ 21215:04866fac690a
use template keyword to handle dependent template names
* sparse-qr.cc (sparse_qr<SPARSE_T>::tall_solve): Use template keyword
to treat tall_solve as a dependent template name.
(sparse_qr<SPARSE_T>::wide_solve): Likewise, for wide_solve.
author | Ben Abbott <bpabbott@mac.comg> |
---|---|
date | Sun, 07 Feb 2016 02:21:37 -0500 |
parents | 945695cafd2b |
children | 40de9f8f23a6 |
rev | line source |
---|---|
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1 /* |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
3 Copyright (C) 2016 John W. Eaton |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4 Copyright (C) 2005-2015 David Bateman |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
5 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
6 This file is part of Octave. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
7 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
8 Octave is free software; you can redistribute it and/or modify it |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
9 under the terms of the GNU General Public License as published by the |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
10 Free Software Foundation; either version 3 of the License, or (at your |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
11 option) any later version. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
12 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
13 Octave is distributed in the hope that it will be useful, but WITHOUT |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
16 for more details. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
17 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
18 You should have received a copy of the GNU General Public License |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
19 along with Octave; see the file COPYING. If not, see |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
20 <http://www.gnu.org/licenses/>. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
21 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
22 */ |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
23 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
24 #ifdef HAVE_CONFIG_H |
21202
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
21186
diff
changeset
|
25 # include <config.h> |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
26 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
27 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
28 #include "lo-error.h" |
21186
7f35125714b4
don't install some internal headers and template sources
John W. Eaton <jwe@octave.org>
parents:
21177
diff
changeset
|
29 #include "oct-locbuf.h" |
7f35125714b4
don't install some internal headers and template sources
John W. Eaton <jwe@octave.org>
parents:
21177
diff
changeset
|
30 #include "oct-sparse.h" |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
31 #include "sparse-qr.h" |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
32 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
33 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
34 class |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
35 cxsparse_types |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
36 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
37 }; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
38 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
39 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
40 class |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
41 cxsparse_types<SparseMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
42 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
43 public: |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
44 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
45 typedef CXSPARSE_DNAME (s) symbolic_type; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
46 typedef CXSPARSE_DNAME (n) numeric_type; |
21207
945695cafd2b
allow build to succeed with missing dependencies
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
47 #else |
945695cafd2b
allow build to succeed with missing dependencies
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
48 typedef void symbolic_type; |
945695cafd2b
allow build to succeed with missing dependencies
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
49 typedef void numeric_type; |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
50 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
51 }; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
52 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
53 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
54 class |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
55 cxsparse_types<SparseComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
56 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
57 public: |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
58 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
59 typedef CXSPARSE_ZNAME (s) symbolic_type; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
60 typedef CXSPARSE_ZNAME (n) numeric_type; |
21207
945695cafd2b
allow build to succeed with missing dependencies
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
61 #else |
945695cafd2b
allow build to succeed with missing dependencies
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
62 typedef void symbolic_type; |
945695cafd2b
allow build to succeed with missing dependencies
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
63 typedef void numeric_type; |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
64 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
65 }; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
66 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
67 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
68 class sparse_qr<SPARSE_T>::sparse_qr_rep |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
69 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
70 public: |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
71 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
72 sparse_qr_rep (const SPARSE_T& a, int order); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
73 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
74 ~sparse_qr_rep (void); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
75 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
76 bool ok (void) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
77 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
78 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
79 return (N && S); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
80 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
81 return false; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
82 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
83 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
84 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
85 SPARSE_T V (void) const; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
86 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
87 ColumnVector Pinv (void) const; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
88 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
89 ColumnVector P (void) const; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
90 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
91 SPARSE_T R (bool econ) const; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
92 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
93 typename SPARSE_T::dense_matrix_type |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
94 C (const typename SPARSE_T::dense_matrix_type& b) const; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
95 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
96 typename SPARSE_T::dense_matrix_type |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
97 Q (void) const; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
98 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
99 octave_refcount<int> count; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
100 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
101 octave_idx_type nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
102 octave_idx_type ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
103 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
104 typename cxsparse_types<SPARSE_T>::symbolic_type *S; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
105 typename cxsparse_types<SPARSE_T>::numeric_type *N; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
106 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
107 template <typename RHS_T, typename RET_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
108 RET_T |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
109 tall_solve (const RHS_T& b, octave_idx_type& info) const; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
110 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
111 template <typename RHS_T, typename RET_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
112 RET_T |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
113 wide_solve (const RHS_T& b, octave_idx_type& info) const; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
114 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
115 private: |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
116 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
117 // No copying! |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
118 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
119 sparse_qr_rep (const sparse_qr_rep&); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
120 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
121 sparse_qr_rep& operator = (const sparse_qr_rep&); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
122 }; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
123 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
124 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
125 ColumnVector |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
126 sparse_qr<SPARSE_T>::sparse_qr_rep::Pinv (void) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
127 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
128 #if defined (HAVE_CXSPARSE) |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
129 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
130 ColumnVector ret (N->L->m); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
131 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
132 for (octave_idx_type i = 0; i < N->L->m; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
133 ret.xelem (i) = S->pinv[i]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
134 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
135 return ret; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
136 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
137 #else |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
138 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
139 return ColumnVector (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
140 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
141 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
142 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
143 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
144 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
145 ColumnVector |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
146 sparse_qr<SPARSE_T>::sparse_qr_rep::P (void) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
147 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
148 #if defined (HAVE_CXSPARSE) |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
149 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
150 ColumnVector ret (N->L->m); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
151 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
152 for (octave_idx_type i = 0; i < N->L->m; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
153 ret.xelem (S->pinv[i]) = i; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
154 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
155 return ret; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
156 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
157 #else |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
158 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
159 return ColumnVector (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
160 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
161 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
162 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
163 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
164 // Specializations. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
165 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
166 // Real-valued matrices. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
167 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
168 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
169 sparse_qr<SparseMatrix>::sparse_qr_rep::sparse_qr_rep |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
170 (const SparseMatrix& a, int order) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
171 : count (1), nrows (a.rows ()), ncols (a.columns ()) |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
172 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
173 , S (0), N (0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
174 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
175 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
176 #if defined (HAVE_CXSPARSE) |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
177 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
178 CXSPARSE_DNAME () A; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
179 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
180 A.nzmax = a.nnz (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
181 A.m = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
182 A.n = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
183 // Cast away const on A, with full knowledge that CSparse won't touch it |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
184 // Prevents the methods below making a copy of the data. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
185 A.p = const_cast<octave_idx_type *>(a.cidx ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
186 A.i = const_cast<octave_idx_type *>(a.ridx ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
187 A.x = const_cast<double *>(a.data ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
188 A.nz = -1; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
189 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
190 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
191 S = CXSPARSE_DNAME (_sqr) (order, &A, 1); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
192 N = CXSPARSE_DNAME (_qr) (&A, S); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
193 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
194 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
195 if (! N) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
196 (*current_liboctave_error_handler) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
197 ("sparse_qr: sparse matrix QR factorization filled"); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
198 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
199 count = 1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
200 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
201 #else |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
202 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
203 (*current_liboctave_error_handler) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
204 ("sparse_qr: support for CXSparse was unavailable or disabled when liboctave was built"); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
205 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
206 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
207 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
208 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
209 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
210 sparse_qr<SparseMatrix>::sparse_qr_rep::~sparse_qr_rep (void) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
211 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
212 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
213 CXSPARSE_DNAME (_sfree) (S); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
214 CXSPARSE_DNAME (_nfree) (N); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
215 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
216 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
217 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
218 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
219 SparseMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
220 sparse_qr<SparseMatrix>::sparse_qr_rep::V (void) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
221 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
222 #if defined (HAVE_CXSPARSE) |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
223 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
224 // Drop zeros from V and sort |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
225 // FIXME: Is the double transpose to sort necessary? |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
226 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
227 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
228 CXSPARSE_DNAME (_dropzeros) (N->L); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
229 CXSPARSE_DNAME () *D = CXSPARSE_DNAME (_transpose) (N->L, 1); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
230 CXSPARSE_DNAME (_spfree) (N->L); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
231 N->L = CXSPARSE_DNAME (_transpose) (D, 1); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
232 CXSPARSE_DNAME (_spfree) (D); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
233 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
234 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
235 octave_idx_type nc = N->L->n; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
236 octave_idx_type nz = N->L->nzmax; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
237 SparseMatrix ret (N->L->m, nc, nz); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
238 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
239 for (octave_idx_type j = 0; j < nc+1; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
240 ret.xcidx (j) = N->L->p[j]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
241 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
242 for (octave_idx_type j = 0; j < nz; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
243 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
244 ret.xridx (j) = N->L->i[j]; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
245 ret.xdata (j) = N->L->x[j]; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
246 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
247 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
248 return ret; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
249 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
250 #else |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
251 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
252 return SparseMatrix (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
253 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
254 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
255 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
256 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
257 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
258 SparseMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
259 sparse_qr<SparseMatrix>::sparse_qr_rep::R (bool econ) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
260 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
261 #if defined (HAVE_CXSPARSE) |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
262 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
263 // Drop zeros from R and sort |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
264 // FIXME: Is the double transpose to sort necessary? |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
265 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
266 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
267 CXSPARSE_DNAME (_dropzeros) (N->U); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
268 CXSPARSE_DNAME () *D = CXSPARSE_DNAME (_transpose) (N->U, 1); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
269 CXSPARSE_DNAME (_spfree) (N->U); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
270 N->U = CXSPARSE_DNAME (_transpose) (D, 1); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
271 CXSPARSE_DNAME (_spfree) (D); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
272 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
273 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
274 octave_idx_type nc = N->U->n; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
275 octave_idx_type nz = N->U->nzmax; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
276 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
277 SparseMatrix ret ((econ ? (nc > nrows ? nrows : nc) : nrows), nc, nz); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
278 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
279 for (octave_idx_type j = 0; j < nc+1; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
280 ret.xcidx (j) = N->U->p[j]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
281 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
282 for (octave_idx_type j = 0; j < nz; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
283 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
284 ret.xridx (j) = N->U->i[j]; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
285 ret.xdata (j) = N->U->x[j]; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
286 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
287 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
288 return ret; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
289 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
290 #else |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
291 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
292 return SparseMatrix (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
293 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
294 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
295 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
296 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
297 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
298 Matrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
299 sparse_qr<SparseMatrix>::sparse_qr_rep::C (const Matrix& b) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
300 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
301 #if defined (HAVE_CXSPARSE) |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
302 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
303 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
304 octave_idx_type b_nc = b.cols (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
305 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
306 octave_idx_type nc = N->L->n; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
307 octave_idx_type nr = nrows; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
308 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
309 const double *bvec = b.fortran_vec (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
310 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
311 Matrix ret (b_nr, b_nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
312 double *vec = ret.fortran_vec (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
313 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
314 if (nr < 0 || nc < 0 || nr != b_nr) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
315 (*current_liboctave_error_handler) ("matrix dimension mismatch"); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
316 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
317 if (nr == 0 || nc == 0 || b_nc == 0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
318 ret = Matrix (nc, b_nc, 0.0); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
319 else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
320 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
321 OCTAVE_LOCAL_BUFFER (double, buf, S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
322 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
323 for (volatile octave_idx_type j = 0, idx = 0; j < b_nc; j++, idx+=b_nr) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
324 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
325 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
326 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
327 for (octave_idx_type i = nr; i < S->m2; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
328 buf[i] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
329 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
330 volatile octave_idx_type nm = (nr < nc ? nr : nc); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
331 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
332 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
333 CXSPARSE_DNAME (_ipvec) (S->pinv, bvec + idx, buf, b_nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
334 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
335 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
336 for (volatile octave_idx_type i = 0; i < nm; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
337 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
338 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
339 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
340 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
341 CXSPARSE_DNAME (_happly) (N->L, i, N->B[i], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
342 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
343 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
344 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
345 for (octave_idx_type i = 0; i < b_nr; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
346 vec[i+idx] = buf[i]; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
347 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
348 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
349 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
350 return ret; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
351 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
352 #else |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
353 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
354 return Matrix (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
355 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
356 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
357 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
358 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
359 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
360 Matrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
361 sparse_qr<SparseMatrix>::sparse_qr_rep::Q (void) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
362 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
363 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
364 octave_idx_type nc = N->L->n; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
365 octave_idx_type nr = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
366 Matrix ret (nr, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
367 double *vec = ret.fortran_vec (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
368 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
369 if (nr < 0 || nc < 0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
370 (*current_liboctave_error_handler) ("matrix dimension mismatch"); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
371 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
372 if (nr == 0 || nc == 0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
373 ret = Matrix (nc, nr, 0.0); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
374 else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
375 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
376 OCTAVE_LOCAL_BUFFER (double, bvec, nr + 1); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
377 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
378 for (octave_idx_type i = 0; i < nr; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
379 bvec[i] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
380 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
381 OCTAVE_LOCAL_BUFFER (double, buf, S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
382 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
383 for (volatile octave_idx_type j = 0, idx = 0; j < nr; j++, idx+=nr) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
384 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
385 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
386 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
387 bvec[j] = 1.0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
388 for (octave_idx_type i = nr; i < S->m2; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
389 buf[i] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
390 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
391 volatile octave_idx_type nm = (nr < nc ? nr : nc); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
392 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
393 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
394 CXSPARSE_DNAME (_ipvec) (S->pinv, bvec, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
395 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
396 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
397 for (volatile octave_idx_type i = 0; i < nm; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
398 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
399 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
400 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
401 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
402 CXSPARSE_DNAME (_happly) (N->L, i, N->B[i], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
403 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
404 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
405 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
406 for (octave_idx_type i = 0; i < nr; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
407 vec[i+idx] = buf[i]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
408 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
409 bvec[j] = 0.0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
410 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
411 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
412 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
413 return ret.transpose (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
414 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
415 #else |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
416 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
417 return Matrix (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
418 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
419 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
420 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
421 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
422 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
423 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
424 Matrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
425 sparse_qr<SparseMatrix>::sparse_qr_rep::tall_solve<MArray<double>, Matrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
426 (const MArray<double>& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
427 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
428 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
429 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
430 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
431 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
432 octave_idx_type nr = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
433 octave_idx_type nc = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
434 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
435 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
436 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
437 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
438 const double *bvec = b.data (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
439 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
440 Matrix x (nc, b_nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
441 double *vec = x.fortran_vec (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
442 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
443 OCTAVE_LOCAL_BUFFER (double, buf, S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
444 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
445 for (volatile octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
446 i++, idx+=nc, bidx+=b_nr) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
447 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
448 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
449 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
450 for (octave_idx_type j = nr; j < S->m2; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
451 buf[j] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
452 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
453 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
454 CXSPARSE_DNAME (_ipvec) (S->pinv, bvec + bidx, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
455 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
456 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
457 for (volatile octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
458 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
459 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
460 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
461 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
462 CXSPARSE_DNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
463 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
464 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
465 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
466 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
467 CXSPARSE_DNAME (_usolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
468 CXSPARSE_DNAME (_ipvec) (S->q, buf, vec + idx, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
469 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
470 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
471 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
472 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
473 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
474 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
475 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
476 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
477 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
478 return Matrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
479 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
480 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
481 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
482 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
483 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
484 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
485 Matrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
486 sparse_qr<SparseMatrix>::sparse_qr_rep::wide_solve<MArray<double>, Matrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
487 (const MArray<double>& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
488 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
489 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
490 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
491 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
492 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
493 // These are swapped because the original matrix was transposed in |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
494 // sparse_qr<SparseMatrix>::solve. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
495 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
496 octave_idx_type nr = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
497 octave_idx_type nc = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
498 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
499 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
500 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
501 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
502 const double *bvec = b.data (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
503 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
504 Matrix x (nc, b_nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
505 double *vec = x.fortran_vec (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
506 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
507 volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
508 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
509 OCTAVE_LOCAL_BUFFER (double, buf, nbuf); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
510 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
511 for (volatile octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
512 i++, idx+=nc, bidx+=b_nr) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
513 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
514 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
515 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
516 for (octave_idx_type j = nr; j < nbuf; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
517 buf[j] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
518 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
519 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
520 CXSPARSE_DNAME (_pvec) (S->q, bvec + bidx, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
521 CXSPARSE_DNAME (_utsolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
522 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
523 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
524 for (volatile octave_idx_type j = nr-1; j >= 0; j--) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
525 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
526 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
527 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
528 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
529 CXSPARSE_DNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
530 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
531 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
532 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
533 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
534 CXSPARSE_DNAME (_pvec) (S->pinv, buf, vec + idx, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
535 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
536 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
537 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
538 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
539 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
540 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
541 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
542 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
543 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
544 return Matrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
545 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
546 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
547 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
548 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
549 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
550 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
551 SparseMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
552 sparse_qr<SparseMatrix>::sparse_qr_rep::tall_solve<SparseMatrix, SparseMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
553 (const SparseMatrix& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
554 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
555 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
556 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
557 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
558 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
559 octave_idx_type nr = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
560 octave_idx_type nc = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
561 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
562 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
563 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
564 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
565 SparseMatrix x (nc, b_nc, b.nnz ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
566 x.xcidx (0) = 0; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
567 |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
568 volatile octave_idx_type x_nz = b.nnz (); |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
569 volatile octave_idx_type ii = 0; |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
570 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
571 OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
572 OCTAVE_LOCAL_BUFFER (double, buf, S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
573 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
574 for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
575 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
576 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
577 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
578 for (octave_idx_type j = 0; j < b_nr; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
579 Xx[j] = b.xelem (j,i); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
580 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
581 for (octave_idx_type j = nr; j < S->m2; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
582 buf[j] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
583 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
584 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
585 CXSPARSE_DNAME (_ipvec) (S->pinv, Xx, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
586 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
587 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
588 for (volatile octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
589 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
590 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
591 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
592 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
593 CXSPARSE_DNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
594 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
595 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
596 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
597 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
598 CXSPARSE_DNAME (_usolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
599 CXSPARSE_DNAME (_ipvec) (S->q, buf, Xx, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
600 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
601 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
602 for (octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
603 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
604 double tmp = Xx[j]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
605 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
606 if (tmp != 0.0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
607 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
608 if (ii == x_nz) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
609 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
610 // Resize the sparse matrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
611 octave_idx_type sz = x_nz * (b_nc - i) / b_nc; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
612 sz = (sz > 10 ? sz : 10) + x_nz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
613 x.change_capacity (sz); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
614 x_nz = sz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
615 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
616 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
617 x.xdata (ii) = tmp; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
618 x.xridx (ii++) = j; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
619 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
620 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
621 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
622 x.xcidx (i+1) = ii; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
623 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
624 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
625 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
626 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
627 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
628 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
629 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
630 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
631 return SparseMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
632 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
633 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
634 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
635 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
636 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
637 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
638 SparseMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
639 sparse_qr<SparseMatrix>::sparse_qr_rep::wide_solve<SparseMatrix, SparseMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
640 (const SparseMatrix& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
641 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
642 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
643 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
644 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
645 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
646 // These are swapped because the original matrix was transposed in |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
647 // sparse_qr<SparseMatrix>::solve. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
648 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
649 octave_idx_type nr = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
650 octave_idx_type nc = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
651 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
652 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
653 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
654 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
655 SparseMatrix x (nc, b_nc, b.nnz ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
656 x.xcidx (0) = 0; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
657 |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
658 volatile octave_idx_type x_nz = b.nnz (); |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
659 volatile octave_idx_type ii = 0; |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
660 volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
661 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
662 OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
663 OCTAVE_LOCAL_BUFFER (double, buf, nbuf); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
664 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
665 for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
666 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
667 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
668 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
669 for (octave_idx_type j = 0; j < b_nr; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
670 Xx[j] = b.xelem (j,i); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
671 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
672 for (octave_idx_type j = nr; j < nbuf; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
673 buf[j] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
674 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
675 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
676 CXSPARSE_DNAME (_pvec) (S->q, Xx, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
677 CXSPARSE_DNAME (_utsolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
678 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
679 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
680 for (volatile octave_idx_type j = nr-1; j >= 0; j--) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
681 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
682 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
683 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
684 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
685 CXSPARSE_DNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
686 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
687 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
688 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
689 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
690 CXSPARSE_DNAME (_pvec) (S->pinv, buf, Xx, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
691 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
692 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
693 for (octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
694 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
695 double tmp = Xx[j]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
696 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
697 if (tmp != 0.0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
698 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
699 if (ii == x_nz) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
700 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
701 // Resize the sparse matrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
702 octave_idx_type sz = x_nz * (b_nc - i) / b_nc; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
703 sz = (sz > 10 ? sz : 10) + x_nz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
704 x.change_capacity (sz); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
705 x_nz = sz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
706 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
707 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
708 x.xdata (ii) = tmp; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
709 x.xridx (ii++) = j; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
710 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
711 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
712 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
713 x.xcidx (i+1) = ii; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
714 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
715 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
716 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
717 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
718 x.maybe_compress (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
719 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
720 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
721 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
722 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
723 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
724 return SparseMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
725 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
726 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
727 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
728 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
729 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
730 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
731 ComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
732 sparse_qr<SparseMatrix>::sparse_qr_rep::tall_solve<MArray<Complex>, ComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
733 (const MArray<Complex>& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
734 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
735 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
736 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
737 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
738 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
739 octave_idx_type nr = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
740 octave_idx_type nc = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
741 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
742 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
743 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
744 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
745 ComplexMatrix x (nc, b_nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
746 Complex *vec = x.fortran_vec (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
747 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
748 OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
749 OCTAVE_LOCAL_BUFFER (double, Xz, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
750 OCTAVE_LOCAL_BUFFER (double, buf, S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
751 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
752 for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
753 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
754 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
755 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
756 for (octave_idx_type j = 0; j < b_nr; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
757 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
758 Complex c = b.xelem (j,i); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
759 Xx[j] = std::real (c); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
760 Xz[j] = std::imag (c); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
761 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
762 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
763 for (octave_idx_type j = nr; j < S->m2; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
764 buf[j] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
765 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
766 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
767 CXSPARSE_DNAME (_ipvec) (S->pinv, Xx, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
768 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
769 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
770 for (volatile octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
771 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
772 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
773 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
774 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
775 CXSPARSE_DNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
776 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
777 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
778 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
779 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
780 CXSPARSE_DNAME (_usolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
781 CXSPARSE_DNAME (_ipvec) (S->q, buf, Xx, nc); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
782 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
783 for (octave_idx_type j = nr; j < S->m2; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
784 buf[j] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
785 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
786 CXSPARSE_DNAME (_ipvec) (S->pinv, Xz, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
787 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
788 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
789 for (volatile octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
790 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
791 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
792 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
793 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
794 CXSPARSE_DNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
795 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
796 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
797 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
798 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
799 CXSPARSE_DNAME (_usolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
800 CXSPARSE_DNAME (_ipvec) (S->q, buf, Xz, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
801 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
802 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
803 for (octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
804 vec[j+idx] = Complex (Xx[j], Xz[j]); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
805 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
806 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
807 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
808 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
809 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
810 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
811 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
812 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
813 return ComplexMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
814 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
815 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
816 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
817 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
818 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
819 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
820 ComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
821 sparse_qr<SparseMatrix>::sparse_qr_rep::wide_solve<MArray<Complex>, ComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
822 (const MArray<Complex>& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
823 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
824 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
825 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
826 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
827 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
828 // These are swapped because the original matrix was transposed in |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
829 // sparse_qr<SparseMatrix>::solve. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
830 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
831 octave_idx_type nr = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
832 octave_idx_type nc = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
833 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
834 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
835 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
836 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
837 ComplexMatrix x (nc, b_nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
838 Complex *vec = x.fortran_vec (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
839 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
840 volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
841 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
842 OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
843 OCTAVE_LOCAL_BUFFER (double, Xz, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
844 OCTAVE_LOCAL_BUFFER (double, buf, nbuf); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
845 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
846 for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
847 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
848 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
849 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
850 for (octave_idx_type j = 0; j < b_nr; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
851 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
852 Complex c = b.xelem (j,i); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
853 Xx[j] = std::real (c); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
854 Xz[j] = std::imag (c); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
855 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
856 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
857 for (octave_idx_type j = nr; j < nbuf; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
858 buf[j] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
859 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
860 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
861 CXSPARSE_DNAME (_pvec) (S->q, Xx, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
862 CXSPARSE_DNAME (_utsolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
863 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
864 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
865 for (volatile octave_idx_type j = nr-1; j >= 0; j--) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
866 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
867 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
868 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
869 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
870 CXSPARSE_DNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
871 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
872 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
873 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
874 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
875 CXSPARSE_DNAME (_pvec) (S->pinv, buf, Xx, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
876 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
877 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
878 for (octave_idx_type j = nr; j < nbuf; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
879 buf[j] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
880 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
881 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
882 CXSPARSE_DNAME (_pvec) (S->q, Xz, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
883 CXSPARSE_DNAME (_utsolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
884 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
885 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
886 for (volatile octave_idx_type j = nr-1; j >= 0; j--) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
887 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
888 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
889 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
890 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
891 CXSPARSE_DNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
892 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
893 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
894 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
895 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
896 CXSPARSE_DNAME (_pvec) (S->pinv, buf, Xz, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
897 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
898 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
899 for (octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
900 vec[j+idx] = Complex (Xx[j], Xz[j]); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
901 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
902 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
903 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
904 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
905 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
906 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
907 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
908 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
909 return ComplexMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
910 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
911 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
912 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
913 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
914 // Complex-valued matrices. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
915 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
916 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
917 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::sparse_qr_rep |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
918 (const SparseComplexMatrix& a, int order) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
919 : count (1), nrows (a.rows ()), ncols (a.columns ()) |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
920 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
921 , S (0), N (0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
922 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
923 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
924 #if defined (HAVE_CXSPARSE) |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
925 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
926 CXSPARSE_ZNAME () A; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
927 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
928 A.nzmax = a.nnz (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
929 A.m = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
930 A.n = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
931 // Cast away const on A, with full knowledge that CSparse won't touch it |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
932 // Prevents the methods below making a copy of the data. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
933 A.p = const_cast<octave_idx_type *>(a.cidx ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
934 A.i = const_cast<octave_idx_type *>(a.ridx ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
935 A.x = const_cast<cs_complex_t *>(reinterpret_cast<const cs_complex_t *> (a.data ())); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
936 A.nz = -1; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
937 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
938 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
939 S = CXSPARSE_ZNAME (_sqr) (order, &A, 1); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
940 N = CXSPARSE_ZNAME (_qr) (&A, S); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
941 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
942 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
943 if (! N) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
944 (*current_liboctave_error_handler) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
945 ("sparse_qr: sparse matrix QR factorization filled"); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
946 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
947 count = 1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
948 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
949 #else |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
950 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
951 (*current_liboctave_error_handler) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
952 ("sparse_qr: support for CXSparse was unavailable or disabled when liboctave was built"); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
953 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
954 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
955 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
956 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
957 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
958 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::~sparse_qr_rep (void) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
959 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
960 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
961 CXSPARSE_ZNAME (_sfree) (S); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
962 CXSPARSE_ZNAME (_nfree) (N); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
963 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
964 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
965 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
966 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
967 SparseComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
968 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::V (void) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
969 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
970 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
971 // Drop zeros from V and sort |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
972 // FIXME: Is the double transpose to sort necessary? |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
973 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
974 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
975 CXSPARSE_ZNAME (_dropzeros) (N->L); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
976 CXSPARSE_ZNAME () *D = CXSPARSE_ZNAME (_transpose) (N->L, 1); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
977 CXSPARSE_ZNAME (_spfree) (N->L); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
978 N->L = CXSPARSE_ZNAME (_transpose) (D, 1); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
979 CXSPARSE_ZNAME (_spfree) (D); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
980 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
981 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
982 octave_idx_type nc = N->L->n; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
983 octave_idx_type nz = N->L->nzmax; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
984 SparseComplexMatrix ret (N->L->m, nc, nz); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
985 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
986 for (octave_idx_type j = 0; j < nc+1; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
987 ret.xcidx (j) = N->L->p[j]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
988 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
989 for (octave_idx_type j = 0; j < nz; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
990 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
991 ret.xridx (j) = N->L->i[j]; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
992 ret.xdata (j) = reinterpret_cast<Complex *>(N->L->x)[j]; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
993 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
994 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
995 return ret; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
996 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
997 #else |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
998 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
999 return SparseComplexMatrix (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1000 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1001 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1002 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1003 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1004 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1005 SparseComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1006 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::R (bool econ) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1007 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1008 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1009 // Drop zeros from R and sort |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1010 // FIXME: Is the double transpose to sort necessary? |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1011 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1012 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1013 CXSPARSE_ZNAME (_dropzeros) (N->U); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1014 CXSPARSE_ZNAME () *D = CXSPARSE_ZNAME (_transpose) (N->U, 1); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1015 CXSPARSE_ZNAME (_spfree) (N->U); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1016 N->U = CXSPARSE_ZNAME (_transpose) (D, 1); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1017 CXSPARSE_ZNAME (_spfree) (D); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1018 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1019 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1020 octave_idx_type nc = N->U->n; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1021 octave_idx_type nz = N->U->nzmax; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1022 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1023 SparseComplexMatrix ret ((econ ? (nc > nrows ? nrows : nc) : nrows), nc, nz); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1024 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1025 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1026 for (octave_idx_type j = 0; j < nc+1; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1027 ret.xcidx (j) = N->U->p[j]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1028 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1029 for (octave_idx_type j = 0; j < nz; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1030 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1031 ret.xridx (j) = N->U->i[j]; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1032 ret.xdata (j) = reinterpret_cast<Complex *>(N->U->x)[j]; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1033 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1034 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1035 return ret; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1036 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1037 #else |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1038 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1039 return SparseComplexMatrix (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1040 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1041 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1042 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1043 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1044 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1045 ComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1046 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::C (const ComplexMatrix& b) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1047 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1048 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1049 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1050 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1051 octave_idx_type nc = N->L->n; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1052 octave_idx_type nr = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1053 const cs_complex_t *bvec = reinterpret_cast<const cs_complex_t *>(b.fortran_vec ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1054 ComplexMatrix ret (b_nr, b_nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1055 Complex *vec = ret.fortran_vec (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1056 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1057 if (nr < 0 || nc < 0 || nr != b_nr) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1058 (*current_liboctave_error_handler) ("matrix dimension mismatch"); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1059 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1060 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1061 if (nr == 0 || nc == 0 || b_nc == 0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1062 ret = ComplexMatrix (nc, b_nc, Complex (0.0, 0.0)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1063 else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1064 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1065 OCTAVE_LOCAL_BUFFER (Complex, buf, S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1066 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1067 for (volatile octave_idx_type j = 0, idx = 0; j < b_nc; j++, idx+=b_nr) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1068 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1069 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1070 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1071 volatile octave_idx_type nm = (nr < nc ? nr : nc); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1072 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1073 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1074 CXSPARSE_ZNAME (_ipvec) (S->pinv, bvec + idx, reinterpret_cast<cs_complex_t *>(buf), b_nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1075 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1076 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1077 for (volatile octave_idx_type i = 0; i < nm; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1078 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1079 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1080 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1081 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1082 CXSPARSE_ZNAME (_happly) (N->L, i, N->B[i], reinterpret_cast<cs_complex_t *>(buf)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1083 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1084 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1085 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1086 for (octave_idx_type i = 0; i < b_nr; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1087 vec[i+idx] = buf[i]; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1088 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1089 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1090 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1091 return ret; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1092 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1093 #else |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1094 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1095 return ComplexMatrix (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1096 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1097 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1098 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1099 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1100 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1101 ComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1102 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::Q (void) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1103 { |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1104 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1105 octave_idx_type nc = N->L->n; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1106 octave_idx_type nr = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1107 ComplexMatrix ret (nr, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1108 Complex *vec = ret.fortran_vec (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1109 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1110 if (nr < 0 || nc < 0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1111 (*current_liboctave_error_handler) ("matrix dimension mismatch"); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1112 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1113 if (nr == 0 || nc == 0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1114 ret = ComplexMatrix (nc, nr, Complex (0.0, 0.0)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1115 else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1116 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1117 OCTAVE_LOCAL_BUFFER (cs_complex_t, bvec, nr); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1118 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1119 for (octave_idx_type i = 0; i < nr; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1120 bvec[i] = cs_complex_t (0.0, 0.0); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1121 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1122 OCTAVE_LOCAL_BUFFER (Complex, buf, S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1123 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1124 for (volatile octave_idx_type j = 0, idx = 0; j < nr; j++, idx+=nr) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1125 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1126 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1127 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1128 bvec[j] = cs_complex_t (1.0, 0.0); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1129 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1130 volatile octave_idx_type nm = (nr < nc ? nr : nc); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1131 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1132 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1133 CXSPARSE_ZNAME (_ipvec) (S->pinv, bvec, reinterpret_cast<cs_complex_t *>(buf), nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1134 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1135 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1136 for (volatile octave_idx_type i = 0; i < nm; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1137 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1138 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1139 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1140 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1141 CXSPARSE_ZNAME (_happly) (N->L, i, N->B[i], reinterpret_cast<cs_complex_t *>(buf)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1142 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1143 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1144 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1145 for (octave_idx_type i = 0; i < nr; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1146 vec[i+idx] = buf[i]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1147 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1148 bvec[j] = cs_complex_t (0.0, 0.0); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1149 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1150 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1151 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1152 return ret.hermitian (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1153 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1154 #else |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1155 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1156 return ComplexMatrix (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1157 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1158 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1159 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1160 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1161 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1162 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1163 SparseComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1164 sparse_qr<SparseMatrix>::sparse_qr_rep::tall_solve<SparseComplexMatrix, SparseComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1165 (const SparseComplexMatrix& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1166 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1167 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1168 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1169 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1170 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1171 octave_idx_type nr = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1172 octave_idx_type nc = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1173 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1174 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1175 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1176 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1177 SparseComplexMatrix x (nc, b_nc, b.nnz ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1178 x.xcidx (0) = 0; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1179 |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1180 volatile octave_idx_type x_nz = b.nnz (); |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1181 volatile octave_idx_type ii = 0; |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1182 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1183 OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1184 OCTAVE_LOCAL_BUFFER (double, Xz, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1185 OCTAVE_LOCAL_BUFFER (double, buf, S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1186 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1187 for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1188 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1189 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1190 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1191 for (octave_idx_type j = 0; j < b_nr; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1192 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1193 Complex c = b.xelem (j,i); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1194 Xx[j] = std::real (c); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1195 Xz[j] = std::imag (c); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1196 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1197 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1198 for (octave_idx_type j = nr; j < S->m2; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1199 buf[j] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1200 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1201 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1202 CXSPARSE_DNAME (_ipvec) (S->pinv, Xx, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1203 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1204 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1205 for (volatile octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1206 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1207 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1208 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1209 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1210 CXSPARSE_DNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1211 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1212 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1213 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1214 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1215 CXSPARSE_DNAME (_usolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1216 CXSPARSE_DNAME (_ipvec) (S->q, buf, Xx, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1217 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1218 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1219 for (octave_idx_type j = nr; j < S->m2; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1220 buf[j] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1221 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1222 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1223 CXSPARSE_DNAME (_ipvec) (S->pinv, Xz, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1224 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1225 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1226 for (volatile octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1227 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1228 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1229 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1230 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1231 CXSPARSE_DNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1232 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1233 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1234 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1235 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1236 CXSPARSE_DNAME (_usolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1237 CXSPARSE_DNAME (_ipvec) (S->q, buf, Xz, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1238 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1239 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1240 for (octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1241 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1242 Complex tmp = Complex (Xx[j], Xz[j]); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1243 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1244 if (tmp != 0.0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1245 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1246 if (ii == x_nz) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1247 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1248 // Resize the sparse matrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1249 octave_idx_type sz = x_nz * (b_nc - i) / b_nc; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1250 sz = (sz > 10 ? sz : 10) + x_nz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1251 x.change_capacity (sz); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1252 x_nz = sz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1253 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1254 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1255 x.xdata (ii) = tmp; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1256 x.xridx (ii++) = j; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1257 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1258 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1259 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1260 x.xcidx (i+1) = ii; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1261 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1262 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1263 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1264 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1265 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1266 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1267 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1268 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1269 return SparseComplexMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1270 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1271 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1272 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1273 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1274 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1275 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1276 SparseComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1277 sparse_qr<SparseMatrix>::sparse_qr_rep::wide_solve<SparseComplexMatrix, SparseComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1278 (const SparseComplexMatrix& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1279 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1280 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1281 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1282 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1283 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1284 // These are swapped because the original matrix was transposed in |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1285 // sparse_qr<SparseMatrix>::solve. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1286 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1287 octave_idx_type nr = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1288 octave_idx_type nc = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1289 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1290 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1291 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1292 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1293 SparseComplexMatrix x (nc, b_nc, b.nnz ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1294 x.xcidx (0) = 0; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1295 |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1296 volatile octave_idx_type x_nz = b.nnz (); |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1297 volatile octave_idx_type ii = 0; |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1298 volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1299 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1300 OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1301 OCTAVE_LOCAL_BUFFER (double, Xz, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1302 OCTAVE_LOCAL_BUFFER (double, buf, nbuf); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1303 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1304 for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1305 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1306 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1307 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1308 for (octave_idx_type j = 0; j < b_nr; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1309 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1310 Complex c = b.xelem (j,i); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1311 Xx[j] = std::real (c); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1312 Xz[j] = std::imag (c); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1313 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1314 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1315 for (octave_idx_type j = nr; j < nbuf; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1316 buf[j] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1317 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1318 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1319 CXSPARSE_DNAME (_pvec) (S->q, Xx, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1320 CXSPARSE_DNAME (_utsolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1321 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1322 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1323 for (volatile octave_idx_type j = nr-1; j >= 0; j--) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1324 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1325 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1326 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1327 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1328 CXSPARSE_DNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1329 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1330 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1331 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1332 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1333 CXSPARSE_DNAME (_pvec) (S->pinv, buf, Xx, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1334 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1335 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1336 for (octave_idx_type j = nr; j < nbuf; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1337 buf[j] = 0.; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1338 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1339 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1340 CXSPARSE_DNAME (_pvec) (S->q, Xz, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1341 CXSPARSE_DNAME (_utsolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1342 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1343 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1344 for (volatile octave_idx_type j = nr-1; j >= 0; j--) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1345 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1346 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1347 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1348 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1349 CXSPARSE_DNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1350 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1351 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1352 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1353 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1354 CXSPARSE_DNAME (_pvec) (S->pinv, buf, Xz, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1355 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1356 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1357 for (octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1358 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1359 Complex tmp = Complex (Xx[j], Xz[j]); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1360 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1361 if (tmp != 0.0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1362 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1363 if (ii == x_nz) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1364 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1365 // Resize the sparse matrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1366 octave_idx_type sz = x_nz * (b_nc - i) / b_nc; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1367 sz = (sz > 10 ? sz : 10) + x_nz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1368 x.change_capacity (sz); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1369 x_nz = sz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1370 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1371 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1372 x.xdata (ii) = tmp; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1373 x.xridx (ii++) = j; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1374 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1375 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1376 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1377 x.xcidx (i+1) = ii; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1378 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1379 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1380 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1381 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1382 x.maybe_compress (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1383 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1384 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1385 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1386 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1387 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1388 return SparseComplexMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1389 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1390 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1391 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1392 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1393 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1394 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1395 ComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1396 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::tall_solve<MArray<double>, ComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1397 (const MArray<double>& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1398 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1399 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1400 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1401 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1402 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1403 octave_idx_type nr = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1404 octave_idx_type nc = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1405 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1406 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1407 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1408 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1409 ComplexMatrix x (nc, b_nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1410 cs_complex_t *vec = reinterpret_cast<cs_complex_t *> (x.fortran_vec ()); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1411 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1412 OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, S->m2); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1413 OCTAVE_LOCAL_BUFFER (Complex, Xx, b_nr); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1414 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1415 for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1416 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1417 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1418 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1419 for (octave_idx_type j = 0; j < b_nr; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1420 Xx[j] = b.xelem (j,i); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1421 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1422 for (octave_idx_type j = nr; j < S->m2; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1423 buf[j] = cs_complex_t (0.0, 0.0); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1424 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1425 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1426 CXSPARSE_ZNAME (_ipvec) (S->pinv, reinterpret_cast<cs_complex_t *>(Xx), buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1427 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1428 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1429 for (volatile octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1430 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1431 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1432 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1433 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1434 CXSPARSE_ZNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1435 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1436 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1437 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1438 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1439 CXSPARSE_ZNAME (_usolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1440 CXSPARSE_ZNAME (_ipvec) (S->q, buf, vec + idx, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1441 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1442 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1443 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1444 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1445 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1446 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1447 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1448 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1449 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1450 return ComplexMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1451 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1452 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1453 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1454 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1455 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1456 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1457 ComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1458 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::wide_solve<MArray<double>, ComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1459 (const MArray<double>& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1460 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1461 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1462 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1463 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1464 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1465 // These are swapped because the original matrix was transposed in |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1466 // sparse_qr<SparseComplexMatrix>::solve. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1467 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1468 octave_idx_type nr = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1469 octave_idx_type nc = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1470 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1471 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1472 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1473 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1474 ComplexMatrix x (nc, b_nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1475 cs_complex_t *vec = reinterpret_cast<cs_complex_t *> (x.fortran_vec ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1476 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1477 volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1478 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1479 OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, nbuf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1480 OCTAVE_LOCAL_BUFFER (Complex, Xx, b_nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1481 OCTAVE_LOCAL_BUFFER (double, B, nr); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1482 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1483 for (octave_idx_type i = 0; i < nr; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1484 B[i] = N->B[i]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1485 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1486 for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1487 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1488 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1489 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1490 for (octave_idx_type j = 0; j < b_nr; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1491 Xx[j] = b.xelem (j,i); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1492 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1493 for (octave_idx_type j = nr; j < nbuf; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1494 buf[j] = cs_complex_t (0.0, 0.0); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1495 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1496 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1497 CXSPARSE_ZNAME (_pvec) (S->q, reinterpret_cast<cs_complex_t *>(Xx), buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1498 CXSPARSE_ZNAME (_utsolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1499 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1500 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1501 for (volatile octave_idx_type j = nr-1; j >= 0; j--) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1502 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1503 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1504 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1505 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1506 CXSPARSE_ZNAME (_happly) (N->L, j, B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1507 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1508 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1509 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1510 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1511 CXSPARSE_ZNAME (_pvec) (S->pinv, buf, vec + idx, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1512 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1513 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1514 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1515 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1516 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1517 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1518 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1519 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1520 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1521 return ComplexMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1522 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1523 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1524 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1525 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1526 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1527 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1528 SparseComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1529 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::tall_solve<SparseMatrix, SparseComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1530 (const SparseMatrix& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1531 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1532 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1533 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1534 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1535 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1536 octave_idx_type nr = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1537 octave_idx_type nc = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1538 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1539 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1540 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1541 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1542 SparseComplexMatrix x (nc, b_nc, b.nnz ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1543 x.xcidx (0) = 0; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1544 |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1545 volatile octave_idx_type x_nz = b.nnz (); |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1546 volatile octave_idx_type ii = 0; |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1547 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1548 OCTAVE_LOCAL_BUFFER (Complex, Xx, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1549 OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1550 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1551 for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1552 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1553 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1554 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1555 for (octave_idx_type j = 0; j < b_nr; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1556 Xx[j] = b.xelem (j,i); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1557 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1558 for (octave_idx_type j = nr; j < S->m2; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1559 buf[j] = cs_complex_t (0.0, 0.0); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1560 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1561 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1562 CXSPARSE_ZNAME (_ipvec) (S->pinv, reinterpret_cast<cs_complex_t *>(Xx), buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1563 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1564 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1565 for (volatile octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1566 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1567 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1568 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1569 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1570 CXSPARSE_ZNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1571 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1572 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1573 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1574 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1575 CXSPARSE_ZNAME (_usolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1576 CXSPARSE_ZNAME (_ipvec) (S->q, buf, reinterpret_cast<cs_complex_t *>(Xx), nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1577 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1578 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1579 for (octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1580 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1581 Complex tmp = Xx[j]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1582 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1583 if (tmp != 0.0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1584 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1585 if (ii == x_nz) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1586 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1587 // Resize the sparse matrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1588 octave_idx_type sz = x_nz * (b_nc - i) / b_nc; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1589 sz = (sz > 10 ? sz : 10) + x_nz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1590 x.change_capacity (sz); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1591 x_nz = sz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1592 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1593 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1594 x.xdata (ii) = tmp; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1595 x.xridx (ii++) = j; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1596 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1597 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1598 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1599 x.xcidx (i+1) = ii; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1600 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1601 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1602 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1603 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1604 x.maybe_compress (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1605 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1606 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1607 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1608 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1609 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1610 return SparseComplexMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1611 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1612 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1613 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1614 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1615 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1616 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1617 SparseComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1618 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::wide_solve<SparseMatrix, SparseComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1619 (const SparseMatrix& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1620 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1621 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1622 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1623 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1624 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1625 // These are swapped because the original matrix was transposed in |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1626 // sparse_qr<SparseComplexMatrix>::solve. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1627 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1628 octave_idx_type nr = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1629 octave_idx_type nc = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1630 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1631 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1632 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1633 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1634 SparseComplexMatrix x (nc, b_nc, b.nnz ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1635 x.xcidx (0) = 0; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1636 |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1637 volatile octave_idx_type x_nz = b.nnz (); |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1638 volatile octave_idx_type ii = 0; |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1639 volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1640 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1641 OCTAVE_LOCAL_BUFFER (Complex, Xx, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1642 OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, nbuf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1643 OCTAVE_LOCAL_BUFFER (double, B, nr); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1644 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1645 for (octave_idx_type i = 0; i < nr; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1646 B[i] = N->B[i]; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1647 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1648 for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1649 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1650 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1651 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1652 for (octave_idx_type j = 0; j < b_nr; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1653 Xx[j] = b.xelem (j,i); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1654 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1655 for (octave_idx_type j = nr; j < nbuf; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1656 buf[j] = cs_complex_t (0.0, 0.0); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1657 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1658 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1659 CXSPARSE_ZNAME (_pvec) (S->q, reinterpret_cast<cs_complex_t *>(Xx), buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1660 CXSPARSE_ZNAME (_utsolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1661 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1662 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1663 for (volatile octave_idx_type j = nr-1; j >= 0; j--) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1664 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1665 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1666 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1667 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1668 CXSPARSE_ZNAME (_happly) (N->L, j, B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1669 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1670 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1671 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1672 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1673 CXSPARSE_ZNAME (_pvec) (S->pinv, buf, reinterpret_cast<cs_complex_t *>(Xx), nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1674 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1675 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1676 for (octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1677 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1678 Complex tmp = Xx[j]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1679 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1680 if (tmp != 0.0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1681 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1682 if (ii == x_nz) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1683 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1684 // Resize the sparse matrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1685 octave_idx_type sz = x_nz * (b_nc - i) / b_nc; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1686 sz = (sz > 10 ? sz : 10) + x_nz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1687 x.change_capacity (sz); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1688 x_nz = sz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1689 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1690 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1691 x.xdata (ii) = tmp; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1692 x.xridx (ii++) = j; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1693 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1694 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1695 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1696 x.xcidx (i+1) = ii; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1697 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1698 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1699 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1700 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1701 x.maybe_compress (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1702 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1703 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1704 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1705 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1706 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1707 return SparseComplexMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1708 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1709 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1710 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1711 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1712 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1713 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1714 ComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1715 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::tall_solve<MArray<Complex>, ComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1716 (const MArray<Complex>& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1717 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1718 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1719 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1720 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1721 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1722 octave_idx_type nr = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1723 octave_idx_type nc = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1724 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1725 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1726 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1727 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1728 const cs_complex_t *bvec = reinterpret_cast<const cs_complex_t *>(b.fortran_vec ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1729 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1730 ComplexMatrix x (nc, b_nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1731 cs_complex_t *vec = reinterpret_cast<cs_complex_t *> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1732 (x.fortran_vec ()); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1733 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1734 OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1735 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1736 for (volatile octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1737 i++, idx+=nc, bidx+=b_nr) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1738 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1739 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1740 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1741 for (octave_idx_type j = nr; j < S->m2; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1742 buf[j] = cs_complex_t (0.0, 0.0); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1743 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1744 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1745 CXSPARSE_ZNAME (_ipvec) (S->pinv, bvec + bidx, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1746 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1747 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1748 for (volatile octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1749 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1750 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1751 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1752 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1753 CXSPARSE_ZNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1754 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1755 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1756 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1757 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1758 CXSPARSE_ZNAME (_usolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1759 CXSPARSE_ZNAME (_ipvec) (S->q, buf, vec + idx, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1760 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1761 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1762 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1763 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1764 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1765 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1766 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1767 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1768 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1769 return ComplexMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1770 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1771 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1772 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1773 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1774 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1775 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1776 ComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1777 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::wide_solve<MArray<Complex>, ComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1778 (const MArray<Complex>& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1779 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1780 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1781 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1782 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1783 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1784 // These are swapped because the original matrix was transposed in |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1785 // sparse_qr<SparseComplexMatrix>::solve. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1786 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1787 octave_idx_type nr = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1788 octave_idx_type nc = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1789 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1790 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1791 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1792 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1793 const cs_complex_t *bvec = reinterpret_cast<const cs_complex_t *>(b.fortran_vec ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1794 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1795 ComplexMatrix x (nc, b_nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1796 cs_complex_t *vec = reinterpret_cast<cs_complex_t *> (x.fortran_vec ()); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1797 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1798 volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1799 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1800 OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, nbuf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1801 OCTAVE_LOCAL_BUFFER (double, B, nr); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1802 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1803 for (octave_idx_type i = 0; i < nr; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1804 B[i] = N->B[i]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1805 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1806 for (volatile octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1807 i++, idx+=nc, bidx+=b_nr) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1808 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1809 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1810 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1811 for (octave_idx_type j = nr; j < nbuf; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1812 buf[j] = cs_complex_t (0.0, 0.0); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1813 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1814 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1815 CXSPARSE_ZNAME (_pvec) (S->q, bvec + bidx, buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1816 CXSPARSE_ZNAME (_utsolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1817 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1818 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1819 for (volatile octave_idx_type j = nr-1; j >= 0; j--) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1820 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1821 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1822 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1823 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1824 CXSPARSE_ZNAME (_happly) (N->L, j, B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1825 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1826 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1827 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1828 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1829 CXSPARSE_ZNAME (_pvec) (S->pinv, buf, vec + idx, nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1830 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1831 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1832 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1833 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1834 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1835 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1836 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1837 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1838 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1839 return ComplexMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1840 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1841 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1842 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1843 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1844 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1845 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1846 SparseComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1847 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::tall_solve<SparseComplexMatrix, SparseComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1848 (const SparseComplexMatrix& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1849 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1850 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1851 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1852 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1853 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1854 octave_idx_type nr = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1855 octave_idx_type nc = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1856 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1857 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1858 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1859 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1860 SparseComplexMatrix x (nc, b_nc, b.nnz ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1861 x.xcidx (0) = 0; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1862 |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1863 volatile octave_idx_type x_nz = b.nnz (); |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1864 volatile octave_idx_type ii = 0; |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1865 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1866 OCTAVE_LOCAL_BUFFER (Complex, Xx, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1867 OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1868 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1869 for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1870 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1871 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1872 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1873 for (octave_idx_type j = 0; j < b_nr; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1874 Xx[j] = b.xelem (j,i); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1875 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1876 for (octave_idx_type j = nr; j < S->m2; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1877 buf[j] = cs_complex_t (0.0, 0.0); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1878 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1879 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1880 CXSPARSE_ZNAME (_ipvec) (S->pinv, reinterpret_cast<cs_complex_t *>(Xx), buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1881 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1882 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1883 for (volatile octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1884 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1885 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1886 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1887 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1888 CXSPARSE_ZNAME (_happly) (N->L, j, N->B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1889 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1890 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1891 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1892 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1893 CXSPARSE_ZNAME (_usolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1894 CXSPARSE_ZNAME (_ipvec) (S->q, buf, reinterpret_cast<cs_complex_t *>(Xx), nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1895 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1896 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1897 for (octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1898 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1899 Complex tmp = Xx[j]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1900 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1901 if (tmp != 0.0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1902 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1903 if (ii == x_nz) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1904 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1905 // Resize the sparse matrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1906 octave_idx_type sz = x_nz * (b_nc - i) / b_nc; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1907 sz = (sz > 10 ? sz : 10) + x_nz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1908 x.change_capacity (sz); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1909 x_nz = sz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1910 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1911 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1912 x.xdata (ii) = tmp; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1913 x.xridx (ii++) = j; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1914 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1915 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1916 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1917 x.xcidx (i+1) = ii; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1918 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1919 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1920 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1921 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1922 x.maybe_compress (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1923 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1924 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1925 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1926 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1927 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1928 return SparseComplexMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1929 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1930 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1931 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1932 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1933 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1934 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1935 SparseComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1936 sparse_qr<SparseComplexMatrix>::sparse_qr_rep::wide_solve<SparseComplexMatrix, SparseComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1937 (const SparseComplexMatrix& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1938 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1939 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1940 |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1941 #if defined (HAVE_CXSPARSE) |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1942 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1943 // These are swapped because the original matrix was transposed in |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1944 // sparse_qr<SparseComplexMatrix>::solve. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1945 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1946 octave_idx_type nr = ncols; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1947 octave_idx_type nc = nrows; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1948 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1949 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1950 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1951 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1952 SparseComplexMatrix x (nc, b_nc, b.nnz ()); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1953 x.xcidx (0) = 0; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1954 |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1955 volatile octave_idx_type x_nz = b.nnz (); |
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1956 volatile octave_idx_type ii = 0; |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1957 volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1958 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1959 OCTAVE_LOCAL_BUFFER (Complex, Xx, (b_nr > nc ? b_nr : nc)); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1960 OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, nbuf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1961 OCTAVE_LOCAL_BUFFER (double, B, nr); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1962 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1963 for (octave_idx_type i = 0; i < nr; i++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1964 B[i] = N->B[i]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1965 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1966 for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1967 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1968 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1969 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1970 for (octave_idx_type j = 0; j < b_nr; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1971 Xx[j] = b.xelem (j,i); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1972 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1973 for (octave_idx_type j = nr; j < nbuf; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1974 buf[j] = cs_complex_t (0.0, 0.0); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1975 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1976 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1977 CXSPARSE_ZNAME (_pvec) (S->q, reinterpret_cast<cs_complex_t *>(Xx), buf, nr); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1978 CXSPARSE_ZNAME (_utsolve) (N->U, buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1979 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1980 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1981 for (volatile octave_idx_type j = nr-1; j >= 0; j--) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1982 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1983 octave_quit (); |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1984 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1985 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1986 CXSPARSE_ZNAME (_happly) (N->L, j, B[j], buf); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1987 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1988 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1989 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1990 BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1991 CXSPARSE_ZNAME (_pvec) (S->pinv, buf, reinterpret_cast<cs_complex_t *>(Xx), nc); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1992 END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1993 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1994 for (octave_idx_type j = 0; j < nc; j++) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1995 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1996 Complex tmp = Xx[j]; |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
1997 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1998 if (tmp != 0.0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1999 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2000 if (ii == x_nz) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2001 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2002 // Resize the sparse matrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2003 octave_idx_type sz = x_nz * (b_nc - i) / b_nc; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2004 sz = (sz > 10 ? sz : 10) + x_nz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2005 x.change_capacity (sz); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2006 x_nz = sz; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2007 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
2008 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2009 x.xdata (ii) = tmp; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2010 x.xridx (ii++) = j; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2011 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2012 } |
21177
a10f60e13243
style fixes in liboctave/numeric directory
John W. Eaton <jwe@octave.org>
parents:
21176
diff
changeset
|
2013 |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2014 x.xcidx (i+1) = ii; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2015 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2016 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2017 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2018 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2019 x.maybe_compress (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2020 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2021 return x; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2022 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2023 #else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2024 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2025 return SparseComplexMatrix (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2026 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2027 #endif |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2028 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2029 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2030 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2031 sparse_qr<SPARSE_T>::sparse_qr (void) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2032 : rep (new sparse_qr_rep (SPARSE_T (), 0)) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2033 { } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2034 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2035 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2036 sparse_qr<SPARSE_T>::sparse_qr (const SPARSE_T& a, int order) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2037 : rep (new sparse_qr_rep (a, order)) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2038 { } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2039 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2040 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2041 sparse_qr<SPARSE_T>::sparse_qr (const sparse_qr<SPARSE_T>& a) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2042 : rep (a.rep) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2043 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2044 rep->count++; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2045 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2046 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2047 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2048 sparse_qr<SPARSE_T>::~sparse_qr (void) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2049 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2050 if (--rep->count == 0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2051 delete rep; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2052 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2053 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2054 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2055 sparse_qr<SPARSE_T>& |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2056 sparse_qr<SPARSE_T>::operator = (const sparse_qr<SPARSE_T>& a) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2057 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2058 if (this != &a) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2059 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2060 if (--rep->count == 0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2061 delete rep; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2062 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2063 rep = a.rep; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2064 rep->count++; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2065 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2066 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2067 return *this; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2068 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2069 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2070 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2071 bool |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2072 sparse_qr<SPARSE_T>::ok (void) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2073 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2074 return rep->ok (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2075 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2076 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2077 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2078 SPARSE_T |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2079 sparse_qr<SPARSE_T>::V (void) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2080 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2081 return rep->V (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2082 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2083 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2084 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2085 ColumnVector |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2086 sparse_qr<SPARSE_T>::Pinv (void) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2087 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2088 return rep->P (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2089 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2090 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2091 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2092 ColumnVector |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2093 sparse_qr<SPARSE_T>::P (void) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2094 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2095 return rep->P (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2096 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2097 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2098 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2099 SPARSE_T |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2100 sparse_qr<SPARSE_T>::R (bool econ) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2101 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2102 return rep->R (econ); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2103 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2104 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2105 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2106 typename SPARSE_T::dense_matrix_type |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2107 sparse_qr<SPARSE_T>::C (const typename SPARSE_T::dense_matrix_type& b) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2108 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2109 return rep->C (b); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2110 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2111 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2112 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2113 typename SPARSE_T::dense_matrix_type |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2114 sparse_qr<SPARSE_T>::Q (void) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2115 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2116 return rep->Q (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2117 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2118 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2119 // FIXME: Why is the "order" of the QR calculation as used in the |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2120 // CXSparse function sqr 3 for real matrices and 2 for complex? These |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2121 // values seem to be required but there was no explanation in David |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2122 // Bateman's original code. |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2123 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2124 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2125 class |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2126 cxsparse_defaults |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2127 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2128 public: |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2129 enum { order = -1 }; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2130 }; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2131 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2132 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2133 class |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2134 cxsparse_defaults<SparseMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2135 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2136 public: |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2137 enum { order = 3 }; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2138 }; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2139 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2140 template <> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2141 class |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2142 cxsparse_defaults<SparseComplexMatrix> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2143 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2144 public: |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2145 enum { order = 2 }; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2146 }; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2147 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2148 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2149 template <typename RHS_T, typename RET_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2150 RET_T |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2151 sparse_qr<SPARSE_T>::solve (const SPARSE_T& a, const RHS_T& b, |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2152 octave_idx_type& info) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2153 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2154 info = -1; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2155 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2156 octave_idx_type nr = a.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2157 octave_idx_type nc = a.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2158 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2159 octave_idx_type b_nc = b.cols (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2160 octave_idx_type b_nr = b.rows (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2161 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2162 int order = cxsparse_defaults<SPARSE_T>::order; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2163 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2164 if (nr < 0 || nc < 0 || nr != b_nr) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2165 (*current_liboctave_error_handler) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2166 ("matrix dimension mismatch in solution of minimum norm problem"); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2167 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2168 if (nr == 0 || nc == 0 || b_nc == 0) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2169 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2170 info = 0; |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2171 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2172 return RET_T (nc, b_nc, 0.0); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2173 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2174 else if (nr >= nc) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2175 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2176 sparse_qr<SPARSE_T> q (a, order); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2177 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2178 return q.ok () ? q.tall_solve<RHS_T, RET_T> (b, info) : RET_T (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2179 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2180 else |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2181 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2182 sparse_qr<SPARSE_T> q (a.hermitian (), order); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2183 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2184 return q.ok () ? q.wide_solve<RHS_T, RET_T> (b, info) : RET_T (); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2185 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2186 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2187 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2188 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2189 template <typename RHS_T, typename RET_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2190 RET_T |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2191 sparse_qr<SPARSE_T>::tall_solve (const RHS_T& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2192 { |
21215
04866fac690a
use template keyword to handle dependent template names
Ben Abbott <bpabbott@mac.comg>
parents:
21207
diff
changeset
|
2193 return rep->template tall_solve<RHS_T, RET_T> (b, info); |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2194 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2195 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2196 template <typename SPARSE_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2197 template <typename RHS_T, typename RET_T> |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2198 RET_T |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2199 sparse_qr<SPARSE_T>::wide_solve (const RHS_T& b, octave_idx_type& info) const |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2200 { |
21215
04866fac690a
use template keyword to handle dependent template names
Ben Abbott <bpabbott@mac.comg>
parents:
21207
diff
changeset
|
2201 return rep->template wide_solve<RHS_T, RET_T> (b, info); |
21176
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2202 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2203 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2204 Matrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2205 qrsolve (const SparseMatrix& a, const MArray<double>& b, |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2206 octave_idx_type& info) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2207 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2208 return sparse_qr<SparseMatrix>::solve<MArray<double>, Matrix> (a, b, info); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2209 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2210 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2211 SparseMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2212 qrsolve (const SparseMatrix& a, const SparseMatrix& b, |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2213 octave_idx_type& info) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2214 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2215 return sparse_qr<SparseMatrix>::solve<SparseMatrix, SparseMatrix> (a, b, info); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2216 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2217 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2218 ComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2219 qrsolve (const SparseMatrix& a, const MArray<Complex>& b, |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2220 octave_idx_type& info) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2221 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2222 return sparse_qr<SparseMatrix>::solve<MArray<Complex>, ComplexMatrix> (a, b, info); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2223 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2224 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2225 SparseComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2226 qrsolve (const SparseMatrix& a, const SparseComplexMatrix& b, |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2227 octave_idx_type& info) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2228 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2229 return sparse_qr<SparseMatrix>::solve<SparseComplexMatrix, SparseComplexMatrix> (a, b, info); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2230 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2231 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2232 ComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2233 qrsolve (const SparseComplexMatrix& a, const MArray<double>& b, |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2234 octave_idx_type& info) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2235 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2236 return sparse_qr<SparseComplexMatrix>::solve<MArray<double>, ComplexMatrix> (a, b, info); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2237 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2238 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2239 SparseComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2240 qrsolve (const SparseComplexMatrix& a, const SparseMatrix& b, |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2241 octave_idx_type& info) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2242 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2243 return sparse_qr<SparseComplexMatrix>::solve<SparseMatrix, SparseComplexMatrix> (a, b, info); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2244 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2245 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2246 ComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2247 qrsolve (const SparseComplexMatrix& a, const MArray<Complex>& b, |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2248 octave_idx_type& info) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2249 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2250 return sparse_qr<SparseComplexMatrix>::solve<MArray<Complex>, ComplexMatrix> (a, b, info); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2251 } |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2252 |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2253 SparseComplexMatrix |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2254 qrsolve (const SparseComplexMatrix& a, const SparseComplexMatrix& b, |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2255 octave_idx_type& info) |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2256 { |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2257 return sparse_qr<SparseComplexMatrix>::solve<SparseComplexMatrix, SparseComplexMatrix> (a, b, info); |
791dcb32b657
revamp sparse QR factorizatino classes
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2258 } |
21186
7f35125714b4
don't install some internal headers and template sources
John W. Eaton <jwe@octave.org>
parents:
21177
diff
changeset
|
2259 |
7f35125714b4
don't install some internal headers and template sources
John W. Eaton <jwe@octave.org>
parents:
21177
diff
changeset
|
2260 // Instantiations we need. |
7f35125714b4
don't install some internal headers and template sources
John W. Eaton <jwe@octave.org>
parents:
21177
diff
changeset
|
2261 |
7f35125714b4
don't install some internal headers and template sources
John W. Eaton <jwe@octave.org>
parents:
21177
diff
changeset
|
2262 template class sparse_qr<SparseMatrix>; |
7f35125714b4
don't install some internal headers and template sources
John W. Eaton <jwe@octave.org>
parents:
21177
diff
changeset
|
2263 |
7f35125714b4
don't install some internal headers and template sources
John W. Eaton <jwe@octave.org>
parents:
21177
diff
changeset
|
2264 template class sparse_qr<SparseComplexMatrix>; |