std::valarray<std::valarray<T>>
const&v) {
36 const charseparator =
' ';
39 for(
size_trow = 0; row < v.size(); row++) {
40 for(
size_tcol = 0; col < v[row].size(); col++)
41out << std::right << std::setw(width) << std::setfill(separator)
53std::ostream &
operator<<(std::ostream &out, std::valarray<T>
const&v) {
55 const charseparator =
' ';
58 for(
size_trow = 0; row < v.size(); row++) {
59out << std::right << std::setw(width) << std::setfill(separator)
76inline double vector_dot(
conststd::valarray<T> &a,
conststd::valarray<T> &b) {
94 returnstd::sqrt(dot);
103template<
typenameT>
105 conststd::valarray<T> &b) {
110 if(deno <= std::numeric_limits<double>::epsilon()) {
111std::cerr <<
"["<< __func__ <<
"] Possible division by zero\n";
115 doublescalar = num / deno;
145template<
typenameT>
147 conststd::valarray<std::valarray<T>> &A,
148std::valarray<std::valarray<T>> *Q,
149std::valarray<std::valarray<T>> *R
151std::size_t ROWS = A.size();
152std::size_t COLUMNS = A[0].size();
153std::valarray<T> col_vector(ROWS);
154std::valarray<T> col_vector2(ROWS);
155std::valarray<T> tmp_vector(ROWS);
157 for(
inti = 0; i < COLUMNS; i++) {
167 for(j = 0; j < ROWS; j++) {
168tmp_vector[j] = A[j][i];
169col_vector[j] = A[j][i];
171 for(j = 0; j < i; j++) {
172 for(
intk = 0; k < ROWS; k++) {
173col_vector2[k] = Q[0][k][j];
175col_vector2 =
vector_proj(col_vector, col_vector2);
176tmp_vector -= col_vector2;
185 for(j = 0; j < ROWS; j++) Q[0][j][i] = tmp_vector[j] / mag;
192 for(
intkk = 0; kk < ROWS; kk++) {
193col_vector[kk] = Q[0][kk][i];
200 for(
intk = i; k < COLUMNS; k++) {
201 for(
intkk = 0; kk < ROWS; kk++) {
202col_vector2[kk] = A[kk][k];
204R[0][i][k] = (col_vector * col_vector2).sum();
Functions to compute QR decomposition of any rectangular matrix.
std::valarray< T > vector_proj(const std::valarray< T > &a, const std::valarray< T > &b)
void qr_decompose(const std::valarray< std::valarray< T > > &A, std::valarray< std::valarray< T > > *Q, std::valarray< std::valarray< T > > *R)
double vector_dot(const std::valarray< T > &a, const std::valarray< T > &b)
double vector_mag(const std::valarray< T > &a)
std::ostream & operator<<(std::ostream &out, std::valarray< std::valarray< T > > const &v)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4