Numerická derivace¶
příklad výpočtu rychlosti a zrychlení rovnoměrného pohybu kružnici numerickou derivací
importujeme knihovny numpy
(na numerické výpočty) a matplotlib
(na kreslení grafů)
import numpy as np
import matplotlib.pyplot as plt
Zadáme parametry pro rovnoměrný pohyb po kružnici:
$r$ je poloměr kruhové trajektorie
$T$ je perioda pohybu (tj. doba za kterou hmotný bod oběhne celou kružnici)
úhlová frekvence pohybu bude tedy $\omega = \frac{2\pi}{T}$
r = 1 #poloměr trajektorie 1 m
T = 1 #perioda pohybu 1 s
omega = 2 *np.pi/T #=uhlová frekvence
Zvolíme časový krok dt
pro výpočet numerické derivace
dt = T/1000 #časový krok pro numerický výpočet derivace (zde tisícina periody)
Vytvoříme pole t
obsahující časy, ve kterých chceme vypočítat souřadnice hmotného bodu, a souřadnice hmotného bodu, který se pohybuje rovnoměrným pohybem po kružnici
t = np.arange(0,T,dt) #pole časů
x = r*np.cos(omega*t) #x-ová souřadnice
y = r*np.sin(omega*t) #y-ová souřadnice
Rychlosti získáme v časech o dt/2
posunutých.
Vytvoříme si tedy ještě pole časů tv
, což jsou časy, ve kterých vypočítáme rychlosti.
Velikost pole tv
je o jedna měnší než pole t
, protože rychlosti počítáme v časech mezi časy, ve kterých máme souřadnice.
tv = np.empty(np.size(t)-1) #pole časů, ve kterých vypočítáme rychlosti
vx = np.empty(np.size(t)-1) #x-ová složka rychlosti
vy = np.empty(np.size(t)-1) #y-ová složka rychlosti
Numerický výpočet rychlostí
for i in range(1,np.size(t)):
tv[i-1] = t[i-1] + dt/2
vx[i-1] = (x[i] - x[i-1])/dt
vy[i-1] = (y[i] - y[i-1])/dt
obrázek trajektorie
fig,ax = plt.subplots(figsize=(6,6))
ax.plot(x,y)
ax.set_xlabel("x")
ax.set_ylabel("y")
plt.show()
graf časové závislosti souřadnic
plt.plot(t,x,label="x-ová souřadnice",c='blue')
plt.plot(t,y,label="y-ová souřadnice",c='red')
plt.xlabel("čas")
plt.ylabel("souřadnice")
plt.legend()
plt.show()
graf časové závislosti složek rychlosti
plt.plot(tv,vx,label="x-ová složka rychlosti",c='blue')
plt.plot(tv,vy,label="x-ová složka rychlosti",c='red')
plt.xlabel("čas")
plt.ylabel("rychlost")
plt.legend()
plt.show()
velikost rychlosti $v = \sqrt{v_x^2+v_y^2}$
plt.plot(tv,np.sqrt(vx**2+vy**2))
plt.xlabel("čas")
plt.ylabel("velikost rychlosti")
plt.ylim(0,10)
plt.show()