mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
*adapt Householder to the convention that we now favor refs over ptrs for output. Keep "workspace" as pointer because it is an array (which is now more obvious).
*rename makeHouseholderSequence to householderSequence, because that's what it returns.
This commit is contained in:
@@ -35,18 +35,18 @@ template<int n> struct ei_decrement_size
|
||||
|
||||
template<typename EssentialPart>
|
||||
void makeTrivialHouseholder(
|
||||
EssentialPart *essential,
|
||||
typename EssentialPart::RealScalar *beta)
|
||||
EssentialPart &essential,
|
||||
typename EssentialPart::RealScalar &beta)
|
||||
{
|
||||
*beta = typename EssentialPart::RealScalar(0);
|
||||
essential->setZero();
|
||||
beta = typename EssentialPart::RealScalar(0);
|
||||
essential.setZero();
|
||||
}
|
||||
|
||||
template<typename Derived>
|
||||
void MatrixBase<Derived>::makeHouseholderInPlace(Scalar *tau, RealScalar *beta)
|
||||
void MatrixBase<Derived>::makeHouseholderInPlace(Scalar& tau, RealScalar& beta)
|
||||
{
|
||||
VectorBlock<Derived, ei_decrement_size<SizeAtCompileTime>::ret> essentialPart(derived(), 1, size()-1);
|
||||
makeHouseholder(&essentialPart, tau, beta);
|
||||
makeHouseholder(essentialPart, tau, beta);
|
||||
}
|
||||
|
||||
/** Computes the elementary reflector H such that:
|
||||
@@ -67,9 +67,9 @@ void MatrixBase<Derived>::makeHouseholderInPlace(Scalar *tau, RealScalar *beta)
|
||||
template<typename Derived>
|
||||
template<typename EssentialPart>
|
||||
void MatrixBase<Derived>::makeHouseholder(
|
||||
EssentialPart *essential,
|
||||
Scalar *tau,
|
||||
RealScalar *beta) const
|
||||
EssentialPart& essential,
|
||||
Scalar& tau,
|
||||
RealScalar& beta) const
|
||||
{
|
||||
EIGEN_STATIC_ASSERT_VECTOR_ONLY(EssentialPart)
|
||||
VectorBlock<Derived, EssentialPart::SizeAtCompileTime> tail(derived(), 1, size()-1);
|
||||
@@ -79,16 +79,16 @@ void MatrixBase<Derived>::makeHouseholder(
|
||||
|
||||
if(tailSqNorm == RealScalar(0) && ei_imag(c0)==RealScalar(0))
|
||||
{
|
||||
*tau = 0;
|
||||
*beta = ei_real(c0);
|
||||
tau = 0;
|
||||
beta = ei_real(c0);
|
||||
}
|
||||
else
|
||||
{
|
||||
*beta = ei_sqrt(ei_abs2(c0) + tailSqNorm);
|
||||
beta = ei_sqrt(ei_abs2(c0) + tailSqNorm);
|
||||
if (ei_real(c0)>=0.)
|
||||
*beta = -*beta;
|
||||
*essential = tail / (c0 - *beta);
|
||||
*tau = ei_conj((*beta - c0) / *beta);
|
||||
beta = -beta;
|
||||
essential = tail / (c0 - beta);
|
||||
tau = ei_conj((beta - c0) / beta);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ private:
|
||||
};
|
||||
|
||||
template<typename VectorsType, typename CoeffsType>
|
||||
HouseholderSequence<VectorsType,CoeffsType> makeHouseholderSequence(const VectorsType& v, const CoeffsType& h, bool trans=false)
|
||||
HouseholderSequence<VectorsType,CoeffsType> householderSequence(const VectorsType& v, const CoeffsType& h, bool trans=false)
|
||||
{
|
||||
return HouseholderSequence<VectorsType,CoeffsType>(v, h, trans);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user