Jpp
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
software
JMath
JMatrix2S.hh
Go to the documentation of this file.
1
#ifndef __JMATRIX2S__
2
#define __JMATRIX2S__
3
4
#include <cmath>
5
#include <algorithm>
6
7
#include "
JMath/JMatrix2D.hh
"
8
#include "
JLang/JException.hh
"
9
10
11
/**
12
* \author mdejong
13
*/
14
15
namespace
JMATH {}
16
namespace
JPP {
using namespace
JMATH; }
17
18
namespace
JMATH {
19
20
using
JLANG::JDivisionByZero
;
21
22
23
/**
24
* 2 x 2 symmetric matrix
25
*/
26
class
JMatrix2S
:
27
public
JMatrix2D
28
{
29
public
:
30
/**
31
* Default constructor.
32
*/
33
JMatrix2S
() :
34
JMatrix2D
()
35
{}
36
37
38
/**
39
* Contructor.
40
*
41
* \param A matrix
42
*/
43
JMatrix2S
(
const
JMatrix2D
& A) :
44
JMatrix2D
(A)
45
{}
46
47
48
/**
49
* Contructor.
50
* The lower triangle is internally set.
51
*
52
* \param __a00 (0,0)
53
* \param __a01 (0,1)
54
* \param __a11 (1,1)
55
*/
56
JMatrix2S
(
const
double
__a00,
const
double
__a01,
57
/* */
const
double
__a11) :
58
JMatrix2D
(__a00, __a01,
59
__a01, __a11)
60
{}
61
62
63
/**
64
* Invert matrix
65
*/
66
void
invert
()
67
{
68
using
std::swap;
69
70
// LDU decomposition
71
72
int
p0 = 0;
// permute row 0
73
74
double
val;
75
76
val =
a00
;
77
78
if
(fabs(
a10
) > fabs(val)) {
79
80
p0 = 1;
81
val =
a10
;
82
83
swap(
a00
,
a10
);
84
swap(
a01
,
a11
);
85
}
86
87
if
(val == 0) {
88
throw
JDivisionByZero
(
"LDU decomposition zero pivot"
);
89
}
90
91
a10
/= val;
92
a11
-=
a10
*
a01
;
93
94
// invert D
95
96
if
(
a11
== 0) {
97
throw
JDivisionByZero
(
"D matrix not invertable"
);
98
}
99
100
a00
= 1.0 /
a00
;
101
a11
= 1.0 /
a11
;
102
103
// invert U
104
105
a01 *= -
a00
;
106
a01 *=
a11
;
107
108
// invert L
109
110
a10
= -
a10
;
111
112
// U^-1 x L^-1
113
114
a00
+= a01 *
a10
;
115
a10 *=
a11
;
116
117
switch
(p0) {
118
119
case
1:
120
swap(
a00
,a01);
121
swap(a10,
a11
);
122
break
;
123
}
124
}
125
};
126
}
127
128
#endif
JException.hh
Exceptions.
JMATH::JMatrix2S::JMatrix2S
JMatrix2S(const double __a00, const double __a01, const double __a11)
Contructor.
Definition:
JMatrix2S.hh:56
JMATH::JMatrix2S::JMatrix2S
JMatrix2S(const JMatrix2D &A)
Contructor.
Definition:
JMatrix2S.hh:43
JMATH::JMatrix2D::a00
double a00
Definition:
JMath/JMatrix2D.hh:346
JMATH::JMatrix2D::a01
double a01
Definition:
JMath/JMatrix2D.hh:346
JMATH::JMatrix2S
2 x 2 symmetric matrix
Definition:
JMatrix2S.hh:26
JMATH::JMatrix2S::invert
void invert()
Invert matrix.
Definition:
JMatrix2S.hh:66
JMATH::JMatrix2S::JMatrix2S
JMatrix2S()
Default constructor.
Definition:
JMatrix2S.hh:33
JMATH::JMatrix2D
2 x 2 matrix
Definition:
JMath/JMatrix2D.hh:32
JLANG::JDivisionByZero
Exception for division by zero.
Definition:
JException.hh:252
JMatrix2D.hh
JMATH::JMatrix2D::a10
double a10
Definition:
JMath/JMatrix2D.hh:347
JMATH::JMatrix2D::a11
double a11
Definition:
JMath/JMatrix2D.hh:347
Generated by
1.8.5