Boost logo

Ublas :

From: Eddie Vedder (Eddie.Vedder_at_[hidden])
Date: 2005-12-22 03:25:12


Hello list,

my problem was ...

> > The matrix Q is represented as a product of elementary reflectors
> > Q = H(1) H(2) . . . H(k), where k = min(m,n).
> > Each H(i) has the form
> > H(i) = I - tau * v * v'
> > where tau is a real scalar, and v is a real vector with
> > v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i),
> > and tau in TAU(i).
> >

... because of your help I was successful. So for the archive I post the
solution:

ublas::identity_matrix<double> matI( k );
ublas::matrix<double> matV( k, 1 );
ublas::matrix<double> matVTrans;
ublas::matrix<double> matVProd;
ublas::matrix<double> matHProd( k, k );
matHProd = matI;
for ( unsigned i = 1; i <= k; i++ ) {
        for ( unsigned iV = 1; iV <= m; iV++ ) {
                if ( iV <= i-1 )
                        matV( iV-1, 0 ) = 0.0;
                else if ( iV == i )
                        matV( iV-1, 0 ) = 1.0;
                else if ( iV > i )
                        matV( iV-1, 0 ) = matAQR( iV-1, i-1 );
        }
        matVTrans = trans(matV); // v'
        matVProd = prod( matV, matVTrans ); // v * v'
        matVProd *= vecTau( i-1 ); // tau * v * v'
        matVProd = matI - matVProd; // H(i) = I - tau * v * v'
        matQ = prod( matHProd, matVProd );
        matHProd = matQ;
} // endfor i

-- 
Telefonieren Sie schon oder sparen Sie noch?
NEU: GMX Phone_Flat http://www.gmx.net/de/go/telefonie