MCPcopy Create free account
hub / github.com/PX4/eigen / jacobi

Function jacobi

test/jacobi.cpp:15–59  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

13
14template<typename MatrixType, typename JacobiScalar>
15void jacobi(const MatrixType& m = MatrixType())
16{
17 typedef typename MatrixType::Index Index;
18 Index rows = m.rows();
19 Index cols = m.cols();
20
21 enum {
22 RowsAtCompileTime = MatrixType::RowsAtCompileTime,
23 ColsAtCompileTime = MatrixType::ColsAtCompileTime
24 };
25
26 typedef Matrix<JacobiScalar, 2, 1> JacobiVector;
27
28 const MatrixType a(MatrixType::Random(rows, cols));
29
30 JacobiVector v = JacobiVector::Random().normalized();
31 JacobiScalar c = v.x(), s = v.y();
32 JacobiRotation<JacobiScalar> rot(c, s);
33
34 {
35 Index p = internal::random<Index>(0, rows-1);
36 Index q;
37 do {
38 q = internal::random<Index>(0, rows-1);
39 } while (q == p);
40
41 MatrixType b = a;
42 b.applyOnTheLeft(p, q, rot);
43 VERIFY_IS_APPROX(b.row(p), c * a.row(p) + numext::conj(s) * a.row(q));
44 VERIFY_IS_APPROX(b.row(q), -s * a.row(p) + numext::conj(c) * a.row(q));
45 }
46
47 {
48 Index p = internal::random<Index>(0, cols-1);
49 Index q;
50 do {
51 q = internal::random<Index>(0, cols-1);
52 } while (q == p);
53
54 MatrixType b = a;
55 b.applyOnTheRight(p, q, rot);
56 VERIFY_IS_APPROX(b.col(p), c * a.col(p) - s * a.col(q));
57 VERIFY_IS_APPROX(b.col(q), numext::conj(s) * a.col(p) + numext::conj(c) * a.col(q));
58 }
59}
60
61void test_jacobi()
62{

Callers

nothing calls this directly

Calls 10

conjFunction · 0.70
rowsMethod · 0.45
colsMethod · 0.45
normalizedMethod · 0.45
xMethod · 0.45
yMethod · 0.45
applyOnTheLeftMethod · 0.45
rowMethod · 0.45
applyOnTheRightMethod · 0.45
colMethod · 0.45

Tested by

no test coverage detected