mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-02-23 18:20:47 +08:00
replace custom rank one update in LU by an expression
This commit is contained in:
parent
d1dc088ef0
commit
f5e1c896c7
@ -434,16 +434,8 @@ void LU<MatrixType>::compute(const MatrixType& matrix)
|
||||
}
|
||||
if(k<rows-1)
|
||||
m_lu.col(k).end(rows-k-1) /= m_lu.coeff(k,k);
|
||||
if(k<size-1) {
|
||||
/* I know it's tempting to replace this for loop by a single matrix product. But actually there's no reason why it
|
||||
* should be faster because it's just an exterior vector product; and in practice this gives much slower code with
|
||||
* GCC 4.2-4.4 (this is weird, would be interesting to investigate). On the other hand, it would be worth having a variant
|
||||
* for row-major matrices, traversing in the other direction for better performance, with a meta selector to compile only
|
||||
* one path
|
||||
*/
|
||||
for(int col = k + 1; col < cols; ++col)
|
||||
m_lu.col(col).end(rows-k-1) -= m_lu.col(k).end(rows-k-1) * m_lu.coeff(k,col);
|
||||
}
|
||||
if(k<size-1)
|
||||
m_lu.block(k+1,k+1,rows-k-1,cols-k-1) -= m_lu.col(k).end(rows-k-1) * m_lu.row(k).end(cols-k-1);
|
||||
}
|
||||
|
||||
for(int k = 0; k < matrix.rows(); ++k) m_p.coeffRef(k) = k;
|
||||
|
Loading…
Reference in New Issue
Block a user