49 template <
class T>
inline 52 , m_(A.info().getSize(0))
53 , n_(A.info().getSize(1))
60 for (
int k=0; k<
n_; ++k )
63 for (
int i=k; i<
m_; ++i )
76 for (
int i=k; i<
m_; ++i )
77 qr_.set( i, k,
qr_.get( i, k )/norm );
79 qr_.set( k, k,
qr_.get( k, k ) + 1. );
81 for (
int j=k+1; j<
n_; ++j )
84 for (
int i=k; i<
m_; ++i )
85 s +=
qr_.get( i, k ) *
qr_.get( i, j );
87 s = -s /
qr_.get( k, k );
88 for (
int i=k; i<
m_; ++i )
89 qr_.set( i, j,
qr_.get( i, j ) + s *
qr_.get( i, k ) );
97 template <
class T>
inline 104 template <
class T>
inline 112 for (
int idx=0; idx<sz; idx++ )
113 arr->
set( idx, 0, b.
get( idx ) );
121 template <
class T>
inline 131 for (
int k=0; k<
n_; ++k )
133 for (
int j=0; j<nx; ++j )
136 for (
int i=k; i<
m_; ++i )
137 s +=
qr_.get( i, k ) * arr->
get( i, j );
139 s = -s /
qr_.get( k, k );
140 for (
int i=k; i<
m_; ++i )
141 arr->
set( i, j, arr->
get( i, j ) + s *
qr_.get( i, k ) );
146 for (
int k=n_-1; k>=0; --k )
148 for (
int j=0; j<nx; ++j )
151 for (
int i=0; i<k; ++i )
152 for (
int j=0; j<nx; ++j )
153 arr->
set( i, j, arr->
get( i, j ) -
154 arr->
get( k, j ) *
qr_.get( i, k ) );
159 for (
int idx=0; idx<
n_; idx++ )
160 out->
set( idx, arr->
get(idx,0) );
167 template <
class T>
inline 174 for (
int k=
n_-1; k>=0; --k )
176 for (
int i=0; i<
m_; ++i )
177 arr->
set( i, k, 0. );
179 arr->
set( k, k, 1. );
180 for (
int j=k; j<
n_; ++j )
186 for (
int i=k; i<
m_; ++i )
187 s +=
qr_.get( i, k) * arr->
get( i, j );
189 s = -s /
qr_.get( k, k );
190 for (
int i=k; i<
m_; ++i )
191 arr->
set( i, j, arr->
get( i, j ) + s *
qr_.get( i, k ) );
201 template <
class T>
inline 208 for (
int i=0; i<
n_; ++i )
211 for (
int j=i+1; j<
n_; ++j )
212 arr->
set( i, j,
qr_.get( i, j ) );
const Array2DImpl< T > * getQ() const
Definition: qrsolv.h:168
Array1D ( Subclass of ArrayND ) is a one dimensional array.
Definition: arraynd.h:97
~QRSolver()
Definition: qrsolv.h:98
Array2DImpl< T > qr_
Definition: qrsolv.h:40
Array1DImpl< T > * rdiag_
Definition: qrsolv.h:41
#define mIsZero(x, eps)
Definition: commondefs.h:55
#define TINY
Definition: qrsolv.h:16
Implementation of Array2D.
Definition: arrayndimpl.h:101
int n_
Definition: qrsolv.h:43
T get(int, int) const
Definition: arrayndimpl.h:469
void set(int pos, T)
Definition: arrayndimpl.h:359
bool isfullrank_
Definition: qrsolv.h:44
int m_
Definition: qrsolv.h:42
virtual int getSize(int dim) const =0
Array2D ( Subclass of ArrayND ) is a two dimensional array.
Definition: arraynd.h:127
QRSolver(const Array2D< T > &A)
Definition: qrsolv.h:50
const Array1DImpl< T > * apply(const Array1D< T > &B) const
Definition: qrsolv.h:105
const Array2DImpl< T > * getR() const
Definition: qrsolv.h:202
QRSolver - QR decomposition of a matrix A For an m-by-n matrix A, with m>=n, the QR decomposition is ...
Definition: qrsolv.h:26
virtual const Array1DInfo & info() const =0
bool isFullRank()
Definition: qrsolv.h:32
virtual T get(int) const =0
void set(int, int, T)
Definition: arrayndimpl.h:447
Implementation of Array1D.
Definition: arrayndimpl.h:51
#define mClass(module)
Definition: commondefs.h:161
virtual const Array2DInfo & info() const =0