Sanjao sam sfingu koja daje proročanstva i mogao sam postaviti jedno pitanje. Pitao sam: kada će na Blogaritmu ponovno osvanuti nešto normalno, matematičko? Sfinga je odgovorila: hokus pokus, bogovi su odlučili, to će biti danas!
Ovo je nastavak objave Koliko sam dobro trčao? (prvi dio) u kojoj sam pitao:
Ako sam pretrčao S metara u T sekundi, koliko sam uspješno trčao?
I evo, tijekom ovog sunčanog vikenda riješio sam taj problem.
Nakon što sam pri kraju te objave zaključio da je uspjeh dobro računati kao kombinaciju doprinosa prijeđenog puta i prosječne brzine
, te u međuvremenu kratkim istraživanjem po webu shvatio da je riječ o približno eksponencijalnom odnosu, odlučio sam da formula treba biti umnožak oblika:
s parametrima i
takvima da se iznos kreće od 0 do 100 – pri čemu bi svjetski rekord dao rezultat 100. Da bismo izračunali dotične parametre, valja pogledati te svjetske rekorde – osim sprinteva (
) u kojima su principi malo drugačiji. Ako je, recimo,
jedan konkretan rekord, onda treba vrijediti:
.
Ako u matricu po redcima stavimo parove
za sve promatrane svjetske rekorde, iz gornjih jednadžbi dobivamo preodređeni sustav jednadžbi:
,
čije najpreciznije rješenje u smislu najmanjih kvadrata dobivamo na sljedeći način:
.
Konačno, formula za uspjeh trčanja (na osnovi liste svjetskih rekorda danih u donjem kodu), ako je izražen u metrima, a
u metrima po sekundi, ispada približno:
Primjerice, ako sam pretrčao 5 kilometara () u 25 minuta (
), uspjeh ispada
od mogućih 100. Prilično loše, hahaha!
Ispod je kod u Pythonu. Pokrenete li ga, vidjet ćete da formula nije potpuno precizna: uspjesi svjetskih rekordera kreću se između 97 i 103.
EDIT: Kao što sam shvatio nakon Vekyjevog komentara, bolje je uzeti logaritam ove formule (i pomnožiti ga s 50 da skala opet bude 100) jer brojevi tako djeluju realnije. Uz logaritam po bazi 10 formula je, dakle, 7 log S + 90 log V. Rezultat mog gornjeg primjera onda ispada 72.9, što je mnogo bolje nego prije. Životna lekcija: ako ne možeš promijeniti sebe, promijeni formulu kojom se vrednuješ.
#!/usr/bin/python3
from math import log
import numpy as np
csv = "1000,no,131.96,male,track,Noah Ngeny,1999-09-05\n\
1500,yes,206.00,male,track,Hicham El Guerrouj,1998-07-14\n\
1609.344,no,223.13,male,track,Hicham El Guerrouj,1999-07-07\n\
2000,no,284.79,male,track,Hicham El Guerrouj,1999-09-07\n\
3000,no,440.67,male,track,Daniel Komen,1996-09-01\n\
5000,yes,757.35,male,track,Kenenisa Bekele,2004-05-31\n\
10000,yes,1577.53,male,track,Kenenisa Bekele,2005-08-26\n\
10000,no,1604,male,road,Leonard Patrick Komon,2010-09-26\n\
15000,no,2473,male,road,Leonard Patrick Komon,2010-11-21\n\
20000,no,3386,male,track,Haile Gebrselassie,2007-06-27\n\
20000,no,3321,male,road,Zersenay Tadese,2010-03-21\n\
21097.5,no,3503,male,road,Zersenay Tadese,2010-03-21\n\
21285,no,3600,male,road,Haile Gebrselassie,2007-06-27\n\
25000,no,4345.4,male,track,Moses Mosop,2011-06-03\n\
25000,no,4310,male,road,Samuel Kosgei,2010-05-09\n\
30000,no,5207.4,male,track,Moses Mosop,2011-06-03\n\
30000,no,5257,male,road,Peter Cheruiyot Kirui,2011-09-25\n\
42195,yes,7418,male,road,Patrick Makau,2011-09-25"
x = []
y = []
for row in csv.split('\n'):
data = row.split(',')
s, t = float(data[0]), float(data[2])
v = s / t
x.append([np.log10(s), np.log10(v)])
y.append(2)
x = np.array(x)
y = np.array(y)
beta, gamma = np.linalg.inv(x.T @ x) @ x.T @ y
print(beta, gamma)
for row in csv.split('\n'):
data = row.split(',')
s, t = float(data[0]), float(data[2])
v = s / t
print(s**beta * v**gamma)
Pretrčao sam polumaraton, 21170m, u 2 sata i 26 minuta.
21170^0.14*2.42^1.81<20. Jesam li stvarno toliko manje uspješan nego ti s 5km u 25 minuta? :]
Sviđa mi seSviđa mi se
Ili poboljšaj formulu ili se malo više potrudi.
Sviđa mi seSviđa mi se
Heh, ja znam što je _meni_ lakše. 😅
Ali možda ti poželiš pretrčati polumaraton nekad. 😉
Sviđa mi seSviđa mi se
Ali da, treba uzeti logaritam, onda su razlike manje a i bliže smo maksimumu.
Sviđa mi seSviđa mi se
Evo ažurirao sam objavu gore.
Sviđa mi seSviđa mi se