An Algorithm for Optimal Charging of Li + Ion Batteries Using a Single Particle Model