Mercurial > octave
annotate liboctave/numeric/qr.cc @ 21279:eb1524b07fe3
better use of templates for qr classes
* liboctave/numeric/qr.h, liboctave/numeric/qr.cc: New files for qr
classes generated from CmplxQR.cc, CmplxQR.h, base-qr.cc, base-qr.h,
dbleQR.cc, dbleQR.h, fCmplxQR.cc, fCmplxQR.h, floatQR.cc, and
floatQR.h with classes converted to templates.
* liboctave/numeric/module.mk: Update.
* qz.cc, qr.cc, CmplxQRP.cc, CmplxQRP.h, dbleQRP.cc, dbleQRP.h,
fCmplxQRP.cc fCmplxQRP.h, floatQRP.cc, floatQRP.h, mx-defs.h,
mx-ext.h: Use new classes.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 17 Feb 2016 02:57:21 -0500 |
parents | liboctave/numeric/base-qr.cc@f7121e111991 |
children | d3b265a83adc |
rev | line source |
---|---|
9713
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
1 /* |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
2 |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
3 Copyright (C) 1994-2015 John W. Eaton |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
4 Copyright (C) 2008-2009 Jaroslav Hajek |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
5 Copyright (C) 2009 VZLU Prague |
9713
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
6 |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
7 This file is part of Octave. |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
8 |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
9 Octave is free software; you can redistribute it and/or modify it |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
10 under the terms of the GNU General Public License as published by the |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
11 Free Software Foundation; either version 3 of the License, or (at your |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
12 option) any later version. |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
13 |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
14 Octave is distributed in the hope that it will be useful, but WITHOUT |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
17 for more details. |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
18 |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
19 You should have received a copy of the GNU General Public License |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
20 along with Octave; see the file COPYING. If not, see |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
21 <http://www.gnu.org/licenses/>. |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
22 |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
23 */ |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
24 |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
25 #ifdef HAVE_CONFIG_H |
21202
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
21139
diff
changeset
|
26 # include <config.h> |
9713
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
27 #endif |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
28 |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
29 #include "CColVector.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
30 #include "CMatrix.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
31 #include "CRowVector.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
32 #include "dColVector.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
33 #include "dMatrix.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
34 #include "dRowVector.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
35 #include "f77-fcn.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
36 #include "fCColVector.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
37 #include "fCMatrix.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
38 #include "fCRowVector.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
39 #include "fColVector.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
40 #include "fMatrix.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
41 #include "fRowVector.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
42 #include "idx-vector.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
43 #include "lo-error.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
44 #include "oct-locbuf.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
45 #include "qr.h" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
46 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
47 extern "C" |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
48 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
49 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
50 F77_FUNC (dgeqrf, DGEQRF) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
51 double*, const octave_idx_type&, double*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
52 double*, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
53 octave_idx_type&); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
54 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
55 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
56 F77_FUNC (dorgqr, DORGQR) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
57 const octave_idx_type&, double*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
58 const octave_idx_type&, double*, double*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
59 const octave_idx_type&, octave_idx_type&); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
60 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
61 #if defined (HAVE_QRUPDATE) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
62 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
63 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
64 F77_FUNC (dqr1up, DQR1UP) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
65 const octave_idx_type&, double*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
66 const octave_idx_type&, double*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
67 const octave_idx_type&, double*, double*, double*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
68 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
69 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
70 F77_FUNC (dqrinc, DQRINC) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
71 const octave_idx_type&, double*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
72 const octave_idx_type&, double*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
73 const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
74 const double*, double*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
75 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
76 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
77 F77_FUNC (dqrdec, DQRDEC) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
78 const octave_idx_type&, double*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
79 const octave_idx_type&, double*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
80 const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
81 double*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
82 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
83 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
84 F77_FUNC (dqrinr, DQRINR) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
85 double*, const octave_idx_type&, double*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
86 const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
87 const double*, double*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
88 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
89 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
90 F77_FUNC (dqrder, DQRDER) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
91 double*, const octave_idx_type&, double*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
92 const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
93 double*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
94 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
95 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
96 F77_FUNC (dqrshc, DQRSHC) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
97 const octave_idx_type&, double*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
98 const octave_idx_type&, double*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
99 const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
100 const octave_idx_type&, double*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
101 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
102 #endif |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
103 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
104 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
105 F77_FUNC (sgeqrf, SGEQRF) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
106 float*, const octave_idx_type&, float*, float*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
107 const octave_idx_type&, octave_idx_type&); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
108 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
109 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
110 F77_FUNC (sorgqr, SORGQR) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
111 const octave_idx_type&, float*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
112 const octave_idx_type&, float*, float*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
113 const octave_idx_type&, octave_idx_type&); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
114 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
115 #if defined (HAVE_QRUPDATE) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
116 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
117 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
118 F77_FUNC (sqr1up, SQR1UP) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
119 const octave_idx_type&, float*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
120 const octave_idx_type&, float*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
121 const octave_idx_type&, float*, float*, float*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
122 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
123 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
124 F77_FUNC (sqrinc, SQRINC) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
125 const octave_idx_type&, float*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
126 const octave_idx_type&, float*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
127 const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
128 const octave_idx_type&, const float*, float*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
129 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
130 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
131 F77_FUNC (sqrdec, SQRDEC) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
132 const octave_idx_type&, float*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
133 const octave_idx_type&, float*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
134 const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
135 const octave_idx_type&, float*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
136 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
137 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
138 F77_FUNC (sqrinr, SQRINR) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
139 float*, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
140 float*, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
141 const octave_idx_type&, const float*, float*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
142 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
143 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
144 F77_FUNC (sqrder, SQRDER) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
145 float*, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
146 float*, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
147 const octave_idx_type&, float*); |
9713
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
148 |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
149 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
150 F77_FUNC (sqrshc, SQRSHC) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
151 const octave_idx_type&, float*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
152 const octave_idx_type&, float*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
153 const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
154 const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
155 float*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
156 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
157 #endif |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
158 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
159 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
160 F77_FUNC (zgeqrf, ZGEQRF) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
161 Complex*, const octave_idx_type&, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
162 Complex*, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
163 octave_idx_type&); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
164 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
165 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
166 F77_FUNC (zungqr, ZUNGQR) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
167 const octave_idx_type&, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
168 const octave_idx_type&, Complex*, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
169 const octave_idx_type&, octave_idx_type&); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
170 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
171 #if defined (HAVE_QRUPDATE) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
172 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
173 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
174 F77_FUNC (zqr1up, ZQR1UP) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
175 const octave_idx_type&, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
176 const octave_idx_type&, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
177 const octave_idx_type&, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
178 Complex*, Complex*, double*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
179 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
180 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
181 F77_FUNC (zqrinc, ZQRINC) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
182 const octave_idx_type&, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
183 const octave_idx_type&, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
184 const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
185 const Complex*, double*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
186 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
187 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
188 F77_FUNC (zqrdec, ZQRDEC) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
189 const octave_idx_type&, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
190 const octave_idx_type&, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
191 const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
192 double*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
193 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
194 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
195 F77_FUNC (zqrinr, ZQRINR) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
196 Complex*, const octave_idx_type&, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
197 const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
198 const Complex*, double*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
199 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
200 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
201 F77_FUNC (zqrder, ZQRDER) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
202 Complex*, const octave_idx_type&, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
203 const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
204 Complex*, double*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
205 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
206 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
207 F77_FUNC (zqrshc, ZQRSHC) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
208 const octave_idx_type&, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
209 const octave_idx_type&, Complex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
210 const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
211 const octave_idx_type&, Complex*, double*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
212 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
213 #endif |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
214 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
215 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
216 F77_FUNC (cgeqrf, CGEQRF) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
217 FloatComplex*, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
218 FloatComplex*, FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
219 const octave_idx_type&, octave_idx_type&); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
220 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
221 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
222 F77_FUNC (cungqr, CUNGQR) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
223 const octave_idx_type&, FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
224 const octave_idx_type&, FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
225 FloatComplex*, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
226 octave_idx_type&); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
227 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
228 #ifdef HAVE_QRUPDATE |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
229 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
230 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
231 F77_FUNC (cqr1up, CQR1UP) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
232 const octave_idx_type&, FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
233 const octave_idx_type&, FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
234 const octave_idx_type&, FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
235 FloatComplex*, FloatComplex*, float*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
236 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
237 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
238 F77_FUNC (cqrinc, CQRINC) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
239 const octave_idx_type&, FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
240 const octave_idx_type&, FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
241 const octave_idx_type&,const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
242 const FloatComplex*, float*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
243 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
244 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
245 F77_FUNC (cqrdec, CQRDEC) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
246 const octave_idx_type&, FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
247 const octave_idx_type&, FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
248 const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
249 float*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
250 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
251 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
252 F77_FUNC (cqrinr, CQRINR) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
253 FloatComplex*, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
254 FloatComplex*, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
255 const octave_idx_type&, const FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
256 float*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
257 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
258 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
259 F77_FUNC (cqrder, CQRDER) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
260 FloatComplex*, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
261 FloatComplex*, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
262 const octave_idx_type&, FloatComplex*, float*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
263 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
264 F77_RET_T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
265 F77_FUNC (cqrshc, CQRSHC) (const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
266 const octave_idx_type&, FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
267 const octave_idx_type&, FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
268 const octave_idx_type&, const octave_idx_type&, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
269 const octave_idx_type&, FloatComplex*, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
270 float*); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
271 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
272 #endif |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
273 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
274 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
275 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
276 qr<T>::qr (const T& q_arg, const T& r_arg) |
11505
9a308e96194e
more data member initialization fixes
John W. Eaton <jwe@octave.org>
parents:
9715
diff
changeset
|
277 : q (q_arg), r (r_arg) |
9713
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
278 { |
18084
8e056300994b
Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
279 octave_idx_type q_nr = q.rows (); |
8e056300994b
Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
280 octave_idx_type q_nc = q.columns (); |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
281 |
18084
8e056300994b
Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
282 octave_idx_type r_nr = r.rows (); |
8e056300994b
Follow coding convention of defining and initializing only 1 variable per line in liboctave.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
283 octave_idx_type r_nc = r.columns (); |
11505
9a308e96194e
more data member initialization fixes
John W. Eaton <jwe@octave.org>
parents:
9715
diff
changeset
|
284 |
9a308e96194e
more data member initialization fixes
John W. Eaton <jwe@octave.org>
parents:
9715
diff
changeset
|
285 if (! (q_nc == r_nr && (q_nr == q_nc || (q_nr > q_nc && r_nr == r_nc)))) |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
286 (*current_liboctave_error_handler) ("QR dimensions mismatch"); |
9713
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
287 } |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
288 |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
289 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
290 typename qr<T>::type |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
291 qr<T>::get_type (void) const |
9713
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
292 { |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
293 type retval; |
11505
9a308e96194e
more data member initialization fixes
John W. Eaton <jwe@octave.org>
parents:
9715
diff
changeset
|
294 |
20955
77f5591878bf
maint: Use '! expr' rather than '!expr' to conform to coding guidelines.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
295 if (! q.is_empty () && q.is_square ()) |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
296 retval = qr<T>::std; |
9713
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
297 else if (q.rows () > q.columns () && r.is_square ()) |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
298 retval = qr<T>::economy; |
9713
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
299 else |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
300 retval = qr<T>::raw; |
11505
9a308e96194e
more data member initialization fixes
John W. Eaton <jwe@octave.org>
parents:
9715
diff
changeset
|
301 |
9713
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
302 return retval; |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
303 } |
7918eb15040c
refactor the QR classes onto a templated base
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
304 |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
305 template <typename T> |
9715
9f27172fbd1e
auto-set MatrixType from certain functions
Jaroslav Hajek <highegg@gmail.com>
parents:
9713
diff
changeset
|
306 bool |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
307 qr<T>::regular (void) const |
9715
9f27172fbd1e
auto-set MatrixType from certain functions
Jaroslav Hajek <highegg@gmail.com>
parents:
9713
diff
changeset
|
308 { |
13217
08ba694723f5
fix warnings for unused but set variables
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
309 bool retval = true; |
08ba694723f5
fix warnings for unused but set variables
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
310 |
9715
9f27172fbd1e
auto-set MatrixType from certain functions
Jaroslav Hajek <highegg@gmail.com>
parents:
9713
diff
changeset
|
311 octave_idx_type k = std::min (r.rows (), r.columns ()); |
13217
08ba694723f5
fix warnings for unused but set variables
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
312 |
9715
9f27172fbd1e
auto-set MatrixType from certain functions
Jaroslav Hajek <highegg@gmail.com>
parents:
9713
diff
changeset
|
313 for (octave_idx_type i = 0; i < k; i++) |
13217
08ba694723f5
fix warnings for unused but set variables
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
314 { |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
315 if (r(i, i) == ELT_T ()) |
13217
08ba694723f5
fix warnings for unused but set variables
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
316 { |
08ba694723f5
fix warnings for unused but set variables
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
317 retval = false; |
08ba694723f5
fix warnings for unused but set variables
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
318 break; |
08ba694723f5
fix warnings for unused but set variables
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
319 } |
08ba694723f5
fix warnings for unused but set variables
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
320 } |
9715
9f27172fbd1e
auto-set MatrixType from certain functions
Jaroslav Hajek <highegg@gmail.com>
parents:
9713
diff
changeset
|
321 |
13217
08ba694723f5
fix warnings for unused but set variables
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
322 return retval; |
9715
9f27172fbd1e
auto-set MatrixType from certain functions
Jaroslav Hajek <highegg@gmail.com>
parents:
9713
diff
changeset
|
323 } |
9f27172fbd1e
auto-set MatrixType from certain functions
Jaroslav Hajek <highegg@gmail.com>
parents:
9713
diff
changeset
|
324 |
21279
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
325 #if ! defined (HAVE_QRUPDATE) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
326 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
327 // Replacement update methods. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
328 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
329 static |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
330 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
331 warn_qrupdate_once (void) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
332 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
333 static bool warned = false; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
334 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
335 if (! warned) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
336 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
337 (*current_liboctave_warning_with_id_handler) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
338 ("Octave:missing-dependency", |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
339 "In this version of Octave, QR & Cholesky updating routines " |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
340 "simply update the matrix and recalculate factorizations. " |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
341 "To use fast algorithms, link Octave with the qrupdate library. " |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
342 "See <http://sourceforge.net/projects/qrupdate>."); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
343 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
344 warned = true; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
345 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
346 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
347 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
348 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
349 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
350 qr<T>::update (const CV_T& u, const CV_T& v) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
351 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
352 warn_qrupdate_once (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
353 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
354 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
355 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
356 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
357 if (u.numel () != m || v.numel () != n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
358 (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
359 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
360 init (q*r + T (u) * T (v).hermitian (), get_type ()); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
361 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
362 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
363 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
364 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
365 qr<T>::update (const T& u, const T& v) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
366 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
367 warn_qrupdate_once (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
368 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
369 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
370 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
371 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
372 if (u.rows () != m || v.rows () != n || u.cols () != v.cols ()) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
373 (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
374 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
375 init (q*r + u * v.hermitian (), get_type ()); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
376 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
377 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
378 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
379 static |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
380 T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
381 insert_col (const T& a, octave_idx_type i, const CV_T& x) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
382 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
383 T retval (a.rows (), a.columns () + 1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
384 retval.assign (idx_vector::colon, idx_vector (0, i), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
385 a.index (idx_vector::colon, idx_vector (0, i))); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
386 retval.assign (idx_vector::colon, idx_vector (i), x); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
387 retval.assign (idx_vector::colon, idx_vector (i+1, retval.columns ()), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
388 a.index (idx_vector::colon, idx_vector (i, a.columns ()))); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
389 return retval; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
390 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
391 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
392 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
393 static |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
394 T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
395 insert_row (const T& a, octave_idx_type i, const RV_T& x) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
396 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
397 T retval (a.rows () + 1, a.columns ()); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
398 retval.assign (idx_vector (0, i), idx_vector::colon, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
399 a.index (idx_vector (0, i), idx_vector::colon)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
400 retval.assign (idx_vector (i), idx_vector::colon, x); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
401 retval.assign (idx_vector (i+1, retval.rows ()), idx_vector::colon, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
402 a.index (idx_vector (i, a.rows ()), idx_vector::colon)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
403 return retval; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
404 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
405 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
406 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
407 static |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
408 T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
409 delete_col (const T& a, octave_idx_type i) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
410 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
411 T retval = a; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
412 retval.delete_elements (1, idx_vector (i)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
413 return retval; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
414 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
415 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
416 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
417 static |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
418 T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
419 delete_row (const T& a, octave_idx_type i) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
420 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
421 T retval = a; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
422 retval.delete_elements (0, idx_vector (i)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
423 return retval; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
424 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
425 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
426 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
427 static |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
428 T |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
429 shift_cols (const T& a, octave_idx_type i, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
430 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
431 octave_idx_type n = a.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
432 Array<octave_idx_type> p (dim_vector (n, 1)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
433 for (octave_idx_type k = 0; k < n; k++) p(k) = k; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
434 if (i < j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
435 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
436 for (octave_idx_type k = i; k < j; k++) p(k) = k+1; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
437 p(j) = i; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
438 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
439 else if (j < i) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
440 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
441 p(j) = i; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
442 for (octave_idx_type k = j+1; k < i+1; k++) p(k) = k-1; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
443 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
444 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
445 return a.index (idx_vector::colon, idx_vector (p)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
446 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
447 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
448 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
449 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
450 qr<T>::insert_col (const CV_T& u, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
451 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
452 warn_qrupdate_once (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
453 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
454 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
455 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
456 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
457 if (u.numel () != m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
458 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
459 if (j < 0 || j > n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
460 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
461 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
462 init (::insert_col (q*r, j, u), get_type ()); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
463 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
464 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
465 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
466 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
467 qr<T>::insert_col (const T& u, const Array<octave_idx_type>& j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
468 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
469 warn_qrupdate_once (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
470 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
471 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
472 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
473 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
474 Array<octave_idx_type> jsi; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
475 Array<octave_idx_type> js = j.sort (jsi, 0, ASCENDING); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
476 octave_idx_type nj = js.numel (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
477 bool dups = false; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
478 for (octave_idx_type i = 0; i < nj - 1; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
479 dups = dups && js(i) == js(i+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
480 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
481 if (dups) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
482 (*current_liboctave_error_handler) ("qrinsert: duplicate index detected"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
483 if (u.numel () != m || u.columns () != nj) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
484 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
485 if (nj > 0 && (js(0) < 0 || js(nj-1) > n)) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
486 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
487 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
488 if (nj > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
489 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
490 T a = q*r; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
491 for (octave_idx_type i = 0; i < js.numel (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
492 a = ::insert_col (a, js(i), u.column (i)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
493 init (a, get_type ()); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
494 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
495 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
496 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
497 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
498 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
499 qr<T>::delete_col (octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
500 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
501 warn_qrupdate_once (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
502 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
503 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
504 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
505 if (j < 0 || j > n-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
506 (*current_liboctave_error_handler) ("qrdelete: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
507 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
508 init (::delete_col (q*r, j), get_type ()); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
509 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
510 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
511 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
512 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
513 qr<T>::delete_col (const Array<octave_idx_type>& j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
514 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
515 warn_qrupdate_once (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
516 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
517 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
518 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
519 Array<octave_idx_type> jsi; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
520 Array<octave_idx_type> js = j.sort (jsi, 0, DESCENDING); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
521 octave_idx_type nj = js.numel (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
522 bool dups = false; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
523 for (octave_idx_type i = 0; i < nj - 1; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
524 dups = dups && js(i) == js(i+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
525 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
526 if (dups) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
527 (*current_liboctave_error_handler) ("qrinsert: duplicate index detected"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
528 if (nj > 0 && (js(0) > n-1 || js(nj-1) < 0)) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
529 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
530 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
531 if (nj > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
532 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
533 T a = q*r; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
534 for (octave_idx_type i = 0; i < js.numel (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
535 a = ::delete_col (a, js(i)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
536 init (a, get_type ()); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
537 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
538 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
539 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
540 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
541 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
542 qr<T>::insert_row (const RV_T& u, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
543 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
544 warn_qrupdate_once (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
545 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
546 octave_idx_type m = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
547 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
548 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
549 if (! q.is_square () || u.numel () != n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
550 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
551 if (j < 0 || j > m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
552 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
553 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
554 init (::insert_row (q*r, j, u), get_type ()); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
555 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
556 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
557 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
558 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
559 qr<T>::delete_row (octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
560 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
561 warn_qrupdate_once (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
562 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
563 octave_idx_type m = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
564 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
565 if (! q.is_square ()) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
566 (*current_liboctave_error_handler) ("qrdelete: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
567 if (j < 0 || j > m-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
568 (*current_liboctave_error_handler) ("qrdelete: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
569 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
570 init (::delete_row (q*r, j), get_type ()); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
571 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
572 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
573 template <typename T> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
574 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
575 qr<T>::shift_cols (octave_idx_type i, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
576 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
577 warn_qrupdate_once (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
578 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
579 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
580 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
581 if (i < 0 || i > n-1 || j < 0 || j > n-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
582 (*current_liboctave_error_handler) ("qrshift: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
583 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
584 init (::shift_cols (q*r, i, j), get_type ()); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
585 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
586 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
587 #endif |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
588 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
589 // Specializations. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
590 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
591 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
592 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
593 qr<Matrix>::form (octave_idx_type n, Matrix& afact, double *tau, type qr_type) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
594 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
595 octave_idx_type m = afact.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
596 octave_idx_type min_mn = std::min (m, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
597 octave_idx_type info; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
598 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
599 if (qr_type == qr<Matrix>::raw) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
600 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
601 for (octave_idx_type j = 0; j < min_mn; j++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
602 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
603 octave_idx_type limit = j < min_mn - 1 ? j : min_mn - 1; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
604 for (octave_idx_type i = limit + 1; i < m; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
605 afact.elem (i, j) *= tau[j]; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
606 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
607 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
608 r = afact; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
609 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
610 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
611 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
612 // Attempt to minimize copying. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
613 if (m >= n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
614 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
615 // afact will become q. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
616 q = afact; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
617 octave_idx_type k = qr_type == qr<Matrix>::economy ? n : m; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
618 r = Matrix (k, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
619 for (octave_idx_type j = 0; j < n; j++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
620 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
621 octave_idx_type i = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
622 for (; i <= j; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
623 r.xelem (i, j) = afact.xelem (i, j); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
624 for (; i < k; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
625 r.xelem (i, j) = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
626 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
627 afact = Matrix (); // optimize memory |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
628 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
629 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
630 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
631 // afact will become r. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
632 q = Matrix (m, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
633 for (octave_idx_type j = 0; j < m; j++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
634 for (octave_idx_type i = j + 1; i < m; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
635 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
636 q.xelem (i, j) = afact.xelem (i, j); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
637 afact.xelem (i, j) = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
638 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
639 r = afact; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
640 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
641 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
642 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
643 if (m > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
644 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
645 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
646 // workspace query. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
647 double rlwork; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
648 F77_XFCN (dorgqr, DORGQR, (m, k, min_mn, q.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
649 &rlwork, -1, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
650 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
651 // allocate buffer and do the job. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
652 octave_idx_type lwork = rlwork; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
653 lwork = std::max (lwork, static_cast<octave_idx_type> (1)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
654 OCTAVE_LOCAL_BUFFER (double, work, lwork); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
655 F77_XFCN (dorgqr, DORGQR, (m, k, min_mn, q.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
656 work, lwork, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
657 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
658 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
659 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
660 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
661 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
662 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
663 qr<Matrix>::init (const Matrix& a, type qr_type) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
664 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
665 octave_idx_type m = a.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
666 octave_idx_type n = a.cols (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
667 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
668 octave_idx_type min_mn = m < n ? m : n; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
669 OCTAVE_LOCAL_BUFFER (double, tau, min_mn); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
670 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
671 octave_idx_type info = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
672 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
673 Matrix afact = a; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
674 if (m > n && qr_type == qr<Matrix>::std) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
675 afact.resize (m, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
676 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
677 if (m > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
678 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
679 // workspace query. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
680 double rlwork; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
681 F77_XFCN (dgeqrf, DGEQRF, (m, n, afact.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
682 &rlwork, -1, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
683 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
684 // allocate buffer and do the job. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
685 octave_idx_type lwork = rlwork; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
686 lwork = std::max (lwork, static_cast<octave_idx_type> (1)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
687 OCTAVE_LOCAL_BUFFER (double, work, lwork); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
688 F77_XFCN (dgeqrf, DGEQRF, (m, n, afact.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
689 work, lwork, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
690 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
691 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
692 form (n, afact, tau, qr_type); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
693 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
694 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
695 #if defined (HAVE_QRUPDATE) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
696 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
697 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
698 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
699 qr<Matrix>::update (const ColumnVector& u, const ColumnVector& v) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
700 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
701 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
702 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
703 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
704 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
705 if (u.numel () != m || v.numel () != n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
706 (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
707 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
708 ColumnVector utmp = u; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
709 ColumnVector vtmp = v; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
710 OCTAVE_LOCAL_BUFFER (double, w, 2*k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
711 F77_XFCN (dqr1up, DQR1UP, (m, n, k, q.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
712 m, r.fortran_vec (), k, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
713 utmp.fortran_vec (), vtmp.fortran_vec (), w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
714 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
715 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
716 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
717 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
718 qr<Matrix>::update (const Matrix& u, const Matrix& v) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
719 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
720 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
721 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
722 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
723 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
724 if (u.rows () != m || v.rows () != n || u.cols () != v.cols ()) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
725 (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
726 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
727 OCTAVE_LOCAL_BUFFER (double, w, 2*k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
728 for (volatile octave_idx_type i = 0; i < u.cols (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
729 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
730 ColumnVector utmp = u.column (i); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
731 ColumnVector vtmp = v.column (i); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
732 F77_XFCN (dqr1up, DQR1UP, (m, n, k, q.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
733 m, r.fortran_vec (), k, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
734 utmp.fortran_vec (), vtmp.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
735 w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
736 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
737 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
738 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
739 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
740 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
741 qr<Matrix>::insert_col (const ColumnVector& u, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
742 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
743 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
744 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
745 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
746 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
747 if (u.numel () != m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
748 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
749 if (j < 0 || j > n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
750 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
751 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
752 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
753 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
754 q.resize (m, k+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
755 r.resize (k+1, n+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
756 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
757 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
758 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
759 r.resize (k, n+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
760 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
761 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
762 ColumnVector utmp = u; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
763 OCTAVE_LOCAL_BUFFER (double, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
764 F77_XFCN (dqrinc, DQRINC, (m, n, k, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
765 r.fortran_vec (), r.rows (), j + 1, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
766 utmp.data (), w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
767 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
768 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
769 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
770 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
771 qr<Matrix>::insert_col (const Matrix& u, const Array<octave_idx_type>& j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
772 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
773 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
774 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
775 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
776 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
777 Array<octave_idx_type> jsi; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
778 Array<octave_idx_type> js = j.sort (jsi, 0, ASCENDING); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
779 octave_idx_type nj = js.numel (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
780 bool dups = false; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
781 for (octave_idx_type i = 0; i < nj - 1; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
782 dups = dups && js(i) == js(i+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
783 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
784 if (dups) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
785 (*current_liboctave_error_handler) ("qrinsert: duplicate index detected"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
786 if (u.numel () != m || u.columns () != nj) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
787 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
788 if (nj > 0 && (js(0) < 0 || js(nj-1) > n)) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
789 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
790 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
791 if (nj > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
792 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
793 octave_idx_type kmax = std::min (k + nj, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
794 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
795 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
796 q.resize (m, kmax); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
797 r.resize (kmax, n + nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
798 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
799 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
800 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
801 r.resize (k, n + nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
802 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
803 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
804 OCTAVE_LOCAL_BUFFER (double, w, kmax); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
805 for (volatile octave_idx_type i = 0; i < js.numel (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
806 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
807 octave_idx_type ii = i; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
808 ColumnVector utmp = u.column (jsi(i)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
809 F77_XFCN (dqrinc, DQRINC, (m, n + ii, std::min (kmax, k + ii), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
810 q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
811 r.fortran_vec (), r.rows (), js(ii) + 1, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
812 utmp.data (), w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
813 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
814 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
815 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
816 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
817 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
818 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
819 qr<Matrix>::delete_col (octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
820 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
821 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
822 octave_idx_type k = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
823 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
824 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
825 if (j < 0 || j > n-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
826 (*current_liboctave_error_handler) ("qrdelete: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
827 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
828 OCTAVE_LOCAL_BUFFER (double, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
829 F77_XFCN (dqrdec, DQRDEC, (m, n, k, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
830 r.fortran_vec (), r.rows (), j + 1, w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
831 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
832 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
833 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
834 q.resize (m, k-1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
835 r.resize (k-1, n-1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
836 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
837 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
838 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
839 r.resize (k, n-1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
840 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
841 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
842 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
843 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
844 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
845 qr<Matrix>::delete_col (const Array<octave_idx_type>& j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
846 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
847 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
848 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
849 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
850 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
851 Array<octave_idx_type> jsi; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
852 Array<octave_idx_type> js = j.sort (jsi, 0, DESCENDING); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
853 octave_idx_type nj = js.numel (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
854 bool dups = false; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
855 for (octave_idx_type i = 0; i < nj - 1; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
856 dups = dups && js(i) == js(i+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
857 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
858 if (dups) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
859 (*current_liboctave_error_handler) ("qrinsert: duplicate index detected"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
860 if (nj > 0 && (js(0) > n-1 || js(nj-1) < 0)) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
861 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
862 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
863 if (nj > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
864 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
865 OCTAVE_LOCAL_BUFFER (double, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
866 for (volatile octave_idx_type i = 0; i < js.numel (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
867 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
868 octave_idx_type ii = i; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
869 F77_XFCN (dqrdec, DQRDEC, (m, n - ii, k == m ? k : k - ii, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
870 q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
871 r.fortran_vec (), r.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
872 js(ii) + 1, w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
873 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
874 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
875 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
876 q.resize (m, k - nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
877 r.resize (k - nj, n - nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
878 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
879 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
880 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
881 r.resize (k, n - nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
882 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
883 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
884 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
885 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
886 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
887 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
888 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
889 qr<Matrix>::insert_row (const RowVector& u, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
890 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
891 octave_idx_type m = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
892 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
893 octave_idx_type k = std::min (m, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
894 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
895 if (! q.is_square () || u.numel () != n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
896 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
897 if (j < 0 || j > m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
898 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
899 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
900 q.resize (m + 1, m + 1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
901 r.resize (m + 1, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
902 RowVector utmp = u; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
903 OCTAVE_LOCAL_BUFFER (double, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
904 F77_XFCN (dqrinr, DQRINR, (m, n, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
905 r.fortran_vec (), r.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
906 j + 1, utmp.fortran_vec (), w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
907 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
908 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
909 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
910 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
911 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
912 qr<Matrix>::delete_row (octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
913 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
914 octave_idx_type m = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
915 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
916 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
917 if (! q.is_square ()) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
918 (*current_liboctave_error_handler) ("qrdelete: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
919 if (j < 0 || j > m-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
920 (*current_liboctave_error_handler) ("qrdelete: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
921 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
922 OCTAVE_LOCAL_BUFFER (double, w, 2*m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
923 F77_XFCN (dqrder, DQRDER, (m, n, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
924 r.fortran_vec (), r.rows (), j + 1, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
925 w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
926 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
927 q.resize (m - 1, m - 1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
928 r.resize (m - 1, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
929 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
930 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
931 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
932 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
933 qr<Matrix>::shift_cols (octave_idx_type i, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
934 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
935 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
936 octave_idx_type k = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
937 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
938 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
939 if (i < 0 || i > n-1 || j < 0 || j > n-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
940 (*current_liboctave_error_handler) ("qrshift: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
941 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
942 OCTAVE_LOCAL_BUFFER (double, w, 2*k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
943 F77_XFCN (dqrshc, DQRSHC, (m, n, k, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
944 q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
945 r.fortran_vec (), r.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
946 i + 1, j + 1, w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
947 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
948 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
949 #endif |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
950 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
951 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
952 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
953 qr<FloatMatrix>::form (octave_idx_type n, FloatMatrix& afact, float *tau, type qr_type) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
954 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
955 octave_idx_type m = afact.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
956 octave_idx_type min_mn = std::min (m, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
957 octave_idx_type info; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
958 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
959 if (qr_type == qr<FloatMatrix>::raw) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
960 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
961 for (octave_idx_type j = 0; j < min_mn; j++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
962 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
963 octave_idx_type limit = j < min_mn - 1 ? j : min_mn - 1; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
964 for (octave_idx_type i = limit + 1; i < m; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
965 afact.elem (i, j) *= tau[j]; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
966 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
967 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
968 r = afact; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
969 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
970 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
971 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
972 // Attempt to minimize copying. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
973 if (m >= n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
974 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
975 // afact will become q. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
976 q = afact; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
977 octave_idx_type k = qr_type == qr<FloatMatrix>::economy ? n : m; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
978 r = FloatMatrix (k, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
979 for (octave_idx_type j = 0; j < n; j++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
980 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
981 octave_idx_type i = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
982 for (; i <= j; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
983 r.xelem (i, j) = afact.xelem (i, j); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
984 for (; i < k; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
985 r.xelem (i, j) = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
986 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
987 afact = FloatMatrix (); // optimize memory |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
988 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
989 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
990 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
991 // afact will become r. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
992 q = FloatMatrix (m, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
993 for (octave_idx_type j = 0; j < m; j++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
994 for (octave_idx_type i = j + 1; i < m; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
995 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
996 q.xelem (i, j) = afact.xelem (i, j); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
997 afact.xelem (i, j) = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
998 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
999 r = afact; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1000 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1001 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1002 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1003 if (m > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1004 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1005 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1006 // workspace query. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1007 float rlwork; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1008 F77_XFCN (sorgqr, SORGQR, (m, k, min_mn, q.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1009 &rlwork, -1, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1010 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1011 // allocate buffer and do the job. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1012 octave_idx_type lwork = rlwork; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1013 lwork = std::max (lwork, static_cast<octave_idx_type> (1)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1014 OCTAVE_LOCAL_BUFFER (float, work, lwork); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1015 F77_XFCN (sorgqr, SORGQR, (m, k, min_mn, q.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1016 work, lwork, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1017 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1018 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1019 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1020 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1021 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1022 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1023 qr<FloatMatrix>::init (const FloatMatrix& a, type qr_type) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1024 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1025 octave_idx_type m = a.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1026 octave_idx_type n = a.cols (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1027 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1028 octave_idx_type min_mn = m < n ? m : n; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1029 OCTAVE_LOCAL_BUFFER (float, tau, min_mn); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1030 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1031 octave_idx_type info = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1032 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1033 FloatMatrix afact = a; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1034 if (m > n && qr_type == qr<FloatMatrix>::std) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1035 afact.resize (m, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1036 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1037 if (m > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1038 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1039 // workspace query. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1040 float rlwork; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1041 F77_XFCN (sgeqrf, SGEQRF, (m, n, afact.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1042 &rlwork, -1, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1043 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1044 // allocate buffer and do the job. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1045 octave_idx_type lwork = rlwork; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1046 lwork = std::max (lwork, static_cast<octave_idx_type> (1)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1047 OCTAVE_LOCAL_BUFFER (float, work, lwork); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1048 F77_XFCN (sgeqrf, SGEQRF, (m, n, afact.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1049 work, lwork, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1050 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1051 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1052 form (n, afact, tau, qr_type); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1053 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1054 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1055 #ifdef HAVE_QRUPDATE |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1056 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1057 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1058 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1059 qr<FloatMatrix>::update (const FloatColumnVector& u, const FloatColumnVector& v) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1060 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1061 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1062 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1063 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1064 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1065 if (u.numel () != m || v.numel () != n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1066 (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1067 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1068 FloatColumnVector utmp = u; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1069 FloatColumnVector vtmp = v; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1070 OCTAVE_LOCAL_BUFFER (float, w, 2*k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1071 F77_XFCN (sqr1up, SQR1UP, (m, n, k, q.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1072 m, r.fortran_vec (), k, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1073 utmp.fortran_vec (), vtmp.fortran_vec (), w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1074 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1075 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1076 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1077 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1078 qr<FloatMatrix>::update (const FloatMatrix& u, const FloatMatrix& v) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1079 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1080 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1081 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1082 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1083 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1084 if (u.rows () != m || v.rows () != n || u.cols () != v.cols ()) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1085 (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1086 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1087 OCTAVE_LOCAL_BUFFER (float, w, 2*k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1088 for (volatile octave_idx_type i = 0; i < u.cols (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1089 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1090 FloatColumnVector utmp = u.column (i); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1091 FloatColumnVector vtmp = v.column (i); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1092 F77_XFCN (sqr1up, SQR1UP, (m, n, k, q.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1093 m, r.fortran_vec (), k, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1094 utmp.fortran_vec (), vtmp.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1095 w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1096 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1097 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1098 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1099 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1100 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1101 qr<FloatMatrix>::insert_col (const FloatColumnVector& u, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1102 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1103 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1104 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1105 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1106 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1107 if (u.numel () != m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1108 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1109 if (j < 0 || j > n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1110 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1111 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1112 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1113 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1114 q.resize (m, k+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1115 r.resize (k+1, n+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1116 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1117 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1118 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1119 r.resize (k, n+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1120 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1121 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1122 FloatColumnVector utmp = u; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1123 OCTAVE_LOCAL_BUFFER (float, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1124 F77_XFCN (sqrinc, SQRINC, (m, n, k, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1125 r.fortran_vec (), r.rows (), j + 1, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1126 utmp.data (), w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1127 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1128 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1129 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1130 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1131 qr<FloatMatrix>::insert_col (const FloatMatrix& u, const Array<octave_idx_type>& j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1132 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1133 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1134 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1135 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1136 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1137 Array<octave_idx_type> jsi; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1138 Array<octave_idx_type> js = j.sort (jsi, 0, ASCENDING); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1139 octave_idx_type nj = js.numel (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1140 bool dups = false; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1141 for (octave_idx_type i = 0; i < nj - 1; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1142 dups = dups && js(i) == js(i+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1143 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1144 if (dups) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1145 (*current_liboctave_error_handler) ("qrinsert: duplicate index detected"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1146 if (u.numel () != m || u.columns () != nj) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1147 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1148 if (nj > 0 && (js(0) < 0 || js(nj-1) > n)) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1149 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1150 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1151 if (nj > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1152 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1153 octave_idx_type kmax = std::min (k + nj, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1154 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1155 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1156 q.resize (m, kmax); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1157 r.resize (kmax, n + nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1158 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1159 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1160 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1161 r.resize (k, n + nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1162 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1163 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1164 OCTAVE_LOCAL_BUFFER (float, w, kmax); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1165 for (volatile octave_idx_type i = 0; i < js.numel (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1166 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1167 octave_idx_type ii = i; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1168 FloatColumnVector utmp = u.column (jsi(i)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1169 F77_XFCN (sqrinc, SQRINC, (m, n + ii, std::min (kmax, k + ii), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1170 q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1171 r.fortran_vec (), r.rows (), js(ii) + 1, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1172 utmp.data (), w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1173 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1174 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1175 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1176 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1177 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1178 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1179 qr<FloatMatrix>::delete_col (octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1180 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1181 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1182 octave_idx_type k = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1183 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1184 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1185 if (j < 0 || j > n-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1186 (*current_liboctave_error_handler) ("qrdelete: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1187 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1188 OCTAVE_LOCAL_BUFFER (float, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1189 F77_XFCN (sqrdec, SQRDEC, (m, n, k, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1190 r.fortran_vec (), r.rows (), j + 1, w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1191 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1192 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1193 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1194 q.resize (m, k-1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1195 r.resize (k-1, n-1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1196 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1197 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1198 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1199 r.resize (k, n-1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1200 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1201 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1202 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1203 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1204 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1205 qr<FloatMatrix>::delete_col (const Array<octave_idx_type>& j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1206 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1207 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1208 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1209 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1210 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1211 Array<octave_idx_type> jsi; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1212 Array<octave_idx_type> js = j.sort (jsi, 0, DESCENDING); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1213 octave_idx_type nj = js.numel (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1214 bool dups = false; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1215 for (octave_idx_type i = 0; i < nj - 1; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1216 dups = dups && js(i) == js(i+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1217 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1218 if (dups) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1219 (*current_liboctave_error_handler) ("qrinsert: duplicate index detected"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1220 if (nj > 0 && (js(0) > n-1 || js(nj-1) < 0)) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1221 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1222 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1223 if (nj > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1224 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1225 OCTAVE_LOCAL_BUFFER (float, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1226 for (volatile octave_idx_type i = 0; i < js.numel (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1227 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1228 octave_idx_type ii = i; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1229 F77_XFCN (sqrdec, SQRDEC, (m, n - ii, k == m ? k : k - ii, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1230 q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1231 r.fortran_vec (), r.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1232 js(ii) + 1, w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1233 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1234 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1235 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1236 q.resize (m, k - nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1237 r.resize (k - nj, n - nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1238 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1239 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1240 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1241 r.resize (k, n - nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1242 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1243 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1244 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1245 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1246 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1247 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1248 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1249 qr<FloatMatrix>::insert_row (const FloatRowVector& u, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1250 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1251 octave_idx_type m = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1252 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1253 octave_idx_type k = std::min (m, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1254 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1255 if (! q.is_square () || u.numel () != n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1256 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1257 if (j < 0 || j > m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1258 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1259 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1260 q.resize (m + 1, m + 1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1261 r.resize (m + 1, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1262 FloatRowVector utmp = u; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1263 OCTAVE_LOCAL_BUFFER (float, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1264 F77_XFCN (sqrinr, SQRINR, (m, n, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1265 r.fortran_vec (), r.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1266 j + 1, utmp.fortran_vec (), w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1267 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1268 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1269 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1270 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1271 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1272 qr<FloatMatrix>::delete_row (octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1273 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1274 octave_idx_type m = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1275 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1276 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1277 if (! q.is_square ()) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1278 (*current_liboctave_error_handler) ("qrdelete: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1279 if (j < 0 || j > m-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1280 (*current_liboctave_error_handler) ("qrdelete: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1281 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1282 OCTAVE_LOCAL_BUFFER (float, w, 2*m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1283 F77_XFCN (sqrder, SQRDER, (m, n, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1284 r.fortran_vec (), r.rows (), j + 1, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1285 w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1286 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1287 q.resize (m - 1, m - 1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1288 r.resize (m - 1, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1289 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1290 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1291 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1292 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1293 qr<FloatMatrix>::shift_cols (octave_idx_type i, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1294 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1295 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1296 octave_idx_type k = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1297 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1298 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1299 if (i < 0 || i > n-1 || j < 0 || j > n-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1300 (*current_liboctave_error_handler) ("qrshift: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1301 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1302 OCTAVE_LOCAL_BUFFER (float, w, 2*k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1303 F77_XFCN (sqrshc, SQRSHC, (m, n, k, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1304 q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1305 r.fortran_vec (), r.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1306 i + 1, j + 1, w)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1307 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1308 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1309 #endif |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1310 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1311 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1312 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1313 qr<ComplexMatrix>::form (octave_idx_type n, ComplexMatrix& afact, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1314 Complex *tau, type qr_type) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1315 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1316 octave_idx_type m = afact.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1317 octave_idx_type min_mn = std::min (m, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1318 octave_idx_type info; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1319 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1320 if (qr_type == qr<ComplexMatrix>::raw) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1321 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1322 for (octave_idx_type j = 0; j < min_mn; j++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1323 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1324 octave_idx_type limit = j < min_mn - 1 ? j : min_mn - 1; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1325 for (octave_idx_type i = limit + 1; i < m; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1326 afact.elem (i, j) *= tau[j]; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1327 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1328 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1329 r = afact; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1330 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1331 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1332 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1333 // Attempt to minimize copying. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1334 if (m >= n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1335 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1336 // afact will become q. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1337 q = afact; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1338 octave_idx_type k = qr_type == qr<ComplexMatrix>::economy ? n : m; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1339 r = ComplexMatrix (k, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1340 for (octave_idx_type j = 0; j < n; j++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1341 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1342 octave_idx_type i = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1343 for (; i <= j; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1344 r.xelem (i, j) = afact.xelem (i, j); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1345 for (; i < k; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1346 r.xelem (i, j) = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1347 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1348 afact = ComplexMatrix (); // optimize memory |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1349 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1350 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1351 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1352 // afact will become r. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1353 q = ComplexMatrix (m, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1354 for (octave_idx_type j = 0; j < m; j++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1355 for (octave_idx_type i = j + 1; i < m; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1356 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1357 q.xelem (i, j) = afact.xelem (i, j); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1358 afact.xelem (i, j) = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1359 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1360 r = afact; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1361 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1362 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1363 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1364 if (m > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1365 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1366 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1367 // workspace query. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1368 Complex clwork; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1369 F77_XFCN (zungqr, ZUNGQR, (m, k, min_mn, q.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1370 &clwork, -1, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1371 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1372 // allocate buffer and do the job. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1373 octave_idx_type lwork = clwork.real (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1374 lwork = std::max (lwork, static_cast<octave_idx_type> (1)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1375 OCTAVE_LOCAL_BUFFER (Complex, work, lwork); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1376 F77_XFCN (zungqr, ZUNGQR, (m, k, min_mn, q.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1377 work, lwork, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1378 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1379 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1380 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1381 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1382 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1383 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1384 qr<ComplexMatrix>::init (const ComplexMatrix& a, type qr_type) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1385 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1386 octave_idx_type m = a.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1387 octave_idx_type n = a.cols (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1388 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1389 octave_idx_type min_mn = m < n ? m : n; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1390 OCTAVE_LOCAL_BUFFER (Complex, tau, min_mn); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1391 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1392 octave_idx_type info = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1393 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1394 ComplexMatrix afact = a; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1395 if (m > n && qr_type == qr<ComplexMatrix>::std) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1396 afact.resize (m, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1397 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1398 if (m > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1399 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1400 // workspace query. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1401 Complex clwork; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1402 F77_XFCN (zgeqrf, ZGEQRF, (m, n, afact.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1403 &clwork, -1, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1404 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1405 // allocate buffer and do the job. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1406 octave_idx_type lwork = clwork.real (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1407 lwork = std::max (lwork, static_cast<octave_idx_type> (1)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1408 OCTAVE_LOCAL_BUFFER (Complex, work, lwork); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1409 F77_XFCN (zgeqrf, ZGEQRF, (m, n, afact.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1410 work, lwork, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1411 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1412 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1413 form (n, afact, tau, qr_type); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1414 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1415 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1416 #if defined (HAVE_QRUPDATE) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1417 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1418 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1419 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1420 qr<ComplexMatrix>::update (const ComplexColumnVector& u, const ComplexColumnVector& v) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1421 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1422 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1423 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1424 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1425 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1426 if (u.numel () != m || v.numel () != n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1427 (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1428 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1429 ComplexColumnVector utmp = u; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1430 ComplexColumnVector vtmp = v; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1431 OCTAVE_LOCAL_BUFFER (Complex, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1432 OCTAVE_LOCAL_BUFFER (double, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1433 F77_XFCN (zqr1up, ZQR1UP, (m, n, k, q.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1434 m, r.fortran_vec (), k, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1435 utmp.fortran_vec (), vtmp.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1436 w, rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1437 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1438 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1439 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1440 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1441 qr<ComplexMatrix>::update (const ComplexMatrix& u, const ComplexMatrix& v) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1442 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1443 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1444 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1445 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1446 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1447 if (u.rows () != m || v.rows () != n || u.cols () != v.cols ()) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1448 (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1449 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1450 OCTAVE_LOCAL_BUFFER (Complex, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1451 OCTAVE_LOCAL_BUFFER (double, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1452 for (volatile octave_idx_type i = 0; i < u.cols (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1453 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1454 ComplexColumnVector utmp = u.column (i); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1455 ComplexColumnVector vtmp = v.column (i); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1456 F77_XFCN (zqr1up, ZQR1UP, (m, n, k, q.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1457 m, r.fortran_vec (), k, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1458 utmp.fortran_vec (), vtmp.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1459 w, rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1460 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1461 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1462 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1463 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1464 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1465 qr<ComplexMatrix>::insert_col (const ComplexColumnVector& u, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1466 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1467 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1468 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1469 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1470 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1471 if (u.numel () != m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1472 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1473 if (j < 0 || j > n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1474 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1475 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1476 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1477 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1478 q.resize (m, k+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1479 r.resize (k+1, n+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1480 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1481 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1482 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1483 r.resize (k, n+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1484 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1485 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1486 ComplexColumnVector utmp = u; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1487 OCTAVE_LOCAL_BUFFER (double, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1488 F77_XFCN (zqrinc, ZQRINC, (m, n, k, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1489 r.fortran_vec (), r.rows (), j + 1, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1490 utmp.data (), rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1491 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1492 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1493 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1494 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1495 qr<ComplexMatrix>::insert_col (const ComplexMatrix& u, const Array<octave_idx_type>& j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1496 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1497 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1498 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1499 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1500 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1501 Array<octave_idx_type> jsi; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1502 Array<octave_idx_type> js = j.sort (jsi, 0, ASCENDING); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1503 octave_idx_type nj = js.numel (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1504 bool dups = false; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1505 for (octave_idx_type i = 0; i < nj - 1; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1506 dups = dups && js(i) == js(i+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1507 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1508 if (dups) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1509 (*current_liboctave_error_handler) ("qrinsert: duplicate index detected"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1510 if (u.numel () != m || u.columns () != nj) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1511 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1512 if (nj > 0 && (js(0) < 0 || js(nj-1) > n)) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1513 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1514 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1515 if (nj > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1516 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1517 octave_idx_type kmax = std::min (k + nj, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1518 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1519 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1520 q.resize (m, kmax); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1521 r.resize (kmax, n + nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1522 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1523 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1524 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1525 r.resize (k, n + nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1526 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1527 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1528 OCTAVE_LOCAL_BUFFER (double, rw, kmax); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1529 for (volatile octave_idx_type i = 0; i < js.numel (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1530 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1531 octave_idx_type ii = i; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1532 ComplexColumnVector utmp = u.column (jsi(i)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1533 F77_XFCN (zqrinc, ZQRINC, (m, n + ii, std::min (kmax, k + ii), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1534 q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1535 r.fortran_vec (), r.rows (), js(ii) + 1, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1536 utmp.data (), rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1537 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1538 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1539 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1540 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1541 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1542 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1543 qr<ComplexMatrix>::delete_col (octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1544 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1545 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1546 octave_idx_type k = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1547 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1548 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1549 if (j < 0 || j > n-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1550 (*current_liboctave_error_handler) ("qrdelete: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1551 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1552 OCTAVE_LOCAL_BUFFER (double, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1553 F77_XFCN (zqrdec, ZQRDEC, (m, n, k, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1554 r.fortran_vec (), r.rows (), j + 1, rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1555 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1556 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1557 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1558 q.resize (m, k-1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1559 r.resize (k-1, n-1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1560 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1561 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1562 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1563 r.resize (k, n-1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1564 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1565 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1566 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1567 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1568 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1569 qr<ComplexMatrix>::delete_col (const Array<octave_idx_type>& j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1570 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1571 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1572 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1573 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1574 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1575 Array<octave_idx_type> jsi; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1576 Array<octave_idx_type> js = j.sort (jsi, 0, DESCENDING); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1577 octave_idx_type nj = js.numel (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1578 bool dups = false; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1579 for (octave_idx_type i = 0; i < nj - 1; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1580 dups = dups && js(i) == js(i+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1581 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1582 if (dups) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1583 (*current_liboctave_error_handler) ("qrinsert: duplicate index detected"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1584 if (nj > 0 && (js(0) > n-1 || js(nj-1) < 0)) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1585 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1586 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1587 if (nj > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1588 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1589 OCTAVE_LOCAL_BUFFER (double, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1590 for (volatile octave_idx_type i = 0; i < js.numel (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1591 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1592 octave_idx_type ii = i; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1593 F77_XFCN (zqrdec, ZQRDEC, (m, n - ii, k == m ? k : k - ii, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1594 q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1595 r.fortran_vec (), r.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1596 js(ii) + 1, rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1597 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1598 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1599 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1600 q.resize (m, k - nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1601 r.resize (k - nj, n - nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1602 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1603 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1604 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1605 r.resize (k, n - nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1606 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1607 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1608 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1609 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1610 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1611 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1612 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1613 qr<ComplexMatrix>::insert_row (const ComplexRowVector& u, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1614 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1615 octave_idx_type m = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1616 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1617 octave_idx_type k = std::min (m, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1618 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1619 if (! q.is_square () || u.numel () != n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1620 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1621 if (j < 0 || j > m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1622 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1623 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1624 q.resize (m + 1, m + 1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1625 r.resize (m + 1, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1626 ComplexRowVector utmp = u; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1627 OCTAVE_LOCAL_BUFFER (double, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1628 F77_XFCN (zqrinr, ZQRINR, (m, n, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1629 r.fortran_vec (), r.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1630 j + 1, utmp.fortran_vec (), rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1631 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1632 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1633 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1634 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1635 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1636 qr<ComplexMatrix>::delete_row (octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1637 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1638 octave_idx_type m = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1639 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1640 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1641 if (! q.is_square ()) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1642 (*current_liboctave_error_handler) ("qrdelete: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1643 if (j < 0 || j > m-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1644 (*current_liboctave_error_handler) ("qrdelete: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1645 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1646 OCTAVE_LOCAL_BUFFER (Complex, w, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1647 OCTAVE_LOCAL_BUFFER (double, rw, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1648 F77_XFCN (zqrder, ZQRDER, (m, n, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1649 r.fortran_vec (), r.rows (), j + 1, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1650 w, rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1651 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1652 q.resize (m - 1, m - 1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1653 r.resize (m - 1, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1654 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1655 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1656 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1657 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1658 qr<ComplexMatrix>::shift_cols (octave_idx_type i, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1659 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1660 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1661 octave_idx_type k = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1662 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1663 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1664 if (i < 0 || i > n-1 || j < 0 || j > n-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1665 (*current_liboctave_error_handler) ("qrshift: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1666 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1667 OCTAVE_LOCAL_BUFFER (Complex, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1668 OCTAVE_LOCAL_BUFFER (double, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1669 F77_XFCN (zqrshc, ZQRSHC, (m, n, k, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1670 q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1671 r.fortran_vec (), r.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1672 i + 1, j + 1, w, rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1673 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1674 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1675 #endif |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1676 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1677 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1678 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1679 qr<FloatComplexMatrix>::form (octave_idx_type n, FloatComplexMatrix& afact, FloatComplex *tau, type qr_type) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1680 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1681 octave_idx_type m = afact.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1682 octave_idx_type min_mn = std::min (m, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1683 octave_idx_type info; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1684 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1685 if (qr_type == qr<FloatComplexMatrix>::raw) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1686 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1687 for (octave_idx_type j = 0; j < min_mn; j++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1688 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1689 octave_idx_type limit = j < min_mn - 1 ? j : min_mn - 1; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1690 for (octave_idx_type i = limit + 1; i < m; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1691 afact.elem (i, j) *= tau[j]; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1692 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1693 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1694 r = afact; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1695 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1696 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1697 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1698 // Attempt to minimize copying. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1699 if (m >= n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1700 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1701 // afact will become q. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1702 q = afact; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1703 octave_idx_type k = qr_type == qr<FloatComplexMatrix>::economy ? n : m; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1704 r = FloatComplexMatrix (k, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1705 for (octave_idx_type j = 0; j < n; j++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1706 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1707 octave_idx_type i = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1708 for (; i <= j; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1709 r.xelem (i, j) = afact.xelem (i, j); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1710 for (; i < k; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1711 r.xelem (i, j) = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1712 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1713 afact = FloatComplexMatrix (); // optimize memory |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1714 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1715 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1716 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1717 // afact will become r. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1718 q = FloatComplexMatrix (m, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1719 for (octave_idx_type j = 0; j < m; j++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1720 for (octave_idx_type i = j + 1; i < m; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1721 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1722 q.xelem (i, j) = afact.xelem (i, j); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1723 afact.xelem (i, j) = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1724 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1725 r = afact; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1726 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1727 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1728 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1729 if (m > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1730 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1731 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1732 // workspace query. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1733 FloatComplex clwork; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1734 F77_XFCN (cungqr, CUNGQR, (m, k, min_mn, q.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1735 &clwork, -1, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1736 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1737 // allocate buffer and do the job. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1738 octave_idx_type lwork = clwork.real (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1739 lwork = std::max (lwork, static_cast<octave_idx_type> (1)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1740 OCTAVE_LOCAL_BUFFER (FloatComplex, work, lwork); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1741 F77_XFCN (cungqr, CUNGQR, (m, k, min_mn, q.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1742 work, lwork, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1743 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1744 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1745 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1746 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1747 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1748 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1749 qr<FloatComplexMatrix>::init (const FloatComplexMatrix& a, type qr_type) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1750 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1751 octave_idx_type m = a.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1752 octave_idx_type n = a.cols (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1753 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1754 octave_idx_type min_mn = m < n ? m : n; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1755 OCTAVE_LOCAL_BUFFER (FloatComplex, tau, min_mn); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1756 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1757 octave_idx_type info = 0; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1758 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1759 FloatComplexMatrix afact = a; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1760 if (m > n && qr_type == qr<FloatComplexMatrix>::std) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1761 afact.resize (m, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1762 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1763 if (m > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1764 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1765 // workspace query. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1766 FloatComplex clwork; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1767 F77_XFCN (cgeqrf, CGEQRF, (m, n, afact.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1768 &clwork, -1, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1769 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1770 // allocate buffer and do the job. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1771 octave_idx_type lwork = clwork.real (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1772 lwork = std::max (lwork, static_cast<octave_idx_type> (1)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1773 OCTAVE_LOCAL_BUFFER (FloatComplex, work, lwork); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1774 F77_XFCN (cgeqrf, CGEQRF, (m, n, afact.fortran_vec (), m, tau, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1775 work, lwork, info)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1776 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1777 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1778 form (n, afact, tau, qr_type); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1779 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1780 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1781 #ifdef HAVE_QRUPDATE |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1782 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1783 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1784 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1785 qr<FloatComplexMatrix>::update (const FloatComplexColumnVector& u, const FloatComplexColumnVector& v) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1786 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1787 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1788 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1789 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1790 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1791 if (u.numel () != m || v.numel () != n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1792 (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1793 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1794 FloatComplexColumnVector utmp = u; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1795 FloatComplexColumnVector vtmp = v; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1796 OCTAVE_LOCAL_BUFFER (FloatComplex, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1797 OCTAVE_LOCAL_BUFFER (float, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1798 F77_XFCN (cqr1up, CQR1UP, (m, n, k, q.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1799 m, r.fortran_vec (), k, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1800 utmp.fortran_vec (), vtmp.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1801 w, rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1802 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1803 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1804 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1805 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1806 qr<FloatComplexMatrix>::update (const FloatComplexMatrix& u, const FloatComplexMatrix& v) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1807 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1808 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1809 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1810 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1811 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1812 if (u.rows () != m || v.rows () != n || u.cols () != v.cols ()) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1813 (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1814 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1815 OCTAVE_LOCAL_BUFFER (FloatComplex, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1816 OCTAVE_LOCAL_BUFFER (float, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1817 for (volatile octave_idx_type i = 0; i < u.cols (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1818 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1819 FloatComplexColumnVector utmp = u.column (i); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1820 FloatComplexColumnVector vtmp = v.column (i); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1821 F77_XFCN (cqr1up, CQR1UP, (m, n, k, q.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1822 m, r.fortran_vec (), k, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1823 utmp.fortran_vec (), vtmp.fortran_vec (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1824 w, rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1825 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1826 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1827 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1828 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1829 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1830 qr<FloatComplexMatrix>::insert_col (const FloatComplexColumnVector& u, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1831 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1832 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1833 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1834 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1835 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1836 if (u.numel () != m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1837 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1838 if (j < 0 || j > n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1839 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1840 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1841 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1842 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1843 q.resize (m, k+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1844 r.resize (k+1, n+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1845 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1846 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1847 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1848 r.resize (k, n+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1849 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1850 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1851 FloatComplexColumnVector utmp = u; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1852 OCTAVE_LOCAL_BUFFER (float, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1853 F77_XFCN (cqrinc, CQRINC, (m, n, k, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1854 r.fortran_vec (), r.rows (), j + 1, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1855 utmp.data (), rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1856 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1857 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1858 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1859 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1860 qr<FloatComplexMatrix>::insert_col (const FloatComplexMatrix& u, const Array<octave_idx_type>& j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1861 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1862 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1863 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1864 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1865 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1866 Array<octave_idx_type> jsi; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1867 Array<octave_idx_type> js = j.sort (jsi, 0, ASCENDING); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1868 octave_idx_type nj = js.numel (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1869 bool dups = false; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1870 for (octave_idx_type i = 0; i < nj - 1; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1871 dups = dups && js(i) == js(i+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1872 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1873 if (dups) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1874 (*current_liboctave_error_handler) ("qrinsert: duplicate index detected"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1875 if (u.numel () != m || u.columns () != nj) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1876 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1877 if (nj > 0 && (js(0) < 0 || js(nj-1) > n)) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1878 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1879 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1880 if (nj > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1881 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1882 octave_idx_type kmax = std::min (k + nj, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1883 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1884 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1885 q.resize (m, kmax); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1886 r.resize (kmax, n + nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1887 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1888 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1889 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1890 r.resize (k, n + nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1891 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1892 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1893 OCTAVE_LOCAL_BUFFER (float, rw, kmax); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1894 for (volatile octave_idx_type i = 0; i < js.numel (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1895 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1896 octave_idx_type ii = i; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1897 F77_XFCN (cqrinc, CQRINC, (m, n + ii, std::min (kmax, k + ii), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1898 q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1899 r.fortran_vec (), r.rows (), js(ii) + 1, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1900 u.column (jsi(i)).data (), rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1901 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1902 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1903 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1904 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1905 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1906 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1907 qr<FloatComplexMatrix>::delete_col (octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1908 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1909 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1910 octave_idx_type k = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1911 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1912 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1913 if (j < 0 || j > n-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1914 (*current_liboctave_error_handler) ("qrdelete: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1915 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1916 OCTAVE_LOCAL_BUFFER (float, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1917 F77_XFCN (cqrdec, CQRDEC, (m, n, k, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1918 r.fortran_vec (), r.rows (), j + 1, rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1919 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1920 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1921 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1922 q.resize (m, k-1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1923 r.resize (k-1, n-1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1924 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1925 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1926 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1927 r.resize (k, n-1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1928 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1929 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1930 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1931 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1932 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1933 qr<FloatComplexMatrix>::delete_col (const Array<octave_idx_type>& j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1934 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1935 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1936 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1937 octave_idx_type k = q.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1938 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1939 Array<octave_idx_type> jsi; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1940 Array<octave_idx_type> js = j.sort (jsi, 0, DESCENDING); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1941 octave_idx_type nj = js.numel (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1942 bool dups = false; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1943 for (octave_idx_type i = 0; i < nj - 1; i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1944 dups = dups && js(i) == js(i+1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1945 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1946 if (dups) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1947 (*current_liboctave_error_handler) ("qrinsert: duplicate index detected"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1948 if (nj > 0 && (js(0) > n-1 || js(nj-1) < 0)) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1949 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1950 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1951 if (nj > 0) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1952 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1953 OCTAVE_LOCAL_BUFFER (float, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1954 for (volatile octave_idx_type i = 0; i < js.numel (); i++) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1955 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1956 octave_idx_type ii = i; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1957 F77_XFCN (cqrdec, CQRDEC, (m, n - ii, k == m ? k : k - ii, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1958 q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1959 r.fortran_vec (), r.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1960 js(ii) + 1, rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1961 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1962 if (k < m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1963 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1964 q.resize (m, k - nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1965 r.resize (k - nj, n - nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1966 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1967 else |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1968 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1969 r.resize (k, n - nj); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1970 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1971 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1972 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1973 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1974 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1975 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1976 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1977 qr<FloatComplexMatrix>::insert_row (const FloatComplexRowVector& u, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1978 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1979 octave_idx_type m = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1980 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1981 octave_idx_type k = std::min (m, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1982 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1983 if (! q.is_square () || u.numel () != n) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1984 (*current_liboctave_error_handler) ("qrinsert: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1985 if (j < 0 || j > m) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1986 (*current_liboctave_error_handler) ("qrinsert: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1987 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1988 q.resize (m + 1, m + 1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1989 r.resize (m + 1, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1990 FloatComplexRowVector utmp = u; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1991 OCTAVE_LOCAL_BUFFER (float, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1992 F77_XFCN (cqrinr, CQRINR, (m, n, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1993 r.fortran_vec (), r.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1994 j + 1, utmp.fortran_vec (), rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1995 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1996 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1997 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1998 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1999 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2000 qr<FloatComplexMatrix>::delete_row (octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2001 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2002 octave_idx_type m = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2003 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2004 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2005 if (! q.is_square ()) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2006 (*current_liboctave_error_handler) ("qrdelete: dimensions mismatch"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2007 if (j < 0 || j > m-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2008 (*current_liboctave_error_handler) ("qrdelete: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2009 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2010 OCTAVE_LOCAL_BUFFER (FloatComplex, w, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2011 OCTAVE_LOCAL_BUFFER (float, rw, m); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2012 F77_XFCN (cqrder, CQRDER, (m, n, q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2013 r.fortran_vec (), r.rows (), j + 1, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2014 w, rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2015 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2016 q.resize (m - 1, m - 1); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2017 r.resize (m - 1, n); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2018 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2019 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2020 template <> |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2021 void |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2022 qr<FloatComplexMatrix>::shift_cols (octave_idx_type i, octave_idx_type j) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2023 { |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2024 octave_idx_type m = q.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2025 octave_idx_type k = r.rows (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2026 octave_idx_type n = r.columns (); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2027 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2028 if (i < 0 || i > n-1 || j < 0 || j > n-1) |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2029 (*current_liboctave_error_handler) ("qrshift: index out of range"); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2030 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2031 OCTAVE_LOCAL_BUFFER (FloatComplex, w, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2032 OCTAVE_LOCAL_BUFFER (float, rw, k); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2033 F77_XFCN (cqrshc, CQRSHC, (m, n, k, |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2034 q.fortran_vec (), q.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2035 r.fortran_vec (), r.rows (), |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2036 i + 1, j + 1, w, rw)); |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2037 } |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2038 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2039 #endif |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2040 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2041 // Instantiations we need. |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2042 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2043 template class qr<Matrix>; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2044 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2045 template class qr<FloatMatrix>; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2046 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2047 template class qr<ComplexMatrix>; |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2048 |
eb1524b07fe3
better use of templates for qr classes
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
2049 template class qr<FloatComplexMatrix>; |