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!
Evo i koda u Pythonu. Pokrenete li ga, vidjet ćete da formula nije potpuno precizna: uspjesi svjetskih rekordera kreću se između 97 i 103.
#!/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)