MyraMath
rotate.h
Go to the documentation of this file.
1 // ========================================================================= //
2 // This file is part of MyraMath, copyright (c) 2014-2019 by Ryan A Chilton //
3 // and distributed by MyraCore, LLC. See LICENSE.txt for license terms. //
4 // ========================================================================= //
5 
6 #ifndef MYRAMATH_DENSE_ROTATE_H
7 #define MYRAMATH_DENSE_ROTATE_H
8 
14 // For number types.
15 #include <myramath/MYRAMATH_EXPORT.h>
17 
18 // For std::pair
19 #include <utility>
20 
21 namespace myra {
22 
23 // Forward declarations.
24 template<class Number> class Matrix22;
25 
27 MYRAMATH_EXPORT std::pair<NumberS, NumberS> rotate1(NumberS a0, NumberS a1);
29 MYRAMATH_EXPORT std::pair<NumberD, NumberD> rotate1(NumberD a0, NumberD a1);
30 MYRAMATH_EXPORT std::pair<NumberC, NumberC> rotate1(NumberC a0, NumberC a1);
31 MYRAMATH_EXPORT std::pair<NumberZ, NumberZ> rotate1(NumberZ a0, NumberZ a1);
33 
35 MYRAMATH_EXPORT Matrix22<NumberS> make_Matrix22(NumberS a0, NumberS a1);
37 MYRAMATH_EXPORT Matrix22<NumberD> make_Matrix22(NumberD a0, NumberD a1);
38 MYRAMATH_EXPORT Matrix22<NumberC> make_Matrix22(NumberC a0, NumberC a1);
39 MYRAMATH_EXPORT Matrix22<NumberZ> make_Matrix22(NumberZ a0, NumberZ a1);
41 
43 MYRAMATH_EXPORT Matrix22<NumberS> sy_rotate2(NumberS a00, NumberS a11, NumberS a10);
45 MYRAMATH_EXPORT Matrix22<NumberD> sy_rotate2(NumberD a00, NumberD a11, NumberD a10);
46 MYRAMATH_EXPORT Matrix22<NumberC> sy_rotate2(NumberC a00, NumberC a11, NumberC a10);
47 MYRAMATH_EXPORT Matrix22<NumberZ> sy_rotate2(NumberZ a00, NumberZ a11, NumberZ a10);
49 
51 MYRAMATH_EXPORT Matrix22<NumberS> sy_rotate2(const Matrix22<NumberS>& A);
53 MYRAMATH_EXPORT Matrix22<NumberD> sy_rotate2(const Matrix22<NumberD>& A);
54 MYRAMATH_EXPORT Matrix22<NumberC> sy_rotate2(const Matrix22<NumberC>& A);
55 MYRAMATH_EXPORT Matrix22<NumberZ> sy_rotate2(const Matrix22<NumberZ>& A);
57 
59 MYRAMATH_EXPORT Matrix22<NumberC> he_rotate2(NumberS a00, NumberS a11, NumberC a10);
61 MYRAMATH_EXPORT Matrix22<NumberZ> he_rotate2(NumberD a00, NumberD a11, NumberZ a10);
63 
65 MYRAMATH_EXPORT Matrix22<NumberC> he_rotate2(const Matrix22<NumberC>& A);
67 MYRAMATH_EXPORT Matrix22<NumberZ> he_rotate2(const Matrix22<NumberZ>& A);
69 
71 template<class Number> class gesvd2_output
72  {
73  public:
74 
77 
79  Matrix22<Number> U; // Unitary U, U'U = I
80  Matrix22<Precision> S; // Real diagonal S, note S(1,0) = S(0,1) = 0
81  Matrix22<Number> V; // Unitary V, VV' = I
82  };
83 
85 MYRAMATH_EXPORT gesvd2_output<NumberS> gesvd2(const Matrix22<NumberS>& A);
87 MYRAMATH_EXPORT gesvd2_output<NumberD> gesvd2(const Matrix22<NumberD>& A);
88 MYRAMATH_EXPORT gesvd2_output<NumberC> gesvd2(const Matrix22<NumberC>& A);
89 MYRAMATH_EXPORT gesvd2_output<NumberZ> gesvd2(const Matrix22<NumberZ>& A);
91 
92 } // namespace
93 
94 #endif
95 
Definition: syntax.dox:1
Various utility functions/classes related to scalar Number types.
Matrix type with fixed size 2x2.
Definition: Matrix22.h:25
Matrix22< Number > U
Decomposes A = U*S*V.
Definition: rotate.h:79
Reflects Precision trait for a Number, scalar Number types should specialize it.
Definition: Number.h:33
Return type of gesvd2()
Definition: rotate.h:71
ReflectPrecision< Number >::type Precision
Useful typedefs.
Definition: rotate.h:76