58template <
typename TA,
typename TX>
63 blas::real_type<TA, TX> alpha,
64 TX
const *x, int64_t incx,
67 typedef blas::scalar_type<TA, TX> scalar_t;
68 typedef blas::real_type<TA, TX> real_t;
70 #define A(i_, j_) A[ (i_) + (j_)*lda ]
73 const real_t zero = 0;
76 blas_error_if( layout != Layout::ColMajor &&
77 layout != Layout::RowMajor );
78 blas_error_if( uplo != Uplo::Lower &&
79 uplo != Uplo::Upper );
80 blas_error_if( n < 0 );
81 blas_error_if( incx == 0 );
82 blas_error_if( lda < n );
85 if (n == 0 || alpha == zero)
89 if (layout == Layout::RowMajor) {
90 uplo = (uplo == Uplo::Lower ? Uplo::Upper : Uplo::Lower);
93 int64_t kx = (incx > 0 ? 0 : (-n + 1)*incx);
94 if (uplo == Uplo::Upper) {
97 for (int64_t j = 0; j < n; ++j) {
99 scalar_t tmp = alpha * conj( x[j] );
100 for (int64_t i = 0; i <= j-1; ++i) {
101 A(i, j) += x[i] * tmp;
103 A(j, j) = real( A(j, j) ) + real( x[j] * tmp );
109 for (int64_t j = 0; j < n; ++j) {
110 scalar_t tmp = alpha * conj( x[jx] );
112 for (int64_t i = 0; i <= j-1; ++i) {
113 A(i, j) += x[ix] * tmp;
116 A(j, j) = real( A(j, j) ) + real( x[jx] * tmp );
125 for (int64_t j = 0; j < n; ++j) {
126 scalar_t tmp = alpha * conj( x[j] );
127 A(j, j) = real( A(j, j) ) + real( tmp * x[j] );
128 for (int64_t i = j+1; i < n; ++i) {
129 A(i, j) += x[i] * tmp;
136 for (int64_t j = 0; j < n; ++j) {
137 scalar_t tmp = alpha * conj( x[jx] );
138 A(j, j) = real( A(j, j) ) + real( tmp * x[jx] );
140 for (int64_t i = j+1; i < n; ++i) {
142 A(i, j) += x[ix] * tmp;
void her(blas::Layout layout, blas::Uplo uplo, int64_t n, blas::real_type< TA, TX > alpha, TX const *x, int64_t incx, TA *A, int64_t lda)
Hermitian matrix rank-1 update:
Definition her.hh:59