57 template<
class mat1_t,
class mat2_t>
59 size_t i,
size_t j,
double c,
double s) {
61 for(
size_t k=0;k<M;k++) {
62 double qki=O2SCL_IX2(Q,k,i);
63 double qkj=O2SCL_IX2(Q,k,j);
64 O2SCL_IX2(Q,k,i)=qki*c-qkj*s;
65 O2SCL_IX2(Q,k,j)=qki*s+qkj*c;
70 for(
size_t k=kstart;k<N;k++) {
71 double rik=O2SCL_IX2(R,i,k);
72 double rjk=O2SCL_IX2(R,j,k);
73 O2SCL_IX2(R,i,k)=c*rik-s*rjk;
74 O2SCL_IX2(R,j,k)=s*rik+c*rjk;
85 template<
class mat1_t,
class mat2_t>
87 size_t i,
size_t j,
double c,
double s) {
89 for(
size_t k=0;k<M;k++) {
90 double qik=O2SCL_IX2(Q,i,k);
91 double qjk=O2SCL_IX2(Q,j,k);
92 O2SCL_IX2(Q,i,k)=qik*c-qjk*s;
93 O2SCL_IX2(Q,j,k)=qik*s+qjk*c;
98 for(
size_t k=kstart;k<N;k++) {
99 double lki=O2SCL_IX2(L,k,i);
100 double lkj=O2SCL_IX2(L,k,j);
101 O2SCL_IX2(L,k,i)=c*lki-s*lkj;
102 O2SCL_IX2(L,k,j)=s*lki+c*lkj;
109 template<
class vec_t>
111 double c,
double s) {
112 double vi=O2SCL_IX(v,i);
113 double vj=O2SCL_IX(v,j);
114 O2SCL_IX(v,i)=c*vi-s*vj;
115 O2SCL_IX(v,j)=s*vi+c*vj;
void apply_givens_vec(vec_t &v, size_t i, size_t j, double c, double s)
Apply a rotation to a vector, .
void apply_givens_lq(size_t M, size_t N, mat1_t &Q, mat2_t &L, size_t i, size_t j, double c, double s)
Apply a rotation to matrices from the LQ decomposition.
The namespace for linear algebra classes and functions.
void apply_givens_qr(size_t M, size_t N, mat1_t &Q, mat2_t &R, size_t i, size_t j, double c, double s)
Apply a rotation to matrices from the QR decomposition.