Inverse estimation of cardiac activation times via gradient-based optimization