Mercurial > hg > octave-lyh
annotate liboctave/SparsedbleCHOL.cc @ 14444:245963d3d628 stable
pkg: bug fix - accessing non-existent variable for error message
author | Miguel Bazdresch <lmb@2pif.info> |
---|---|
date | Thu, 01 Mar 2012 14:58:59 +0000 |
parents | 72c96de7a403 |
children | 460a3c6d8bf1 |
rev | line source |
---|---|
5506 | 1 /* |
2 | |
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
3 Copyright (C) 2005-2012 David Bateman |
11523 | 4 Copyright (C) 1998-2005 Andy Adler |
7016 | 5 |
6 This file is part of Octave. | |
5506 | 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. | |
5506 | 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/>. | |
5506 | 21 |
22 */ | |
23 | |
24 #ifdef HAVE_CONFIG_H | |
25 #include <config.h> | |
26 #endif | |
27 | |
28 #include "SparsedbleCHOL.h" | |
29 | |
30 // Instantiate the base CHOL class for the type we need | |
31 #define OCTAVE_CHOLMOD_TYPE CHOLMOD_REAL | |
32 #include "sparse-base-chol.h" | |
33 #include "sparse-base-chol.cc" | |
34 template class sparse_base_chol <SparseMatrix, double, SparseMatrix>; | |
35 | |
36 // Compute the inverse of a matrix using the Cholesky factorization. | |
37 SparseMatrix | |
38 chol2inv (const SparseMatrix& r) | |
39 { | |
40 octave_idx_type r_nr = r.rows (); | |
41 octave_idx_type r_nc = r.cols (); | |
42 SparseMatrix retval; | |
43 | |
44 if (r_nr == r_nc) | |
45 { | |
5785 | 46 MatrixType mattype (r); |
5506 | 47 int typ = mattype.type (false); |
48 double rcond; | |
49 octave_idx_type info; | |
50 SparseMatrix rinv; | |
51 | |
5785 | 52 if (typ == MatrixType::Upper) |
10314
07ebe522dac2
untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
53 { |
07ebe522dac2
untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
54 rinv = r.inverse(mattype, info, rcond, true, false); |
07ebe522dac2
untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
55 retval = rinv.transpose() * rinv; |
07ebe522dac2
untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
56 } |
5785 | 57 else if (typ == MatrixType::Lower) |
10314
07ebe522dac2
untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
58 { |
07ebe522dac2
untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
59 rinv = r.transpose().inverse(mattype, info, rcond, true, false); |
07ebe522dac2
untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
60 retval = rinv.transpose() * rinv; |
07ebe522dac2
untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
61 } |
5506 | 62 else |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
63 (*current_liboctave_error_handler) |
10314
07ebe522dac2
untabify liboctave C++ sources
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
64 ("spchol2inv requires triangular matrix"); |
5506 | 65 } |
66 else | |
67 (*current_liboctave_error_handler) ("spchol2inv requires square matrix"); | |
68 | |
69 return retval; | |
70 } |