 |
OpendTect
6.6
|
Go to the documentation of this file.
50 template <
class T>
inline
53 , m_(A.info().getSize(0))
54 , n_(A.info().getSize(1))
61 for (
int k=0; k<
n_; ++k )
64 for (
int i=k; i<
m_; ++i )
77 for (
int i=k; i<
m_; ++i )
78 qr_.set( i, k,
qr_.get( i, k )/norm );
80 qr_.set( k, k,
qr_.get( k, k ) + 1. );
82 for (
int j=k+1; j<
n_; ++j )
85 for (
int i=k; i<
m_; ++i )
86 s +=
qr_.get( i, k ) *
qr_.get( i, j );
88 s = -s /
qr_.get( k, k );
89 for (
int i=k; i<
m_; ++i )
90 qr_.set( i, j,
qr_.get( i, j ) + s *
qr_.get( i, k ) );
98 template <
class T>
inline
105 template <
class T>
inline
113 for (
int idx=0; idx<sz; idx++ )
114 arr->
set( idx, 0, b.
get( idx ) );
122 template <
class T>
inline
125 if ( b.
info().
getSize(0) != m_ || !isfullrank_ || !rdiag_ )
132 for (
int k=0; k<n_; ++k )
134 for (
int j=0; j<nx; ++j )
137 for (
int i=k; i<m_; ++i )
138 s += qr_.get( i, k ) * arr->
get( i, j );
140 s = -s / qr_.get( k, k );
141 for (
int i=k; i<m_; ++i )
142 arr->
set( i, j, arr->
get( i, j ) + s * qr_.get( i, k ) );
147 for (
int k=n_-1; k>=0; --k )
149 for (
int j=0; j<nx; ++j )
150 arr->
set( k, j, arr->
get( k, j ) / rdiag_->get( k ) );
152 for (
int i=0; i<k; ++i )
153 for (
int j=0; j<nx; ++j )
154 arr->
set( i, j, arr->
get( i, j ) -
155 arr->
get( k, j ) * qr_.get( i, k ) );
160 for (
int idx=0; idx<n_; idx++ )
161 out->
set( idx, arr->
get(idx,0) );
168 template <
class T>
inline
175 for (
int k=n_-1; k>=0; --k )
177 for (
int i=0; i<m_; ++i )
178 arr->
set( i, k, 0. );
180 arr->
set( k, k, 1. );
181 for (
int j=k; j<n_; ++j )
187 for (
int i=k; i<m_; ++i )
188 s += qr_.get( i, k) * arr->
get( i, j );
190 s = -s / qr_.get( k, k );
191 for (
int i=k; i<m_; ++i )
192 arr->
set( i, j, arr->
get( i, j ) + s * qr_.get( i, k ) );
202 template <
class T>
inline
209 for (
int i=0; i<n_; ++i )
211 arr->
set( i, i, rdiag_->get( i ) );
212 for (
int j=i+1; j<n_; ++j )
213 arr->
set( i, j, qr_.get( i, j ) );
Implementation of Array1D.
Definition: arrayndimpl.h:52
const Array2DImpl< T > * getR() const
Definition: qrsolv.h:203
QRSolver(const Array2D< T > &A)
Definition: qrsolv.h:51
QRSolver - QR decomposition of a matrix A For an m-by-n matrix A, with m>=n, the QR decomposition is ...
Definition: qrsolv.h:28
bool isFullRank()
Definition: qrsolv.h:33
virtual int getSize(int dim) const =0
int m_
Definition: qrsolv.h:43
Array1D ( Subclass of ArrayND ) is a one dimensional array.
Definition: arraynd.h:111
virtual const Array1DInfo & info() const =0
void set(int pos, T)
Definition: arrayndimpl.h:409
Array2DImpl< T > qr_
Definition: qrsolv.h:41
#define TINY
Definition: qrsolv.h:17
Array1DImpl< T > * rdiag_
Definition: qrsolv.h:42
#define mIsZero(x, eps)
Definition: commondefs.h:66
int n_
Definition: qrsolv.h:44
#define mClass(module)
Definition: commondefs.h:181
bool isfullrank_
Definition: qrsolv.h:45
virtual const Array2DInfo & info() const =0
const Array2DImpl< T > * getQ() const
Definition: qrsolv.h:169
Implementation of Array2D.
Definition: arrayndimpl.h:102
void set(int, int, T)
Definition: arrayndimpl.h:497
~QRSolver()
Definition: qrsolv.h:99
T get(int, int) const
Definition: arrayndimpl.h:519
virtual T get(int) const =0
const Array1DImpl< T > * apply(const Array1D< T > &B) const
Definition: qrsolv.h:106
Array2D ( Subclass of ArrayND ) is a two dimensional array.
Definition: arraynd.h:140
Generated at
for the OpendTect
seismic interpretation project.
Copyright (C): dGB Beheer B.V. 1995-2021