Optimization algorithms on matrix manifolds