If I understand your question correctly (smooth accelleration/decelleration curve when moving to a given angle), my solution was to use a sine wave for the speed value.
Pseudocode:
delta_angle = (destination_angle - starting_angle)
while (progress < (180 degrees))
{
progress = ((current_angle - starting_angle) / delta_angle) * (180 degrees)
setServoSpeed (sin (progress) * max_speed)
}
Explanation:
A sine wave (from 0 to 180 degrees) goes very smoothly from 0 to 1 and back to 0, so use that as a multiplier for the maximum desired speed. Continually poll the servo for it's position while moving, and keep adjusting the speed according to the sine wave.
If you're working on a microcontroller, storing a sine lookup-table in RAM or EEPROM is a good workaround for the lack of floating point capabilities. There are many other optimizations that can also be performed.
Your milage may vary, but when I tried this it worked exactly as expected (regarding the speed), however the servo itself appeared to stutter a little bit, probably because I wasn't updating with new speed values often enough.
Hope this helps, or at least gives you some more ideas on how to tackle the problem!
- Adam