Jpp
15.0.0-rc.2
the software that should make you happy
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
software
JMath
JMatrix3S.hh
Go to the documentation of this file.
1
#ifndef __JMATRIX3S__
2
#define __JMATRIX3S__
3
4
#include <cmath>
5
#include <algorithm>
6
7
#include "
JMath/JMatrix3D.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
* 3 x 3 symmetric matrix
25
*/
26
class
JMatrix3S
:
27
public
JMatrix3D
28
{
29
public
:
30
/**
31
* Default constructor.
32
*/
33
JMatrix3S
() :
34
JMatrix3D
()
35
{}
36
37
38
/**
39
* Contructor.
40
*
41
* \param A matrix
42
*/
43
JMatrix3S
(
const
JMatrix3D
&
A
) :
44
JMatrix3D
(A)
45
{}
46
47
48
/**
49
* Contructor.\n
50
* The upper triangle is internally set.
51
*
52
* \param __a00 (0,0)
53
* \param __a10 (1,0)
54
* \param __a11 (1,1)
55
* \param __a20 (2,0)
56
* \param __a21 (2,1)
57
* \param __a22 (2,2)
58
*/
59
JMatrix3S
(
const
double
__a00,
60
const
double
__a10,
const
double
__a11,
61
const
double
__a20,
const
double
__a21,
const
double
__a22) :
62
JMatrix3D
(__a00, __a10, __a20,
63
__a10, __a11, __a21,
64
__a20, __a21, __a22)
65
{}
66
67
68
/**
69
* Invert matrix.
70
*/
71
void
invert
()
72
{
73
using
std::swap;
74
75
// LDU decomposition
76
77
int
p0 = 0;
// permute row 0
78
int
p1
= 0;
// permute row 1
79
80
double
val;
81
82
val =
a00
;
83
84
if
(fabs(
a10
) > fabs(val)) {
85
p0 = 1;
86
val =
a10
;
87
}
88
89
if
(fabs(
a20
) > fabs(val)) {
90
p0 = 2;
91
val =
a20
;
92
}
93
94
switch
(p0) {
95
96
case
1:
97
swap(
a00
,
a10
);
98
swap(
a01
,
a11
);
99
swap(
a02
,
a12
);
100
break
;
101
102
case
2:
103
swap(
a00
,
a20
);
104
swap(
a01
,
a21
);
105
swap(
a02
,
a22
);
106
break
;
107
}
108
109
if
(val == 0) {
110
throw
JDivisionByZero
(
"LDU decomposition zero pivot"
);
111
}
112
113
a10
/= val;
114
a11
-=
a10
*
a01
;
115
a12
-=
a10
*
a02
;
116
117
a20
/= val;
118
a21
-=
a20
*
a01
;
119
a22
-=
a20
*
a02
;
120
121
val =
a11
;
122
123
if
(fabs(
a21
) > fabs(val)) {
124
p1 = 2;
125
val =
a21
;
126
}
127
128
switch
(p1) {
129
130
case
2:
131
swap(
a10
,
a20
);
132
swap(
a11
,
a21
);
133
swap(
a12
,
a22
);
134
break
;
135
}
136
137
if
(val == 0) {
138
throw
JDivisionByZero
(
"LDU decomposition zero pivot"
);
139
}
140
141
a21
/= val;
142
a22
-=
a21
*
a12
;
143
144
// invert D
145
146
if
(
a22
== 0) {
147
throw
JDivisionByZero
(
"D matrix not invertable"
);
148
}
149
150
a00
= 1.0 /
a00
;
151
a11
= 1.0 /
a11
;
152
a22
= 1.0 /
a22
;
153
154
// invert U
155
156
a01 *= -
a00
;
157
a01 *=
a11
;
158
159
a02 *= -
a00
;
160
a02 -= a01 *
a12
;
161
a02 *=
a22
;
162
163
a12 *= -
a11
;
164
a12 *=
a22
;
165
166
// invert L
167
168
a21
= -
a21
;
169
a20
= -
a20
;
170
a20
-=
a21
*
a10
;
171
a10 = -
a10
;
172
173
// U^-1 x L^-1
174
175
a00
+= a01 * a10 + a02 *
a20
;
176
a01 += a02 *
a21
;
177
a10 *=
a11
;
178
a10 += a12 *
a20
;
179
a11
+= a12 *
a21
;
180
a20 *=
a22
;
181
a21 *=
a22
;
182
183
switch
(p1) {
184
185
case
2:
186
swap(a01,a02);
187
swap(
a11
,a12);
188
swap(a21,
a22
);
189
break
;
190
}
191
192
switch
(p0) {
193
194
case
1:
195
swap(
a00
,a01);
196
swap(a10,
a11
);
197
swap(a20,a21);
198
break
;
199
200
case
2:
201
swap(
a00
,a02);
202
swap(a10,a12);
203
swap(a20,
a22
);
204
break
;
205
}
206
}
207
};
208
}
209
210
#endif
JMATH::JMatrix3D::a11
double a11
Definition:
JMath/JMatrix3D.hh:386
JException.hh
Exceptions.
JMATH::JMatrix3S::JMatrix3S
JMatrix3S(const double __a00, const double __a10, const double __a11, const double __a20, const double __a21, const double __a22)
Contructor.
Definition:
JMatrix3S.hh:59
p1
TPaveText * p1
Definition:
JDrawModule3D.cc:35
JMATH::JMatrix3D::a22
double a22
Definition:
JMath/JMatrix3D.hh:387
JMATH::JMatrix3D
3 x 3 matrix
Definition:
JMath/JMatrix3D.hh:32
JMATH::JMatrix3S::invert
void invert()
Invert matrix.
Definition:
JMatrix3S.hh:71
JMATH::JMatrix3S::JMatrix3S
JMatrix3S()
Default constructor.
Definition:
JMatrix3S.hh:33
JMATH::JMatrix3D::a02
double a02
Definition:
JMath/JMatrix3D.hh:385
JMATH::JMatrix3D::a01
double a01
Definition:
JMath/JMatrix3D.hh:385
JMatrix3D.hh
JMATH::JMatrix3S
3 x 3 symmetric matrix
Definition:
JMatrix3S.hh:26
JMATH::JMatrix3D::a20
double a20
Definition:
JMath/JMatrix3D.hh:387
JMATH::JMatrix3D::a21
double a21
Definition:
JMath/JMatrix3D.hh:387
JLANG::JDivisionByZero
Exception for division by zero.
Definition:
JException.hh:270
JMATH::JMatrix3D::a12
double a12
Definition:
JMath/JMatrix3D.hh:386
JMATH::JMatrix3D::a00
double a00
Definition:
JMath/JMatrix3D.hh:385
JMATH::JMatrix3D::a10
double a10
Definition:
JMath/JMatrix3D.hh:386
JMATH::JMatrix3S::JMatrix3S
JMatrix3S(const JMatrix3D &A)
Contructor.
Definition:
JMatrix3S.hh:43
A
source $JPP_DIR setenv csh $JPP_DIR eval JShellParser o a A
Definition:
JShellParser.csh:15
Generated by
1.8.5