Mercurial > octave
annotate liboctave/numeric/chol.cc @ 21285:d3b265a83adc
make building without qrupdate work again
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 17 Feb 2016 10:16:36 -0500 |
parents | 230e186e292d |
children | 40de9f8f23a6 |
rev | line source |
---|---|
457 | 1 /* |
2 | |
19697
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
17769
diff
changeset
|
3 Copyright (C) 1994-2015 John W. Eaton |
11523 | 4 Copyright (C) 2008-2009 Jaroslav Hajek |
457 | 5 |
6 This file is part of Octave. | |
7 | |
8 Octave is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
7016 | 10 Free Software Foundation; either version 3 of the License, or (at your |
11 option) any later version. | |
457 | 12 |
13 Octave is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
7016 | 19 along with Octave; see the file COPYING. If not, see |
20 <http://www.gnu.org/licenses/>. | |
457 | 21 |
22 */ | |
23 | |
24 #ifdef HAVE_CONFIG_H | |
21202
f7121e111991
maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents:
21136
diff
changeset
|
25 # include <config.h> |
457 | 26 #endif |
27 | |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
28 #include <vector> |
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
29 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
30 #include "CColVector.h" |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
31 #include "CMatrix.h" |
21270
230e186e292d
make building without qrupdate work again
John W. Eaton <jwe@octave.org>
parents:
21269
diff
changeset
|
32 #include "CRowVector.h" |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
33 #include "chol.h" |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
34 #include "dColVector.h" |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
35 #include "dMatrix.h" |
21270
230e186e292d
make building without qrupdate work again
John W. Eaton <jwe@octave.org>
parents:
21269
diff
changeset
|
36 #include "dRowVector.h" |
1847 | 37 #include "f77-fcn.h" |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
38 #include "fCColVector.h" |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
39 #include "fCMatrix.h" |
21270
230e186e292d
make building without qrupdate work again
John W. Eaton <jwe@octave.org>
parents:
21269
diff
changeset
|
40 #include "fCRowVector.h" |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
41 #include "fColVector.h" |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
42 #include "fMatrix.h" |
21270
230e186e292d
make building without qrupdate work again
John W. Eaton <jwe@octave.org>
parents:
21269
diff
changeset
|
43 #include "fRowVector.h" |
457 | 44 #include "lo-error.h" |
8377
25bc2d31e1bf
improve OCTAVE_LOCAL_BUFFER
Jaroslav Hajek <highegg@gmail.com>
parents:
7725
diff
changeset
|
45 #include "oct-locbuf.h" |
9862
c0aeedd8fb86
improve chol Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
8562
diff
changeset
|
46 #include "oct-norm.h" |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
47 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
48 #if ! defined (HAVE_QRUPDATE) |
21285
d3b265a83adc
make building without qrupdate work again
John W. Eaton <jwe@octave.org>
parents:
21270
diff
changeset
|
49 # include "qr.h" |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
50 #endif |
457 | 51 |
52 extern "C" | |
53 { | |
4552 | 54 F77_RET_T |
11518 | 55 F77_FUNC (dpotrf, DPOTRF) (F77_CONST_CHAR_ARG_DECL, |
56 const octave_idx_type&, double*, | |
57 const octave_idx_type&, octave_idx_type& | |
10314
07ebe522dac2
untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
58 F77_CHAR_ARG_LEN_DECL); |
5340 | 59 |
60 F77_RET_T | |
11518 | 61 F77_FUNC (dpotri, DPOTRI) (F77_CONST_CHAR_ARG_DECL, |
62 const octave_idx_type&, double*, | |
63 const octave_idx_type&, octave_idx_type& | |
10314
07ebe522dac2
untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
64 F77_CHAR_ARG_LEN_DECL); |
6486 | 65 |
66 F77_RET_T | |
11518 | 67 F77_FUNC (dpocon, DPOCON) (F77_CONST_CHAR_ARG_DECL, |
68 const octave_idx_type&, double*, | |
69 const octave_idx_type&, const double&, | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
70 double&, double*, octave_idx_type*, |
11518 | 71 octave_idx_type& |
72 F77_CHAR_ARG_LEN_DECL); | |
8547
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
73 #ifdef HAVE_QRUPDATE |
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
74 |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
75 F77_RET_T |
11495 | 76 F77_FUNC (dch1up, DCH1UP) (const octave_idx_type&, double*, |
77 const octave_idx_type&, double*, double*); | |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
78 |
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
79 F77_RET_T |
11495 | 80 F77_FUNC (dch1dn, DCH1DN) (const octave_idx_type&, double*, |
81 const octave_idx_type&, double*, double*, | |
82 octave_idx_type&); | |
83 | |
84 F77_RET_T | |
85 F77_FUNC (dchinx, DCHINX) (const octave_idx_type&, double*, | |
86 const octave_idx_type&, const octave_idx_type&, | |
8547
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
87 double*, double*, octave_idx_type&); |
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
88 |
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
89 F77_RET_T |
11495 | 90 F77_FUNC (dchdex, DCHDEX) (const octave_idx_type&, double*, |
91 const octave_idx_type&, const octave_idx_type&, | |
92 double*); | |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
93 |
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
94 F77_RET_T |
11495 | 95 F77_FUNC (dchshx, DCHSHX) (const octave_idx_type&, double*, |
96 const octave_idx_type&, const octave_idx_type&, | |
8547
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
97 const octave_idx_type&, double*); |
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
98 #endif |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
99 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
100 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
101 F77_FUNC (spotrf, SPOTRF) (F77_CONST_CHAR_ARG_DECL, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
102 const octave_idx_type&, float*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
103 const octave_idx_type&, octave_idx_type& |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
104 F77_CHAR_ARG_LEN_DECL); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
105 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
106 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
107 F77_FUNC (spotri, SPOTRI) (F77_CONST_CHAR_ARG_DECL, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
108 const octave_idx_type&, float*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
109 const octave_idx_type&, octave_idx_type& |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
110 F77_CHAR_ARG_LEN_DECL); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
111 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
112 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
113 F77_FUNC (spocon, SPOCON) (F77_CONST_CHAR_ARG_DECL, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
114 const octave_idx_type&, float*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
115 const octave_idx_type&, const float&, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
116 float&, float*, octave_idx_type*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
117 octave_idx_type& |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
118 F77_CHAR_ARG_LEN_DECL); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
119 #ifdef HAVE_QRUPDATE |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
120 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
121 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
122 F77_FUNC (sch1up, SCH1UP) (const octave_idx_type&, float*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
123 const octave_idx_type&, float*, float*); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
124 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
125 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
126 F77_FUNC (sch1dn, SCH1DN) (const octave_idx_type&, float*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
127 const octave_idx_type&, float*, float*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
128 octave_idx_type&); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
129 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
130 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
131 F77_FUNC (schinx, SCHINX) (const octave_idx_type&, float*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
132 const octave_idx_type&, const octave_idx_type&, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
133 float*, float*, octave_idx_type&); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
134 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
135 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
136 F77_FUNC (schdex, SCHDEX) (const octave_idx_type&, float*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
137 const octave_idx_type&, const octave_idx_type&, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
138 float*); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
139 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
140 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
141 F77_FUNC (schshx, SCHSHX) (const octave_idx_type&, float*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
142 const octave_idx_type&, const octave_idx_type&, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
143 const octave_idx_type&, float*); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
144 #endif |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
145 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
146 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
147 F77_FUNC (zpotrf, ZPOTRF) (F77_CONST_CHAR_ARG_DECL, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
148 const octave_idx_type&, Complex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
149 const octave_idx_type&, octave_idx_type& |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
150 F77_CHAR_ARG_LEN_DECL); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
151 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
152 F77_FUNC (zpotri, ZPOTRI) (F77_CONST_CHAR_ARG_DECL, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
153 const octave_idx_type&, Complex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
154 const octave_idx_type&, octave_idx_type& |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
155 F77_CHAR_ARG_LEN_DECL); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
156 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
157 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
158 F77_FUNC (zpocon, ZPOCON) (F77_CONST_CHAR_ARG_DECL, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
159 const octave_idx_type&, Complex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
160 const octave_idx_type&, const double&, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
161 double&, Complex*, double*, octave_idx_type& |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
162 F77_CHAR_ARG_LEN_DECL); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
163 #ifdef HAVE_QRUPDATE |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
164 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
165 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
166 F77_FUNC (zch1up, ZCH1UP) (const octave_idx_type&, Complex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
167 const octave_idx_type&, Complex*, double*); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
168 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
169 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
170 F77_FUNC (zch1dn, ZCH1DN) (const octave_idx_type&, Complex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
171 const octave_idx_type&, Complex*, double*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
172 octave_idx_type&); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
173 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
174 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
175 F77_FUNC (zchinx, ZCHINX) (const octave_idx_type&, Complex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
176 const octave_idx_type&, const octave_idx_type&, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
177 Complex*, double*, octave_idx_type&); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
178 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
179 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
180 F77_FUNC (zchdex, ZCHDEX) (const octave_idx_type&, Complex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
181 const octave_idx_type&, const octave_idx_type&, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
182 double*); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
183 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
184 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
185 F77_FUNC (zchshx, ZCHSHX) (const octave_idx_type&, Complex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
186 const octave_idx_type&, const octave_idx_type&, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
187 const octave_idx_type&, Complex*, double*); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
188 #endif |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
189 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
190 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
191 F77_FUNC (cpotrf, CPOTRF) (F77_CONST_CHAR_ARG_DECL, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
192 const octave_idx_type&, FloatComplex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
193 const octave_idx_type&, octave_idx_type& |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
194 F77_CHAR_ARG_LEN_DECL); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
195 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
196 F77_FUNC (cpotri, CPOTRI) (F77_CONST_CHAR_ARG_DECL, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
197 const octave_idx_type&, FloatComplex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
198 const octave_idx_type&, octave_idx_type& |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
199 F77_CHAR_ARG_LEN_DECL); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
200 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
201 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
202 F77_FUNC (cpocon, CPOCON) (F77_CONST_CHAR_ARG_DECL, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
203 const octave_idx_type&, FloatComplex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
204 const octave_idx_type&, const float&, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
205 float&, FloatComplex*, float*, octave_idx_type& |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
206 F77_CHAR_ARG_LEN_DECL); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
207 #ifdef HAVE_QRUPDATE |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
208 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
209 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
210 F77_FUNC (cch1up, CCH1UP) (const octave_idx_type&, FloatComplex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
211 const octave_idx_type&, FloatComplex*, float*); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
212 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
213 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
214 F77_FUNC (cch1dn, CCH1DN) (const octave_idx_type&, FloatComplex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
215 const octave_idx_type&, FloatComplex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
216 float*, octave_idx_type&); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
217 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
218 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
219 F77_FUNC (cchinx, CCHINX) (const octave_idx_type&, FloatComplex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
220 const octave_idx_type&, const octave_idx_type&, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
221 FloatComplex*, float*, octave_idx_type&); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
222 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
223 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
224 F77_FUNC (cchdex, CCHDEX) (const octave_idx_type&, FloatComplex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
225 const octave_idx_type&, const octave_idx_type&, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
226 float*); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
227 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
228 F77_RET_T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
229 F77_FUNC (cchshx, CCHSHX) (const octave_idx_type&, FloatComplex*, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
230 const octave_idx_type&, const octave_idx_type&, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
231 const octave_idx_type&, FloatComplex*, float*); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
232 #endif |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
233 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
234 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
235 static Matrix |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
236 chol2inv_internal (const Matrix& r, bool is_upper = true) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
237 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
238 Matrix retval; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
239 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
240 octave_idx_type r_nr = r.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
241 octave_idx_type r_nc = r.cols (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
242 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
243 if (r_nr != r_nc) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
244 (*current_liboctave_error_handler) ("chol2inv requires square matrix"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
245 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
246 octave_idx_type n = r_nc; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
247 octave_idx_type info = 0; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
248 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
249 Matrix tmp = r; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
250 double *v = tmp.fortran_vec (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
251 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
252 if (info == 0) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
253 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
254 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
255 F77_XFCN (dpotri, DPOTRI, (F77_CONST_CHAR_ARG2 ("U", 1), n, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
256 v, n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
257 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
258 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
259 F77_XFCN (dpotri, DPOTRI, (F77_CONST_CHAR_ARG2 ("L", 1), n, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
260 v, n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
261 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
262 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
263 // If someone thinks of a more graceful way of doing this (or |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
264 // faster for that matter :-)), please let me know! |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
265 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
266 if (n > 1) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
267 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
268 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
269 for (octave_idx_type j = 0; j < r_nc; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
270 for (octave_idx_type i = j+1; i < r_nr; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
271 tmp.xelem (i, j) = tmp.xelem (j, i); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
272 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
273 for (octave_idx_type j = 0; j < r_nc; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
274 for (octave_idx_type i = j+1; i < r_nr; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
275 tmp.xelem (j, i) = tmp.xelem (i, j); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
276 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
277 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
278 retval = tmp; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
279 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
280 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
281 return retval; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
282 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
283 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
284 static FloatMatrix |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
285 chol2inv_internal (const FloatMatrix& r, bool is_upper = true) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
286 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
287 FloatMatrix retval; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
288 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
289 octave_idx_type r_nr = r.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
290 octave_idx_type r_nc = r.cols (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
291 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
292 if (r_nr != r_nc) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
293 (*current_liboctave_error_handler) ("chol2inv requires square matrix"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
294 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
295 octave_idx_type n = r_nc; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
296 octave_idx_type info = 0; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
297 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
298 FloatMatrix tmp = r; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
299 float *v = tmp.fortran_vec (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
300 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
301 if (info == 0) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
302 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
303 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
304 F77_XFCN (spotri, SPOTRI, (F77_CONST_CHAR_ARG2 ("U", 1), n, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
305 v, n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
306 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
307 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
308 F77_XFCN (spotri, SPOTRI, (F77_CONST_CHAR_ARG2 ("L", 1), n, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
309 v, n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
310 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
311 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
312 // If someone thinks of a more graceful way of doing this (or |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
313 // faster for that matter :-)), please let me know! |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
314 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
315 if (n > 1) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
316 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
317 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
318 for (octave_idx_type j = 0; j < r_nc; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
319 for (octave_idx_type i = j+1; i < r_nr; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
320 tmp.xelem (i, j) = tmp.xelem (j, i); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
321 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
322 for (octave_idx_type j = 0; j < r_nc; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
323 for (octave_idx_type i = j+1; i < r_nr; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
324 tmp.xelem (j, i) = tmp.xelem (i, j); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
325 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
326 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
327 retval = tmp; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
328 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
329 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
330 return retval; |
457 | 331 } |
332 | |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
333 static ComplexMatrix |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
334 chol2inv_internal (const ComplexMatrix& r, bool is_upper = true) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
335 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
336 ComplexMatrix retval; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
337 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
338 octave_idx_type r_nr = r.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
339 octave_idx_type r_nc = r.cols (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
340 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
341 if (r_nr != r_nc) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
342 (*current_liboctave_error_handler) ("chol2inv requires square matrix"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
343 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
344 octave_idx_type n = r_nc; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
345 octave_idx_type info; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
346 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
347 ComplexMatrix tmp = r; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
348 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
349 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
350 F77_XFCN (zpotri, ZPOTRI, (F77_CONST_CHAR_ARG2 ("U", 1), n, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
351 tmp.fortran_vec (), n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
352 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
353 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
354 F77_XFCN (zpotri, ZPOTRI, (F77_CONST_CHAR_ARG2 ("L", 1), n, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
355 tmp.fortran_vec (), n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
356 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
357 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
358 // If someone thinks of a more graceful way of doing this (or |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
359 // faster for that matter :-)), please let me know! |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
360 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
361 if (n > 1) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
362 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
363 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
364 for (octave_idx_type j = 0; j < r_nc; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
365 for (octave_idx_type i = j+1; i < r_nr; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
366 tmp.xelem (i, j) = tmp.xelem (j, i); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
367 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
368 for (octave_idx_type j = 0; j < r_nc; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
369 for (octave_idx_type i = j+1; i < r_nr; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
370 tmp.xelem (j, i) = tmp.xelem (i, j); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
371 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
372 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
373 retval = tmp; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
374 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
375 return retval; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
376 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
377 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
378 static FloatComplexMatrix |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
379 chol2inv_internal (const FloatComplexMatrix& r, bool is_upper = true) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
380 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
381 FloatComplexMatrix retval; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
382 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
383 octave_idx_type r_nr = r.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
384 octave_idx_type r_nc = r.cols (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
385 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
386 if (r_nr != r_nc) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
387 (*current_liboctave_error_handler) ("chol2inv requires square matrix"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
388 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
389 octave_idx_type n = r_nc; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
390 octave_idx_type info; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
391 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
392 FloatComplexMatrix tmp = r; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
393 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
394 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
395 F77_XFCN (cpotri, CPOTRI, (F77_CONST_CHAR_ARG2 ("U", 1), n, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
396 tmp.fortran_vec (), n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
397 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
398 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
399 F77_XFCN (cpotri, CPOTRI, (F77_CONST_CHAR_ARG2 ("L", 1), n, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
400 tmp.fortran_vec (), n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
401 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
402 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
403 // If someone thinks of a more graceful way of doing this (or |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
404 // faster for that matter :-)), please let me know! |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
405 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
406 if (n > 1) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
407 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
408 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
409 for (octave_idx_type j = 0; j < r_nc; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
410 for (octave_idx_type i = j+1; i < r_nr; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
411 tmp.xelem (i, j) = tmp.xelem (j, i); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
412 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
413 for (octave_idx_type j = 0; j < r_nc; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
414 for (octave_idx_type i = j+1; i < r_nr; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
415 tmp.xelem (j, i) = tmp.xelem (i, j); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
416 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
417 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
418 retval = tmp; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
419 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
420 return retval; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
421 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
422 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
423 template <typename T> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
424 T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
425 chol2inv (const T& r) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
426 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
427 return chol2inv_internal (r); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
428 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
429 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
430 // Compute the inverse of a matrix using the Cholesky factorization. |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
431 template <typename T> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
432 T |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
433 chol<T>::inverse (void) const |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
434 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
435 return chol2inv_internal (chol_mat, is_upper); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
436 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
437 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
438 template <typename T> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
439 void |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
440 chol<T>::set (const T& R) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
441 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
442 if (! R.is_square ()) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
443 (*current_liboctave_error_handler) ("chol: requires square matrix"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
444 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
445 chol_mat = R; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
446 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
447 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
448 #if ! defined (HAVE_QRUPDATE) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
449 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
450 template <typename T> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
451 void |
21270
230e186e292d
make building without qrupdate work again
John W. Eaton <jwe@octave.org>
parents:
21269
diff
changeset
|
452 chol<T>::update (const VT& u) |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
453 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
454 warn_qrupdate_once (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
455 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
456 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
457 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
458 if (u.numel () != n) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
459 (*current_liboctave_error_handler) ("cholupdate: dimension mismatch"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
460 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
461 init (chol_mat.hermitian () * chol_mat + T (u) * T (u).hermitian (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
462 true, false); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
463 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
464 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
465 template <typename T> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
466 static bool |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
467 singular (const T& a) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
468 { |
21270
230e186e292d
make building without qrupdate work again
John W. Eaton <jwe@octave.org>
parents:
21269
diff
changeset
|
469 static typename T::element_type zero (0); |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
470 for (octave_idx_type i = 0; i < a.rows (); i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
471 if (a(i,i) == zero) return true; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
472 return false; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
473 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
474 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
475 template <typename T> |
5275 | 476 octave_idx_type |
21270
230e186e292d
make building without qrupdate work again
John W. Eaton <jwe@octave.org>
parents:
21269
diff
changeset
|
477 chol<T>::downdate (const VT& u) |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
478 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
479 warn_qrupdate_once (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
480 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
481 octave_idx_type info = -1; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
482 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
483 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
484 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
485 if (u.numel () != n) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
486 (*current_liboctave_error_handler) ("cholupdate: dimension mismatch"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
487 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
488 if (singular (chol_mat)) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
489 info = 2; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
490 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
491 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
492 info = init (chol_mat.hermitian () * chol_mat |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
493 - T (u) * T (u).hermitian (), true, false); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
494 if (info) info = 1; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
495 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
496 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
497 return info; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
498 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
499 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
500 template <typename T> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
501 octave_idx_type |
21270
230e186e292d
make building without qrupdate work again
John W. Eaton <jwe@octave.org>
parents:
21269
diff
changeset
|
502 chol<T>::insert_sym (const VT& u, octave_idx_type j) |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
503 { |
21270
230e186e292d
make building without qrupdate work again
John W. Eaton <jwe@octave.org>
parents:
21269
diff
changeset
|
504 static typename T::element_type zero (0); |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
505 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
506 warn_qrupdate_once (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
507 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
508 octave_idx_type info = -1; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
509 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
510 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
511 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
512 if (u.numel () != n + 1) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
513 (*current_liboctave_error_handler) ("cholinsert: dimension mismatch"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
514 if (j < 0 || j > n) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
515 (*current_liboctave_error_handler) ("cholinsert: index out of range"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
516 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
517 if (singular (chol_mat)) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
518 info = 2; |
21270
230e186e292d
make building without qrupdate work again
John W. Eaton <jwe@octave.org>
parents:
21269
diff
changeset
|
519 else if (imag (u(j)) != zero) |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
520 info = 3; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
521 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
522 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
523 T a = chol_mat.hermitian () * chol_mat; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
524 T a1 (n+1, n+1); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
525 for (octave_idx_type k = 0; k < n+1; k++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
526 for (octave_idx_type l = 0; l < n+1; l++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
527 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
528 if (l == j) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
529 a1(k, l) = u(k); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
530 else if (k == j) |
21270
230e186e292d
make building without qrupdate work again
John W. Eaton <jwe@octave.org>
parents:
21269
diff
changeset
|
531 a1(k, l) = conj (u(l)); |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
532 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
533 a1(k, l) = a(k < j ? k : k-1, l < j ? l : l-1); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
534 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
535 info = init (a1, true, false); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
536 if (info) info = 1; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
537 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
538 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
539 return info; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
540 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
541 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
542 template <typename T> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
543 void |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
544 chol<T>::delete_sym (octave_idx_type j) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
545 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
546 warn_qrupdate_once (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
547 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
548 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
549 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
550 if (j < 0 || j > n-1) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
551 (*current_liboctave_error_handler) ("choldelete: index out of range"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
552 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
553 T a = chol_mat.hermitian () * chol_mat; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
554 a.delete_elements (1, idx_vector (j)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
555 a.delete_elements (0, idx_vector (j)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
556 init (a, true, false); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
557 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
558 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
559 template <typename T> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
560 void |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
561 chol<T>::shift_sym (octave_idx_type i, octave_idx_type j) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
562 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
563 warn_qrupdate_once (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
564 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
565 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
566 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
567 if (i < 0 || i > n-1 || j < 0 || j > n-1) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
568 (*current_liboctave_error_handler) ("cholshift: index out of range"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
569 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
570 T a = chol_mat.hermitian () * chol_mat; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
571 Array<octave_idx_type> p (dim_vector (n, 1)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
572 for (octave_idx_type k = 0; k < n; k++) p(k) = k; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
573 if (i < j) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
574 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
575 for (octave_idx_type k = i; k < j; k++) p(k) = k+1; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
576 p(j) = i; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
577 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
578 else if (j < i) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
579 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
580 p(j) = i; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
581 for (octave_idx_type k = j+1; k < i+1; k++) p(k) = k-1; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
582 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
583 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
584 init (a.index (idx_vector (p), idx_vector (p)), true, false); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
585 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
586 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
587 #endif |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
588 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
589 // Specializations. |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
590 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
591 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
592 octave_idx_type |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
593 chol<Matrix>::init (const Matrix& a, bool upper, bool calc_cond) |
457 | 594 { |
5275 | 595 octave_idx_type a_nr = a.rows (); |
596 octave_idx_type a_nc = a.cols (); | |
1944 | 597 |
457 | 598 if (a_nr != a_nc) |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
599 (*current_liboctave_error_handler) ("chol: requires square matrix"); |
457 | 600 |
5275 | 601 octave_idx_type n = a_nc; |
602 octave_idx_type info; | |
457 | 603 |
20462
5ce959c55cc0
Propagate 'lower' in chol(a, 'lower') to underlying library function.
PrasannaKumar Muralidharan <prasannatsmkumar@gmail.com>
parents:
20232
diff
changeset
|
604 is_upper = upper; |
5ce959c55cc0
Propagate 'lower' in chol(a, 'lower') to underlying library function.
PrasannaKumar Muralidharan <prasannatsmkumar@gmail.com>
parents:
20232
diff
changeset
|
605 |
9862
c0aeedd8fb86
improve chol Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
8562
diff
changeset
|
606 chol_mat.clear (n, n); |
20462
5ce959c55cc0
Propagate 'lower' in chol(a, 'lower') to underlying library function.
PrasannaKumar Muralidharan <prasannatsmkumar@gmail.com>
parents:
20232
diff
changeset
|
607 if (is_upper) |
20628
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
608 for (octave_idx_type j = 0; j < n; j++) |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
609 { |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
610 for (octave_idx_type i = 0; i <= j; i++) |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
611 chol_mat.xelem (i, j) = a(i, j); |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
612 for (octave_idx_type i = j+1; i < n; i++) |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
613 chol_mat.xelem (i, j) = 0.0; |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
614 } |
20462
5ce959c55cc0
Propagate 'lower' in chol(a, 'lower') to underlying library function.
PrasannaKumar Muralidharan <prasannatsmkumar@gmail.com>
parents:
20232
diff
changeset
|
615 else |
20628
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
616 for (octave_idx_type j = 0; j < n; j++) |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
617 { |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
618 for (octave_idx_type i = 0; i < j; i++) |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
619 chol_mat.xelem (i, j) = 0.0; |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
620 for (octave_idx_type i = j; i < n; i++) |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
621 chol_mat.xelem (i, j) = a(i, j); |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
622 } |
1944 | 623 double *h = chol_mat.fortran_vec (); |
457 | 624 |
6486 | 625 // Calculate the norm of the matrix, for later use. |
626 double anorm = 0; | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
627 if (calc_cond) |
9862
c0aeedd8fb86
improve chol Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
8562
diff
changeset
|
628 anorm = xnorm (a, 1); |
6486 | 629 |
20462
5ce959c55cc0
Propagate 'lower' in chol(a, 'lower') to underlying library function.
PrasannaKumar Muralidharan <prasannatsmkumar@gmail.com>
parents:
20232
diff
changeset
|
630 if (is_upper) |
20628
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
631 F77_XFCN (dpotrf, DPOTRF, (F77_CONST_CHAR_ARG2 ("U", 1), n, h, n, info |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
632 F77_CHAR_ARG_LEN (1))); |
20462
5ce959c55cc0
Propagate 'lower' in chol(a, 'lower') to underlying library function.
PrasannaKumar Muralidharan <prasannatsmkumar@gmail.com>
parents:
20232
diff
changeset
|
633 else |
20628
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
634 F77_XFCN (dpotrf, DPOTRF, (F77_CONST_CHAR_ARG2 ("L", 1), n, h, n, info |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
635 F77_CHAR_ARG_LEN (1))); |
457 | 636 |
7482
29980c6b8604
don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
637 xrcond = 0.0; |
9862
c0aeedd8fb86
improve chol Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
8562
diff
changeset
|
638 if (info > 0) |
c0aeedd8fb86
improve chol Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
8562
diff
changeset
|
639 chol_mat.resize (info - 1, info - 1); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
640 else if (calc_cond) |
7482
29980c6b8604
don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
641 { |
29980c6b8604
don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
642 octave_idx_type dpocon_info = 0; |
29980c6b8604
don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
643 |
29980c6b8604
don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
644 // Now calculate the condition number for non-singular matrix. |
11570
57632dea2446
attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
645 Array<double> z (dim_vector (3*n, 1)); |
7482
29980c6b8604
don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
646 double *pz = z.fortran_vec (); |
11570
57632dea2446
attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
647 Array<octave_idx_type> iz (dim_vector (n, 1)); |
7482
29980c6b8604
don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
648 octave_idx_type *piz = iz.fortran_vec (); |
20462
5ce959c55cc0
Propagate 'lower' in chol(a, 'lower') to underlying library function.
PrasannaKumar Muralidharan <prasannatsmkumar@gmail.com>
parents:
20232
diff
changeset
|
649 if (is_upper) |
20628
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
650 F77_XFCN (dpocon, DPOCON, (F77_CONST_CHAR_ARG2 ("U", 1), n, h, |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
651 n, anorm, xrcond, pz, piz, dpocon_info |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
652 F77_CHAR_ARG_LEN (1))); |
20462
5ce959c55cc0
Propagate 'lower' in chol(a, 'lower') to underlying library function.
PrasannaKumar Muralidharan <prasannatsmkumar@gmail.com>
parents:
20232
diff
changeset
|
653 else |
20628
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
654 F77_XFCN (dpocon, DPOCON, (F77_CONST_CHAR_ARG2 ("L", 1), n, h, |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
655 n, anorm, xrcond, pz, piz, dpocon_info |
48fedd8fbff7
maint: Apply Octave coding style to Cholesky classes
Mike Miller <mtmiller@octave.org>
parents:
20531
diff
changeset
|
656 F77_CHAR_ARG_LEN (1))); |
7482
29980c6b8604
don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
657 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
658 if (dpocon_info != 0) |
10314
07ebe522dac2
untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
659 info = -1; |
7482
29980c6b8604
don't check f77_exception_encountered
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
660 } |
457 | 661 |
662 return info; | |
663 } | |
664 | |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
665 #if defined (HAVE_QRUPDATE) |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
666 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
667 template <> |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
668 void |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
669 chol<Matrix>::update (const ColumnVector& u) |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
670 { |
7559
07522d7dcdf8
fixes to QR and Cholesky updating code
Jaroslav Hajek <highegg@gmail.com>
parents:
7554
diff
changeset
|
671 octave_idx_type n = chol_mat.rows (); |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
672 |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
673 if (u.numel () != n) |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
674 (*current_liboctave_error_handler) ("cholupdate: dimension mismatch"); |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
675 |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
676 ColumnVector utmp = u; |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
677 |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
678 OCTAVE_LOCAL_BUFFER (double, w, n); |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
679 |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
680 F77_XFCN (dch1up, DCH1UP, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
681 utmp.fortran_vec (), w)); |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
682 } |
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
683 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
684 template <> |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
685 octave_idx_type |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
686 chol<Matrix>::downdate (const ColumnVector& u) |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
687 { |
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
688 octave_idx_type info = -1; |
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
689 |
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
690 octave_idx_type n = chol_mat.rows (); |
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
691 |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
692 if (u.numel () != n) |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
693 (*current_liboctave_error_handler) ("cholupdate: dimension mismatch"); |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
694 |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
695 ColumnVector utmp = u; |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
696 |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
697 OCTAVE_LOCAL_BUFFER (double, w, n); |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
698 |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
699 F77_XFCN (dch1dn, DCH1DN, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
700 utmp.fortran_vec (), w, info)); |
7554
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
701 |
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
702 return info; |
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
703 } |
40574114c514
implement Cholesky factorization updating
Jaroslav Hajek <highegg@gmail.com>
parents:
7482
diff
changeset
|
704 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
705 template <> |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
706 octave_idx_type |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
707 chol<Matrix>::insert_sym (const ColumnVector& u, octave_idx_type j) |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
708 { |
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
709 octave_idx_type info = -1; |
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
710 |
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
711 octave_idx_type n = chol_mat.rows (); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
712 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
19697
diff
changeset
|
713 if (u.numel () != n + 1) |
8547
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
714 (*current_liboctave_error_handler) ("cholinsert: dimension mismatch"); |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
715 if (j < 0 || j > n) |
8547
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
716 (*current_liboctave_error_handler) ("cholinsert: index out of range"); |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
717 |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
718 ColumnVector utmp = u; |
8547
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
719 |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
720 OCTAVE_LOCAL_BUFFER (double, w, n); |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
721 |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
722 chol_mat.resize (n+1, n+1); |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
723 |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
724 F77_XFCN (dchinx, DCHINX, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
725 j + 1, utmp.fortran_vec (), w, info)); |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
726 |
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
727 return info; |
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
728 } |
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
729 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
730 template <> |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
731 void |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
732 chol<Matrix>::delete_sym (octave_idx_type j) |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
733 { |
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
734 octave_idx_type n = chol_mat.rows (); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
735 |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
736 if (j < 0 || j > n-1) |
8547
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
737 (*current_liboctave_error_handler) ("choldelete: index out of range"); |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
738 |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
739 OCTAVE_LOCAL_BUFFER (double, w, n); |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
740 |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
741 F77_XFCN (dchdex, DCHDEX, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
742 j + 1, w)); |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
743 |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
744 chol_mat.resize (n-1, n-1); |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
745 } |
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
746 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
747 template <> |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
748 void |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
749 chol<Matrix>::shift_sym (octave_idx_type i, octave_idx_type j) |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
750 { |
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
751 octave_idx_type n = chol_mat.rows (); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
752 |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
753 if (i < 0 || i > n-1 || j < 0 || j > n-1) |
8547
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
754 (*current_liboctave_error_handler) ("cholshift: index out of range"); |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
755 |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
756 OCTAVE_LOCAL_BUFFER (double, w, 2*n); |
8547
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
757 |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
758 F77_XFCN (dchshx, DCHSHX, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
759 i + 1, j + 1, w)); |
7700
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
760 } |
efccca5f2ad7
more QR & Cholesky updating functions
Jaroslav Hajek <highegg@gmail.com>
parents:
7559
diff
changeset
|
761 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
762 #endif |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
763 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
764 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
765 octave_idx_type |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
766 chol<FloatMatrix>::init (const FloatMatrix& a, bool upper, bool calc_cond) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
767 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
768 octave_idx_type a_nr = a.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
769 octave_idx_type a_nc = a.cols (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
770 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
771 if (a_nr != a_nc) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
772 (*current_liboctave_error_handler) ("chol: requires square matrix"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
773 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
774 octave_idx_type n = a_nc; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
775 octave_idx_type info; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
776 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
777 is_upper = upper; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
778 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
779 chol_mat.clear (n, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
780 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
781 for (octave_idx_type j = 0; j < n; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
782 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
783 for (octave_idx_type i = 0; i <= j; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
784 chol_mat.xelem (i, j) = a(i, j); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
785 for (octave_idx_type i = j+1; i < n; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
786 chol_mat.xelem (i, j) = 0.0f; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
787 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
788 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
789 for (octave_idx_type j = 0; j < n; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
790 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
791 for (octave_idx_type i = 0; i < j; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
792 chol_mat.xelem (i, j) = 0.0f; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
793 for (octave_idx_type i = j; i < n; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
794 chol_mat.xelem (i, j) = a(i, j); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
795 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
796 float *h = chol_mat.fortran_vec (); |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
797 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
798 // Calculate the norm of the matrix, for later use. |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
799 float anorm = 0; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
800 if (calc_cond) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
801 anorm = xnorm (a, 1); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
802 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
803 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
804 F77_XFCN (spotrf, SPOTRF, (F77_CONST_CHAR_ARG2 ("U", 1), n, h, n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
805 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
806 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
807 F77_XFCN (spotrf, SPOTRF, (F77_CONST_CHAR_ARG2 ("L", 1), n, h, n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
808 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
809 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
810 xrcond = 0.0; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
811 if (info > 0) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
812 chol_mat.resize (info - 1, info - 1); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
813 else if (calc_cond) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
814 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
815 octave_idx_type spocon_info = 0; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
816 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
817 // Now calculate the condition number for non-singular matrix. |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
818 Array<float> z (dim_vector (3*n, 1)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
819 float *pz = z.fortran_vec (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
820 Array<octave_idx_type> iz (dim_vector (n, 1)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
821 octave_idx_type *piz = iz.fortran_vec (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
822 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
823 F77_XFCN (spocon, SPOCON, (F77_CONST_CHAR_ARG2 ("U", 1), n, h, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
824 n, anorm, xrcond, pz, piz, spocon_info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
825 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
826 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
827 F77_XFCN (spocon, SPOCON, (F77_CONST_CHAR_ARG2 ("L", 1), n, h, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
828 n, anorm, xrcond, pz, piz, spocon_info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
829 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
830 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
831 if (spocon_info != 0) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
832 info = -1; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
833 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
834 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
835 return info; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
836 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
837 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
838 #ifdef HAVE_QRUPDATE |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
839 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
840 template <> |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
841 void |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
842 chol<FloatMatrix>::update (const FloatColumnVector& u) |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
843 { |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
844 octave_idx_type n = chol_mat.rows (); |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
845 |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
846 if (u.numel () != n) |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
847 (*current_liboctave_error_handler) ("cholupdate: dimension mismatch"); |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
848 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
849 FloatColumnVector utmp = u; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
850 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
851 OCTAVE_LOCAL_BUFFER (float, w, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
852 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
853 F77_XFCN (sch1up, SCH1UP, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
854 utmp.fortran_vec (), w)); |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
855 } |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
856 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
857 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
858 octave_idx_type |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
859 chol<FloatMatrix>::downdate (const FloatColumnVector& u) |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
860 { |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
861 octave_idx_type info = -1; |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
862 |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
863 octave_idx_type n = chol_mat.rows (); |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
864 |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
865 if (u.numel () != n) |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
866 (*current_liboctave_error_handler) ("cholupdate: dimension mismatch"); |
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
867 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
868 FloatColumnVector utmp = u; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
869 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
870 OCTAVE_LOCAL_BUFFER (float, w, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
871 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
872 F77_XFCN (sch1dn, SCH1DN, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
873 utmp.fortran_vec (), w, info)); |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
874 |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
875 return info; |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
876 } |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
877 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
878 template <> |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
879 octave_idx_type |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
880 chol<FloatMatrix>::insert_sym (const FloatColumnVector& u, octave_idx_type j) |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
881 { |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
882 octave_idx_type info = -1; |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
883 |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
884 octave_idx_type n = chol_mat.rows (); |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
885 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
19697
diff
changeset
|
886 if (u.numel () != n + 1) |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
887 (*current_liboctave_error_handler) ("cholinsert: dimension mismatch"); |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
888 if (j < 0 || j > n) |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
889 (*current_liboctave_error_handler) ("cholinsert: index out of range"); |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
890 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
891 FloatColumnVector utmp = u; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
892 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
893 OCTAVE_LOCAL_BUFFER (float, w, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
894 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
895 chol_mat.resize (n+1, n+1); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
896 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
897 F77_XFCN (schinx, SCHINX, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
898 j + 1, utmp.fortran_vec (), w, info)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
899 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
900 return info; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
901 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
902 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
903 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
904 void |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
905 chol<FloatMatrix>::delete_sym (octave_idx_type j) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
906 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
907 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
908 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
909 if (j < 0 || j > n-1) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
910 (*current_liboctave_error_handler) ("choldelete: index out of range"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
911 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
912 OCTAVE_LOCAL_BUFFER (float, w, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
913 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
914 F77_XFCN (schdex, SCHDEX, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
915 j + 1, w)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
916 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
917 chol_mat.resize (n-1, n-1); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
918 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
919 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
920 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
921 void |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
922 chol<FloatMatrix>::shift_sym (octave_idx_type i, octave_idx_type j) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
923 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
924 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
925 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
926 if (i < 0 || i > n-1 || j < 0 || j > n-1) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
927 (*current_liboctave_error_handler) ("cholshift: index out of range"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
928 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
929 OCTAVE_LOCAL_BUFFER (float, w, 2*n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
930 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
931 F77_XFCN (schshx, SCHSHX, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
932 i + 1, j + 1, w)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
933 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
934 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
935 #endif |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
936 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
937 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
938 octave_idx_type |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
939 chol<ComplexMatrix>::init (const ComplexMatrix& a, bool upper, bool calc_cond) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
940 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
941 octave_idx_type a_nr = a.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
942 octave_idx_type a_nc = a.cols (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
943 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
944 if (a_nr != a_nc) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
945 (*current_liboctave_error_handler) ("chol: requires square matrix"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
946 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
947 octave_idx_type n = a_nc; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
948 octave_idx_type info; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
949 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
950 is_upper = upper; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
951 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
952 chol_mat.clear (n, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
953 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
954 for (octave_idx_type j = 0; j < n; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
955 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
956 for (octave_idx_type i = 0; i <= j; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
957 chol_mat.xelem (i, j) = a(i, j); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
958 for (octave_idx_type i = j+1; i < n; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
959 chol_mat.xelem (i, j) = 0.0; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
960 } |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
961 else |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
962 for (octave_idx_type j = 0; j < n; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
963 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
964 for (octave_idx_type i = 0; i < j; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
965 chol_mat.xelem (i, j) = 0.0; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
966 for (octave_idx_type i = j; i < n; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
967 chol_mat.xelem (i, j) = a(i, j); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
968 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
969 Complex *h = chol_mat.fortran_vec (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
970 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
971 // Calculate the norm of the matrix, for later use. |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
972 double anorm = 0; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
973 if (calc_cond) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
974 anorm = xnorm (a, 1); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
975 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
976 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
977 F77_XFCN (zpotrf, ZPOTRF, (F77_CONST_CHAR_ARG2 ("U", 1), n, h, n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
978 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
979 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
980 F77_XFCN (zpotrf, ZPOTRF, (F77_CONST_CHAR_ARG2 ("L", 1), n, h, n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
981 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
982 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
983 xrcond = 0.0; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
984 if (info > 0) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
985 chol_mat.resize (info - 1, info - 1); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
986 else if (calc_cond) |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
987 { |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
988 octave_idx_type zpocon_info = 0; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
989 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
990 // Now calculate the condition number for non-singular matrix. |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
991 Array<Complex> z (dim_vector (2*n, 1)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
992 Complex *pz = z.fortran_vec (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
993 Array<double> rz (dim_vector (n, 1)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
994 double *prz = rz.fortran_vec (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
995 F77_XFCN (zpocon, ZPOCON, (F77_CONST_CHAR_ARG2 ("U", 1), n, h, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
996 n, anorm, xrcond, pz, prz, zpocon_info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
997 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
998 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
999 if (zpocon_info != 0) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1000 info = -1; |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1001 } |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1002 |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1003 return info; |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1004 } |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1005 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1006 #ifdef HAVE_QRUPDATE |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1007 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1008 template <> |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1009 void |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1010 chol<ComplexMatrix>::update (const ComplexColumnVector& u) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1011 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1012 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1013 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1014 if (u.numel () != n) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1015 (*current_liboctave_error_handler) ("cholupdate: dimension mismatch"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1016 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1017 ComplexColumnVector utmp = u; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1018 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1019 OCTAVE_LOCAL_BUFFER (double, rw, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1020 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1021 F77_XFCN (zch1up, ZCH1UP, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1022 utmp.fortran_vec (), rw)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1023 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1024 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1025 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1026 octave_idx_type |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1027 chol<ComplexMatrix>::downdate (const ComplexColumnVector& u) |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1028 { |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1029 octave_idx_type info = -1; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1030 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1031 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1032 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1033 if (u.numel () != n) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1034 (*current_liboctave_error_handler) ("cholupdate: dimension mismatch"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1035 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1036 ComplexColumnVector utmp = u; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1037 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1038 OCTAVE_LOCAL_BUFFER (double, rw, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1039 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1040 F77_XFCN (zch1dn, ZCH1DN, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1041 utmp.fortran_vec (), rw, info)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1042 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1043 return info; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1044 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1045 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1046 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1047 octave_idx_type |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1048 chol<ComplexMatrix>::insert_sym (const ComplexColumnVector& u, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1049 octave_idx_type j) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1050 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1051 octave_idx_type info = -1; |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1052 |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1053 octave_idx_type n = chol_mat.rows (); |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1054 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1055 if (u.numel () != n + 1) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1056 (*current_liboctave_error_handler) ("cholinsert: dimension mismatch"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1057 if (j < 0 || j > n) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1058 (*current_liboctave_error_handler) ("cholinsert: index out of range"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1059 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1060 ComplexColumnVector utmp = u; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1061 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1062 OCTAVE_LOCAL_BUFFER (double, rw, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1063 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1064 chol_mat.resize (n+1, n+1); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1065 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1066 F77_XFCN (zchinx, ZCHINX, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1067 j + 1, utmp.fortran_vec (), rw, info)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1068 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1069 return info; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1070 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1071 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1072 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1073 void |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1074 chol<ComplexMatrix>::delete_sym (octave_idx_type j) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1075 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1076 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1077 |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1078 if (j < 0 || j > n-1) |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1079 (*current_liboctave_error_handler) ("choldelete: index out of range"); |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
1080 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1081 OCTAVE_LOCAL_BUFFER (double, rw, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1082 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1083 F77_XFCN (zchdex, ZCHDEX, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1084 j + 1, rw)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1085 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1086 chol_mat.resize (n-1, n-1); |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1087 } |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1088 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1089 template <> |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1090 void |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1091 chol<ComplexMatrix>::shift_sym (octave_idx_type i, octave_idx_type j) |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1092 { |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1093 octave_idx_type n = chol_mat.rows (); |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1094 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1095 if (i < 0 || i > n-1 || j < 0 || j > n-1) |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1096 (*current_liboctave_error_handler) ("cholshift: index out of range"); |
21136
7cac4e7458f2
maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents:
20629
diff
changeset
|
1097 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1098 OCTAVE_LOCAL_BUFFER (Complex, w, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1099 OCTAVE_LOCAL_BUFFER (double, rw, n); |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1100 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1101 F77_XFCN (zchshx, ZCHSHX, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1102 i + 1, j + 1, w, rw)); |
8562
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1103 } |
a6edd5c23cb5
use replacement methods if qrupdate is not available
Jaroslav Hajek <highegg@gmail.com>
parents:
8547
diff
changeset
|
1104 |
8547
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
1105 #endif |
d66c9b6e506a
imported patch qrupdate.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
8377
diff
changeset
|
1106 |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1107 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1108 octave_idx_type |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1109 chol<FloatComplexMatrix>::init (const FloatComplexMatrix& a, bool upper, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1110 bool calc_cond) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1111 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1112 octave_idx_type a_nr = a.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1113 octave_idx_type a_nc = a.cols (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1114 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1115 if (a_nr != a_nc) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1116 (*current_liboctave_error_handler) ("chol: requires square matrix"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1117 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1118 octave_idx_type n = a_nc; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1119 octave_idx_type info; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1120 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1121 is_upper = upper; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1122 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1123 chol_mat.clear (n, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1124 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1125 for (octave_idx_type j = 0; j < n; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1126 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1127 for (octave_idx_type i = 0; i <= j; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1128 chol_mat.xelem (i, j) = a(i, j); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1129 for (octave_idx_type i = j+1; i < n; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1130 chol_mat.xelem (i, j) = 0.0f; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1131 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1132 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1133 for (octave_idx_type j = 0; j < n; j++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1134 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1135 for (octave_idx_type i = 0; i < j; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1136 chol_mat.xelem (i, j) = 0.0f; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1137 for (octave_idx_type i = j; i < n; i++) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1138 chol_mat.xelem (i, j) = a(i, j); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1139 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1140 FloatComplex *h = chol_mat.fortran_vec (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1141 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1142 // Calculate the norm of the matrix, for later use. |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1143 float anorm = 0; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1144 if (calc_cond) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1145 anorm = xnorm (a, 1); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1146 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1147 if (is_upper) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1148 F77_XFCN (cpotrf, CPOTRF, (F77_CONST_CHAR_ARG2 ("U", 1), n, h, n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1149 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1150 else |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1151 F77_XFCN (cpotrf, CPOTRF, (F77_CONST_CHAR_ARG2 ("L", 1), n, h, n, info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1152 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1153 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1154 xrcond = 0.0; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1155 if (info > 0) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1156 chol_mat.resize (info - 1, info - 1); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1157 else if (calc_cond) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1158 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1159 octave_idx_type cpocon_info = 0; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1160 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1161 // Now calculate the condition number for non-singular matrix. |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1162 Array<FloatComplex> z (dim_vector (2*n, 1)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1163 FloatComplex *pz = z.fortran_vec (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1164 Array<float> rz (dim_vector (n, 1)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1165 float *prz = rz.fortran_vec (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1166 F77_XFCN (cpocon, CPOCON, (F77_CONST_CHAR_ARG2 ("U", 1), n, h, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1167 n, anorm, xrcond, pz, prz, cpocon_info |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1168 F77_CHAR_ARG_LEN (1))); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1169 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1170 if (cpocon_info != 0) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1171 info = -1; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1172 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1173 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1174 return info; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1175 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1176 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1177 #ifdef HAVE_QRUPDATE |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1178 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1179 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1180 void |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1181 chol<FloatComplexMatrix>::update (const FloatComplexColumnVector& u) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1182 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1183 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1184 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1185 if (u.numel () != n) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1186 (*current_liboctave_error_handler) ("cholupdate: dimension mismatch"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1187 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1188 FloatComplexColumnVector utmp = u; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1189 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1190 OCTAVE_LOCAL_BUFFER (float, rw, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1191 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1192 F77_XFCN (cch1up, CCH1UP, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1193 utmp.fortran_vec (), rw)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1194 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1195 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1196 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1197 octave_idx_type |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1198 chol<FloatComplexMatrix>::downdate (const FloatComplexColumnVector& u) |
5340 | 1199 { |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1200 octave_idx_type info = -1; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1201 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1202 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1203 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1204 if (u.numel () != n) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1205 (*current_liboctave_error_handler) ("cholupdate: dimension mismatch"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1206 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1207 FloatComplexColumnVector utmp = u; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1208 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1209 OCTAVE_LOCAL_BUFFER (float, rw, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1210 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1211 F77_XFCN (cch1dn, CCH1DN, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1212 utmp.fortran_vec (), rw, info)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1213 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1214 return info; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1215 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1216 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1217 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1218 octave_idx_type |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1219 chol<FloatComplexMatrix>::insert_sym (const FloatComplexColumnVector& u, |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1220 octave_idx_type j) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1221 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1222 octave_idx_type info = -1; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1223 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1224 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1225 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1226 if (u.numel () != n + 1) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1227 (*current_liboctave_error_handler) ("cholinsert: dimension mismatch"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1228 if (j < 0 || j > n) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1229 (*current_liboctave_error_handler) ("cholinsert: index out of range"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1230 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1231 FloatComplexColumnVector utmp = u; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1232 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1233 OCTAVE_LOCAL_BUFFER (float, rw, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1234 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1235 chol_mat.resize (n+1, n+1); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1236 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1237 F77_XFCN (cchinx, CCHINX, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1238 j + 1, utmp.fortran_vec (), rw, info)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1239 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1240 return info; |
5340 | 1241 } |
21269
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1242 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1243 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1244 void |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1245 chol<FloatComplexMatrix>::delete_sym (octave_idx_type j) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1246 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1247 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1248 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1249 if (j < 0 || j > n-1) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1250 (*current_liboctave_error_handler) ("choldelete: index out of range"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1251 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1252 OCTAVE_LOCAL_BUFFER (float, rw, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1253 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1254 F77_XFCN (cchdex, CCHDEX, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1255 j + 1, rw)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1256 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1257 chol_mat.resize (n-1, n-1); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1258 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1259 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1260 template <> |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1261 void |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1262 chol<FloatComplexMatrix>::shift_sym (octave_idx_type i, octave_idx_type j) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1263 { |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1264 octave_idx_type n = chol_mat.rows (); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1265 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1266 if (i < 0 || i > n-1 || j < 0 || j > n-1) |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1267 (*current_liboctave_error_handler) ("cholshift: index out of range"); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1268 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1269 OCTAVE_LOCAL_BUFFER (FloatComplex, w, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1270 OCTAVE_LOCAL_BUFFER (float, rw, n); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1271 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1272 F77_XFCN (cchshx, CCHSHX, (n, chol_mat.fortran_vec (), chol_mat.rows (), |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1273 i + 1, j + 1, w, rw)); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1274 } |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1275 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1276 #endif |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1277 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1278 // Instantiations we need. |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1279 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1280 template class chol<Matrix>; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1281 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1282 template class chol<FloatMatrix>; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1283 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1284 template class chol<ComplexMatrix>; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1285 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1286 template class chol<FloatComplexMatrix>; |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1287 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1288 template Matrix |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1289 chol2inv<Matrix> (const Matrix& r); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1290 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1291 template ComplexMatrix |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1292 chol2inv<ComplexMatrix> (const ComplexMatrix& r); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1293 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1294 template FloatMatrix |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1295 chol2inv<FloatMatrix> (const FloatMatrix& r); |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1296 |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1297 template FloatComplexMatrix |
3c8a3d35661a
better use of templates for Cholesky factorization
John W. Eaton <jwe@octave.org>
parents:
21202
diff
changeset
|
1298 chol2inv<FloatComplexMatrix> (const FloatComplexMatrix& r); |