GSparseNumeric.hpp
3.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/***************************************************************************
* GSparseNumeric.hpp - sparse matrix numeric analysis class *
* ----------------------------------------------------------------------- *
* copyright : (C) 2006 by Jurgen Knodlseder *
* ----------------------------------------------------------------------- *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef GSPARSENUMERIC_HPP
#define GSPARSENUMERIC_HPP
/* __ Includes ___________________________________________________________ */
#include "GException.hpp"
#include "GVector.hpp"
#include "GMatrix.hpp"
#include "GSparseMatrix.hpp"
/* __ Namespaces _________________________________________________________ */
using namespace std;
/* __ Definitions ________________________________________________________ */
/* __ Enumerators ________________________________________________________ */
/* __ Structures _________________________________________________________ */
/* __ Prototypes _________________________________________________________ */
/***************************************************************************
* GSparseNumeric class definition *
***************************************************************************/
class GSparseNumeric {
// Friend classes
friend class GSparseMatrix;
// I/O friends
friend ostream& operator<< (ostream& os, const GSparseNumeric& n);
public:
// Constructors and destructors
GSparseNumeric();
~GSparseNumeric();
// Assignment operator
GSparseNumeric& operator= (const GSparseNumeric& n);
// Functions
void cholesky_numeric_analysis(const GSparseMatrix& m, const GSparseSymbolic& s);
private:
// Functions
int cs_ereach(const GSparseMatrix* A, int k, const int* parent, int* s, int* w);
// Data
GSparseMatrix* m_L; // L for LU and Cholesky, V for QR
GSparseMatrix* m_U; // U for LU, R for QR, not used for Cholesky
int* m_pinv; // partial pivoting for LU
double* m_B; // beta [0..n-1] for QR
int m_n_pinv; // Number of elements in m_pinv
int m_n_B; // Number of elements in m_B
};
/***************************************************************************
* Inline members *
***************************************************************************/
/***************************************************************************
* Inline friends *
***************************************************************************/
#endif /* GSPARSENUMERIC_HPP */