Чтобы обеспечить матричное умножение вектора, Eigen
реализует операцию scaleAndAddTo, которая может быть специализированной для типа матрицы пользователя.
Согласно https://eigen.tuxfamily.org/dox/group__MatrixfreeSolverExample.html пользователь должен предоставить специализацию для scaleAndAddTo, которая вычисляет dst += alpha * lhs * rhs
.
Я слежу за стеком вызовов, пока он не будет вызван, и Eigen
делает следующее:
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void evalTo(Dst& dst, const Lhs& lhs, const Rhs& rhs)
{ dst.setZero(); scaleAndAddTo(dst, lhs, rhs, Scalar(1)); }
Поскольку dst
установлен на ноль, я не могу понятьпочему мы должны предоставить scaleAndAddTo вместо чего-то вроде масштаба напрямую.
Почему требуется добавить деталь?