část C11–C16
Má-li empirická funkce y = f(x) omezený rozsah funkčních hodnot, takže ymin < y < ymax, je možné sestrojit funkci hustoty hodnot y a Abbottovu křivku této funkce následujícím způsobem:
Všechny tyto operace a grafické zobrazení výsledků provede následující program.
DATA 5,5,6,8,10,14,18,23,28,32,35,37,39,40,40,38,37,37,38,39,41
DATA 44,48,51,54,55,55,51,46,38,31,28,26,25,24,20,13,10
ma = 0: mi = 100000!: CLS
a:
READ y: ON ERROR GOTO v
IF y > ma THEN LET ma = y
IF y < mi THEN LET mi = y
n = n + 1: GOTO a
v:
INPUT "počet úrovní "; m
RESTORE: DIM u(m), s(m): d = (ma – mi) / m
FOR i = 1 TO n
READ y: a = (y – mi) / d
u(a) = u(a) + 1: NEXT i
FOR i = m – 1 TO 0 STEP -1
s = s + u(i): s(i) = s
LPRINT i, u(i), s(i): NEXT i
SCREEN 10: CLS: KEY OFF
LINE (20, 20)-(20, 300)
LINE (350, 20)-(350, 300)
LINE (500, 20)-(500, 300)
LINE (20, 300)-(640, 300)
RESTORE
dx = 330 / n: du = 15: su = 2.5
my = 200 / (ma – mi): mh = my * ma / (m + 1)
FOR i = 0 TO n – 1
READ y: CIRCLE (20 + i * dx, 300 – (y – mi) * my), 2
NEXT i:
FOR i = 1 TO m
CIRCLE (350 + u(i) * du, 300 – i * mh), 2, 9
CIRCLE (500 + s(i) * su, 300 – i * mh), 2, 12
NEXT i
END
úroveň | počet | součet |
---|---|---|
9 | 3 | 3 |
8 | 2 | 5 |
7 | 8 | 13 |
6 | 4 | 17 |
5 | 4 | 21 |
4 | 4 | 25 |
3 | 2 | 27 |
2 | 2 | 29 |
1 | 3 | 32 |
0 | 3 | 35 |
V cyklických sportech existuje řada veličin (síla, rychlost, rychlení atd.), jejichž časový průběh je téměř periodický a lze jej změřit. Získaná křivka je téměř periodická, protože se opakuje s periodou T a její tvar se opakuje s pravidelností, úměrnou výkonnosti sportovce. Proto je cennou informací o sportovní technice, a výsledky analýzy takové křivky dovolují srovnávat techniku sportovců exaktním způsobem.
Analýzou periodických křivek se zabýval francouzský matematik Fourier (1786–1830), který zjistil, že libovolný periodický průběh lze popsat trigonometrickou řadou
kde
a0 stálá složka y (aritmetický průměr všech hodnot y)
ω = 2p/T základní úhlová rychlost
T trvání jedné periody
a1 … an amplitudy jednotlivých harmonických složek
f1 … fn fázové úhly jednotlivých harmonických složek
Tzv. Fourierova analýza je vlastně výpočet amplitud a fázových úhlů ze souřadnic y, získaných vzorkováním křivky v dostatečně malých pravidelných odstupech. Tento výpočet provedeme následujícím programem, který fázové úhly normuje tak, aby f1 = 0.
Nakonec program nakreslí vektorový diagram harmonických složek který dovoluje snadnější srovnávání jednotlivých sportovců. Diagram můžeme vytisknout klávesou PrtSc.
DATA.25,1.4,2,3,3.3,3,2.4,2.1,2.2,2.8,3.4,4.05,3.8,3.3
DATA 2.7,2.6,2.65,2.85,3,2.6,2,1.5,1.2,1.15
INPUT "jméno,datum,disciplina "; n$, d$, c$: LPRINT n$, d$, c$: LPRINT
DIM y(50), c(25), f(25): s = 0: n = 1: pi = 3.14159265#
a:
READ y(n): ON ERROR GOTO b
s = s + y(n): n = n + 1: GOTO a
b:
n = n – 1: c0 = s / n
LPRINT "c0="; c0: LPRINT
d = 2 * pi / n: h = 0
c:
a = 0: b = 0: e = 0: h = h + 1
FOR i = 1 TO n
a = a + y(i) * COS(h * e)
b = b + y(i) * SIN(h * e)
e = e + d: NEXT i
v = SQR(a * a + b * b)
IF b = 0 THEN LET u = pi / 2 * SGN(a): GOTO d
u = ATN(a / b) – pi * (b < 0)
d:
c(h) = 2 * v / n: f(h) = u
LPRINT "c,f"; h; "="; c(h), f(h) * 180 / pi
IF h < n / 2 – 1 THEN GOTO c
LPRINT: LPRINT "redukce fází na f(1)=0"
FOR h = 2 TO n / 2
f(h) = f(h) – h * f(1)
e:
IF f(h) < 0 THEN f(h) = f(h) + 2 * pi: GOTO e
f(h) = f(h) – 2 * pi * INT(f(h) / (2 * pi))
LPRINT "f("; h; ")="; f(h) * 180 / pi
NEXT h: f(1) = 0: LPRINT
LPRINT "modrá = 1"
LPRINT "zelená = 2"
LPRINT "tyrkys = 3"
LPRINT "červená = 4"
LPRINT "fialová = 5"
LPRINT "hnědá = 6"
LPRINT "bílá = 7"
LPRINT "šedá = 8"
SCREEN 9: CLS
FOR h = 1 TO n / 2
LINE (100, 160)-(100 + c(h) * 400 * COS(f(h)), 160 – c(h) * 400 * SIN(f(h))), h
NEXT h
END
V předchozí kapitole jsme popsali harmonickou analýzu křivky, dané libovolným počtem vzorků pro jednu periodu. Pro velký počet vzorků by trvala harmonická analýza dlouho, a proto byla objevena tzv. rychlá Fourierova transformace (FFT – Fast Fourier Transform). Na rozdíl od předchozí analýzy vyžaduje, aby počet vzorků byl 2n, kde n je celé číslo, tedy 22 = 4, 23 = 8, 24 = 16, 25 = 32, 26 = 64 atd. Splňuje-li počet vzorků tuto podmínku, je možno použít rychlou Fourierovu transformaci k výpočtu harmonických složek původní periodické funkce. Existují dvě možnosti:
Způsob, kterým se zpracují prvky matic při jejich násobení dovoluje použít součin dvou matic k rychlému výpočtu bodů z tabulky vítězství, remíz a porážek na příklad v kopané a hokeji. První matici tvoří tabulka vítězství, remíz a porážek, která má proto rozměr n × 3 pro n mužstev. Druhou matici tvoří jednosloupcový vektor 3 × 1, v němž jsou body za vítězství, remízu a porážku: 2, 1, 0.
vítězství | remízy | porážky |
2 1 0 |
body |
---|---|---|---|---|
17 | 3 | 5 | 37 | |
11 | 11 | 3 | 33 | |
13 | 5 | 7 | 31 | |
12 | 6 | 7 | 30 | |
13 | 4 | 8 | 30 | |
9 | 10 | 6 | 28 | |
11 | 6 | 8 | 28 | |
9 | 5 | 11 | 23 | |
6 | 5 | 11 | 21 | |
8 | 5 | 12 | 21 | |
9 | 3 | 13 | 21 | |
6 | 8 | 11 | 20 | |
3 | 8 | 14 | 14 | |
3 | 7 | 15 | 13 |
DATA 17,3,5
DATA 11,11,3
DATA 13,5,7
DATA 12,6,7
DATA 13,4,8
DATA 9,10,6
DATA 11,6,8
DATA 9,5,11
DATA 6,5,11
DATA 8,5,12
DATA 9,3,13
DATA 6,8,11
DATA 3,8,14
DATA 3,7,15
DATA 2,1,0
INPUT "r1,s1=r2,s2 "; m, n, l
DIM a(m, n), b(n, l), c(m, l)
FOR i = 1 TO m: FOR j = 1 TO n
READ a(i, j): NEXT j: NEXT i
FOR i = 1 TO n: FOR j = 1 TO l
READ b(i, j): NEXT j: NEXT i
FOR k = 1 TO m: FOR j = 1 TO l: s = 0
FOR i = 1 TO n: s = s + a(k, i) * b(i, j): NEXT i
c(k, j) = s: NEXT j: NEXT k
FOR k = 1 TO m: FOR j = 1 TO l
PRINT c(k, j);: NEXT j: PRINT: NEXT k
END
Vidíme, že za matici vítězství, remíz a porážek je připsán vektor bodů 2,1,0. Po spuštění programu vložíme r1,s1=r2,s2 14,3,1 a ENTER dá výsledek.
Biomechanická analýza sportovního pohybu může vést ke vzniku matematického modelu a ten může dát tzv. pohybovou rovnici.
Pokud taková rovnice obsahuje dráhu, rychlost, zrychlení nebo síly či jiné mechanické veličiny, jde o diferenciální rovnici, protože jmenované veličiny jsou k sobě ve vztahu proměnné a některých jejích derivací. Řešením takové rovnice není kořen, ale funkce, která dosazena do této rovnice spolu s příslušnými derivacemi tuto rovnici splňuje.
Řešení diferenciálních rovnic může být někdy snadné, jindy obtížné nebo dokonce nemožné, snažíme-li se rovnici řešit analyticky, obecně, ve tvaru funkce. Existuje ale ještě další metoda řešení, které nazýváme číselné (numerické), protože dává číselné tabulky hodnot proměnných nezávislých i závislých. Existuje řada metod numerického řešení diferenciálních rovnic, z nichž asi nejznámější a nejpropracovanější jsou metody dvou německých matematiků Rungeho (1895) a Kutty (1901). Ti navrhli různě komplikované a přesné metody pro různé typy rovnic. Jejich výhodou je, že mohou vyřešit i rovnice, analyticky neřešitelné.
Ukážeme si na příkladu splývání plavce po obrátce vznik, řešení a výsledky diferenciální rovnice analytické, pak uvedeme program pro numerickou integraci diferenciální rovnice II. řádu (s druhou derivací) metodou Runge – Kutta 4. řádu (se 4 korekcemi). Srovnáním obou řešení uvidíme, že numerické řešení dosahuje velmi vysoké přesnosti.
Příklad: plavec po obrátce se odrazí a vzdaluje se od stěny počáteční rychlostí v0. Ještě než začne aktivně plavat, překonává odpor Fo = k.v2, a zpomaluje se se zpomalením a. Proto vzniká setrvačná síla Fs = m.a. Podle principu akce a reakce musí být tyto vodorovné síly v rovnováze, takže platí pohybová rovnice sil
Dosazením
Odvodíme-li rychlost v a zpomalení a od dráhy y jako derivace podle času, bude rovnice
To je diferenciální rovnice 2. řádu, protože obsahuje druhou derivaci dráhy podle času:
Dosazením
Můžeme separovat proměnné na obě strany rovnítka
integrací
Pro t = 0 je v = v0, takže integrační konstanta c = 1 / v0, a rovnice bude
a rychlost
S tímto vzorcem můžeme počítat časový průběh rychlosti v(t), známe-li odpor vody Fo při některé rychlosti v, protože z nich můžeme stanovit k = Fo / v2 · Z rovnice (7) bude
dostaneme po separaci proměnných další integrací
Tento výraz dovoluje počítat usplývanou dráhu. Obě veličiny, dráhu a rychlost, analyticky vyjádřené jako funkce času můžeme srovnat s výsledky numerického řešení rovnice (4), provedeného následujícím programem pro metodu Runge – Kutta.
INPUT "x0,y0,y!0,h="; x0, y0, z0, h
INPUT "xmax="; xm
a:
x = x0: y = y0: z = z0
GOSUB fun: k1 = h * f: PRINT x, y, z, f
x = x0 + h / 2
y = y0 + z0 * h / 2 + k1 * h / 8
z = z0 + k1 / 2
GOSUB fun: k2 = h * f
z = z0 + k2 / 2
GOSUB fun: k3 = h * f
x = x0 + h
y = y0 + z0 * h + k3 * h / 2
y = y0 + k3
GOSUB fun: k4 = h * f
x0 = x
y0 = y0 + h * (z0 + (k1 + k2 + k3) / 6)
z0 = z0 + (k1 + 2 * (k2 + k3) + k4) / 6
IF x < xm THEN GOTO a
END
fun:
f = -z * z / 3
RETURN
END
t | x(anal] | x(numer] | v(anal) | v(numer) | a(anal) | a(numer) |
---|---|---|---|---|---|---|
0 | 0 | 0 | 4 | 4 | -5,333333 | -5,333333 |
0,1 | 0,3754894 | 0,3754815 | 3,529412 | 3,529416 | -4,152248 | -4,152258 |
0,2 | 0,7091662 | 0,709154 | 3,157895 | 3,157900 | -3,324100 | -3,324111 |
0,3 | 1,009417 | 1,009403 | 2,857143 | 2,857148 | -2,721088 | -2,721099 |
0,4 | 1,282332 | 1,282317 | 2,608696 | 2,608701 | -2,268432 | -2,268440 |
0,5 | 1,532477 | 1,532461 | 2,4 | 2,400000 | -1,92 | -1,920008 |
0,6 | 1,76336 | 1,763344 | 2,222222 | 2,222226 | -1,646090 | -1,646096 |
0,7 | 1,977737 | 1,977721 | 2,068965 | 2,068969 | -1,426872 | -1,426878 |
0,8 | 2,177811 | 2,177795 | 1,935484 | 1,935487 | -1,248699 | -1,248704 |
0,9 | 2,365372 | 2,365356 | 1,818182 | 1,818185 | -1,101929 | -1,101932 |
1,0 | 2,541893 | 2,541878 | 1,714286 | 1,714289 | -0,979592 | -0,979595 |
Působí-li na volné těleso o hmotnosti m proměnlivá síla F stálého směru, a můžeme-li tuto sílu zapsat ve stejně dlouhých intervalech času, dostatečně krátkých, můžeme přibližně řešit průběh zrychlení, rychlosti a dráhy pomocí jednoduchých diferenčních rovnic:
pomocí druhého Newtonova principu počítáme zrychlení a = F / m
pomocí zrychlení změněnou rychlost vi+1 = vi + a · Δt
pomocí rychlosti změněnou dráhu si+1 = si + v · Δt
Abychom dosáhli dostatečnou přesnost, měl by interval mezi sousedními silami, rychlostmi i drahami být kratší nežli 0,05 sek.
Všechny tyto výpočty provede program:
DATA F1,F2,F3,… FN
INPUT "hmotnost(kg),počát.rychlost(m/s),krok času(s)=";m,v,d
LPRINT m,v,d: LPRINT
LPRINT tab(7)"T"; tab(16)"F";tab(25)"A";tab(34)"V";tab(43)"S": lprint
V:
READ f: ON ERROR GOTO K
a=f/m: v=v+a*d: s=s*d: LPRINT USING "#####.###";t;f;a;v;s
t=t+d: GOTO V
K:
END
Technické řešení této výukové pomůcky je spolufinancováno Evropským sociálním fondem a státním rozpočtem České republiky.