Должно работать следующее:
Eigen::MatrixXd tempMatrix; // not necessary to pre-allocate
// assigning the product allocates tempMatrix if needed
// noalias() tells Eigen that no factor on the right aliases with tempMatrix
tempMatrix.noalias() = points * w.asDiagonal() * points.adjoint();
или напрямую:
Eigen::MatrixXd tempMatrix = points * w.asDiagonal() * points.adjoint();
Если M
действительно велико, можно значительно быстрее просто вычислить одну сторону и скопировать ее(при необходимости):
Eigen::MatrixXd tempMatrix(M,M);
tempMatrix.triangularView<Eigen::Upper>() = points * w.asDiagonal() * points.adjoint();
tempMatrix.triangularView<Eigen::StrictlyLower>() = tempMatrix.transpose();
Обратите внимание, что следующее не устанавливает все записи в ноль:
Eigen::MatrixXd tempMatrix = Eigen::MatrixXd(M,M);
Если вы хотите это, вам нужно написать:
Eigen::MatrixXd tempMatrix = Eigen::MatrixXd::Zero(M,M);