I tried to use eigen's unaryExpr with a function using references to alter a matrix:
MatrixXd X;
...
X.unaryExpr([](double & x){ x = 0});
But X was left unchanged. Thinking I might need to use a function with a return I tried:
X.unaryExpr([](double & x)->return{ return 0});
but still X was unchanged. It seems that unaryExpr is a const operation so I must assign the result back into X. This works:
X = X.unaryExpr([](double & x)->return{ return 0});