Hi - Just moved over to Garmin from Suunto. There I was able to write a very simple app which would predict a marathon finish time. I can't find anything similar here and wondered if someone could point me in the right direction or make one. I'll try myself but first impressions are this seems far more complicated than the Suunto app builder.
Essentially, there are plenty of apps which will take average pace and convert that to a finish time. But, if you are speeding up or slowing down in the final few miles that doesn't help. With my Suunto I had an app that predicted the finish time in the following way
for the first 7k it would predict the estimated finish time based on actual accrued time for distance done predicting future time based on current 30 second average speed
for 7-14k it would base it on actual accrued time for distance done then 20% current 30 second average speed and 80% overall average speed
for 14-21k it woudl base it on actual accuted time for distance done then 40% current 30 second average speed and 60% overall average speed
for 21 - 28 actual plus 60% current 30 second average, 40% overall average
for 28-35 actual plus 80% current 30 second average, 20% overall average
for 35-39 actual plus 67% current 30 second average 33% current average
for 39-40 actual plus 33% current 30 second average 67% current average
for 40-41 actual plus 100% current average
The advantage of this was that in the early miles there was a heavy weighting on the current average as this is what you would hope to achieve (and the the 30s average helped stabalise the figures) but as you got close to the finish the overall average becomes less relevant and the actual pace you are running far more relevant. If you run 40k at an average of 4 minutes for a k but then walk the last 2 at 10 minutes a k an estimator would be way out using 4.x as a predicted finish.
Anyone know of an app like this or could help write one? The code I used with Suunto is below. (I had similar apps for 10k, HM and M - and had distance as 10.1, 13.2 and 26.4 to allow for the extra we all do - not sure if that is a possible input variable)
Thanks
/* While in sport mode do this once per second */
RESULT = 0;
if (SUUNTO_DISTANCE < 7 ) {
RESULT = SUUNTO_DURATION + ((MARAKM - SUUNTO_DISTANCE) /
SUUNTO_AVG_SPD *3600);
}
if (SUUNTO_DISTANCE >= 7 && SUUNTO_DISTANCE < 14) {
RESULT = SUUNTO_DURATION + ((MARAKM - SUUNTO_DISTANCE) /
((SUUNTO_SPEED_AVG[30] * 0.2) +(SUUNTO_AVG_SPD * 0.8))*3600);
}
if (SUUNTO_DISTANCE >= 14 && SUUNTO_DISTANCE < 21) {
RESULT = SUUNTO_DURATION + ((MARAKM - SUUNTO_DISTANCE) /
((SUUNTO_SPEED_AVG[30] * 0.4) +(SUUNTO_AVG_SPD * 0.6))*3600);
}
if (SUUNTO_DISTANCE >= 21 && SUUNTO_DISTANCE < 28) {
RESULT = SUUNTO_DURATION + ((MARAKM - SUUNTO_DISTANCE) /
((SUUNTO_SPEED_AVG[30] * 0.6) +(SUUNTO_AVG_SPD * 0.4))*3600);
}
if (SUUNTO_DISTANCE >= 28 && SUUNTO_DISTANCE < 35) {
RESULT = SUUNTO_DURATION + ((MARAKM - SUUNTO_DISTANCE) /
((SUUNTO_SPEED_AVG[30] * 0.8) +(SUUNTO_AVG_SPD * 0.2))*3600);
}
if (SUUNTO_DISTANCE >= 35 && SUUNTO_DISTANCE < 39) {
RESULT = SUUNTO_DURATION + ((MARAKM - SUUNTO_DISTANCE) /
SUUNTO_SPEED_AVG[30] * 3600);
}
if (SUUNTO_DISTANCE >= 39 && SUUNTO_DISTANCE < 40) {
RESULT = SUUNTO_DURATION + ((MARAKM - SUUNTO_DISTANCE) /
((SUUNTO_SPEED_AVG[30] * 0.67) +(SUUNTO_SPEED * 0.33))*3600);
}
if (SUUNTO_DISTANCE >= 40 && SUUNTO_DISTANCE < 41) {
RESULT = SUUNTO_DURATION + ((MARAKM - SUUNTO_DISTANCE) /
((SUUNTO_SPEED_AVG[30] * 0.33) +(SUUNTO_SPEED * 0.67))*3600);
}
if (SUUNTO_DISTANCE >= 41) {
RESULT = SUUNTO_DURATION + ((MARAKM - SUUNTO_DISTANCE) /SUUNTO_SPEED * 3600);
}