Optimal Force-Velocity Profile for Sprinting: Is It All Bollocks? – Part 4

# Optimal Force-Velocity Profile for Sprinting: Is It All Bollocks? – Part 4

### Previous Part:

In the previous installment, I have demonstrated how to perform sensitivity/optimization analysis of the Acceleration-Velocity Profile (AVP) using (1) probing method and (2) slope method. In this installment I will explain how to do it using the Force-Velocity Profile (FVP).

As we have learned previously, the sensitivity/optimization analysis plays with the parameters under certain constraints (i.e., increase for certain % amount for the probing method, or change in slope while keeping the $P_{max}$ the same for the slope method) to yield the lowest split times. Rather than using MSS and MAC parameters to calculate model predicted split times, we can use $F_0$ and $V_0$ to do so, since they are estimated using MSS and MAC themselves (speaking about the polynomial method explained previously).

Math is more involved (and covered in Samozino et al. (2022)), but I will cover the simple logic here using Equation 1.

\begin{split}
t(d) = f(d, \; F_0, \; V_0, \; k)\\\end{split}Equation 1

Model predicted split times depends on distance selected, $F_0$ and $V_0$ , as well as the $k$ value, which is used to model the air resistance. As shown in Equation 2, $k$ value depends on the body weight, body height, air pressure, air temperature and wind velocity.

\begin{split}
k = f(weight, \;height, \;Pressure, \;Temp, \;v_{wind})\\\end{split}Equation 2

In the previous installment we have used athlete with known/true MSS (maximum-sprinting-speed) equal to 9 $ms^{-1}$ and MAC (maximum-acceleration) equal to 8 $ms^{-2}$. These are model parameters that we will use to generate the data (again, we are using model predictions). These parameters gives us TAU of 1.125 $s$ and $P_{max}$ equal to 18 $W/kg$.

Using the method explained in the previous installments, and assuming our athlete wights 85kg with a body height of 185cm, we can estimate $F_0$ and $V_0$ (using polynomial method) (Table 1).

Show/Hide Code

require(tidyverse)
require(shorts)
require(cowplot)
require(directlabels)
require(kableExtra)

athlete_MSS <- 9
athlete_MAC <- 8
athlete_BW <- 85
athlete_height <- 1.85

# Get FVP
fvp <- make_FV_profile(
athlete_MSS,
athlete_MAC,
bodymass = athlete_BW,
bodyheight = athlete_height
)

athlete_F0 <- fvp$F0_poly athlete_F0_rel <- fvp$F0_poly_rel
athlete_V0 <- fvp$V0_poly athlete_PMAX <- fvp$Pmax_poly
athlete_PMAX_rel <- fvp$Pmax_poly_rel athlete_Slope <- fvp$FV_slope

athlete_Ppeak <- shorts:::find_FV_peak_power(
athlete_F0,
athlete_V0,
bodymass = athlete_BW,
bodyheight = athlete_height
)
athlete_Ppeak_rel <- athlete_Ppeak / athlete_BW

df <- tribble(
~MSS (m/s), ~MAC (m/s/s), ~TAU (s), ~AV Slope, ~net PMAX (W/kg), ~Weight (kg), ~Height (m), ~F0 (N), ~rel F0 (N/kg), ~V0 (m/s), ~PMAX (W), ~rel PMAX (W/kg), ~FV Slope, ~Ppeak (W), ~rel Peak (W/kg),
athlete_MSS, athlete_MAC, athlete_MSS / athlete_MAC, -athlete_MAC / athlete_MSS, athlete_MSS * athlete_MAC / 4, athlete_BW, athlete_height, athlete_F0, athlete_F0_rel, athlete_V0, athlete_PMAX, athlete_PMAX_rel, athlete_Slope,
athlete_Ppeak, athlete_Ppeak_rel
)

kbl(t(df), digits = 2) %>%
kable_classic(full_width = FALSE) %>%
pack_rows("Acceleration-Velocity Profile", 1, 5) %>%
pack_rows("Force-Velocity Profile", 6, 15)


 Acceleration-Velocity Profile MSS (m/s) 9.00 MAC (m/s/s) 8.00 TAU (s) 1.12 AV Slope -0.89 net PMAX (W/kg) 18.00 Force-Velocity Profile Weight (kg) 85.00 Height (m) 1.85 F0 (N) 680.00 rel F0 (N/kg) 8.00 V0 (m/s) 9.34 PMAX (W) 1588.19 rel PMAX (W/kg) 18.68 FV Slope -0.85 Ppeak (W) 1558.14 rel Peak (W/kg) 18.33

Table 1: Athlete characteristics

## Why FVP and not just AVP?

Why do we need Force-Velocity Profile (FVP) and not just Acceleration-Velocity Profile (AVP)? I should have addressed this question in the previous installments, but I think this is a good time for this interlude.

This is a great question to ask. In my instrumentalist viewpoint, they are both summaries of performance. But for someone taking realist stance, AVP is a summary of performance, while FVP is determinant of performance. In other words, FVP causes AVP. Thus, FVP reveals individual traits/qualities that are causes or determinants of performance. I do not succumb to such a viewpoint. Simply, if you cue someone with a small technique improvement, sprint performance will improve, and thus the FVP. I thus, believe both FVP and AVP are simply summaries of sprint performance, a NOT determinants.

But anyway, let us us “fuck-around-and-find-out” with a realist perspective using FVP as a cause of performance, summarized by AVP. Since FVP is estimated using AVP and body dimensions (weight and height) as well as air pressure, air temperature and wind velocity, we can reverse this, and use FVP as a generative model to estimate AVP from FVP (I will not bother you with math, but you can do it yourself by reading Samozino et al. (2022)). Under realist perspective, if my FVP is fixed (with some biological variation, but for this thought experiment, we will assume it is), then changes in air pressure, air temperature and wind velocity, but most notably in body weight, will affect my sprint performance (which is summarized by AVP).

Let us explore this by calculating effects of simulated changes in $F_0$, $V_0$ and body weight on the AVP (MSS and MAC parameters). These are depicted in Figure 1.

Show/Hide Code

model_sens_df <- data.frame(
F0 = athlete_F0,
V0 = athlete_V0,
BW = athlete_BW
) %>%
expand_grid(
increase = c("F0", "V0", "BW"),
factor = seq(80, 120)) %>%
mutate(
bodymass = athlete_BW,
increase = factor(increase, levels = c("F0", "V0", "BW")),
new_F0 = ifelse(increase == "F0", F0 * factor / 100, F0),
new_V0 = ifelse(increase == "V0", V0 * factor / 100, V0),
new_BW = ifelse(increase == "BW", BW * (factor / 100), BW)) %>%
mutate(data.frame(shorts:::convert_FV(new_F0, new_V0, bodymass = new_BW, bodyheight = athlete_height))) %>%
pivot_longer(cols = c(MSS, MAC), names_to = "param")

# Plot
ggplot(model_sens_df, aes(x = factor - 100, y = value, color = param)) +
theme_linedraw(8) +
geom_vline(xintercept = 0, linetype = "dashed") +
geom_line(alpha = 0.6) +
geom_dl(
aes(label = paste("  ", param)),
method = list("last.bumpup", cex = 0.5)
) +
facet_wrap(~increase) +
ylab(NULL) +
xlab("Parameter Improvement (%)") +
theme(legend.position = "none") +
xlim(-20, 27.5)



Figure 1: Using FVP as generative model and estimating effects of change in parameters on the sprint performance summarized with AVP

Interesting finding of this thought experiment (also a form of sensitivity analysis or “fuck-around-and-find-out”) in Figure 1, is that, assuming $F_0$ and $V_0$ being causal qualities/traits independent of body weight, changing body weight will not influence MSS, or maximum achievable sprinting speed. This is a normal conclusion of such a realist perspective using map as a territory, but little bit of common-sense and research (of which I am not currently aware of) can bring this into question. For example, if I attach 10% of body weight in a form of a weighted vest, ankle or wrist weight, or frictionless sled, I am pretty sure that the (1) estimated MSS will definitely not be the same, and (2) estimated FVP for that loaded performance will also be different. This simple “fuck-around-and-find-out” in the Large World (a.k.a., experiment) breaks the realist assumptions of the FVP being determinant of performance. If it was determinant or a causal mechanism, then predictions from the “fuck-around-and-find-out” in the Small World (Figure 1) would be found the be true in the Large World. I am not aware of any research doing this type of analysis, but here is a potential topic for a research paper or even PhD – well maybe I can do this?

We can thus get back to real life and accept that FVP nor $P_{max}$ are not some magical determinants we need to focus on (e.g., plenty of research on finding loads that maximize power, yada yada yada), but results of performance itself. Let’s get back to our sensitivity analysis in the Small World.

## Optimization of the Force-Velocity Profile

Using exactly the same probing method we have done in the previous installment using the AVP, and our athlete from Table 1, we can now perform sensitivity analysis of the model (i.e., map) by changing $F_0$, $V_0$, and body weight to check the effects on model predicted split times. The results are depicted in Figure 2. Please note that improvement in body weight mean reducing body weight for enlisted percentage.

Standard Membership

regular price $35 NOW$24/ first month

OR

regular price $350 NOW$245/ first year