<jupyter_start><jupyter_text>Ez egy egyszerű példa hely-idő és sebesség-idő függvény számításra. Nem mindenütt a leghatékonyabb a megvalósítás, de Pythonban kezdőknek jobban érthető.<jupyter_code># alap beállítás és modulbetöltés
# beágyazott grafikonokhoz:
%matplotlib inline    

import numpy as np    
import matplotlib.pyplot as plt
# időértékek tömbje: t_max, dt időköz
dt=0.01
t_max=10.0
t_tab=np.arange(0.0, t_max, dt, dtype=np.float64)
print("Eleje:", t_tab[:5])
print("Vége: ", t_tab[-5:])
# definiálunk néhány hely-idő függvényt gyakorlási célból

# harmonikus rezgőmozgás
def xt_harm(t):  
    return(5*np.sin(3*t))

# csillapodó rezgőmozgás
def xt_csill(t):  
    return(5*np.sin(3*t)*np.exp(-0.2*t))

# egy nem igazi hely-idő függvény szakadással
def xt_szakad(t):
    if t<4:
        return(5*np.sin(t)+3)
    else:
        return(6*np.cos(t))
    
# egy oda-vissza mozgás
def xt_odavissza(t):
    return(5.0*np.exp(-(t-3)**2/(2*0.5**2)))

# egy kis változó frekvenciájú szinusz
def xt_frekvmod(t):
    fr=3.0+0.5*np.sin(t)
    return(5*np.sin(fr*t))
# létrehozzuk a hely-idő függvényértékek tömbjét
x_tab=np.vectorize(xt_csill)(t_tab)            # ez leszervezi helyettünk a ciklust is

print("Eleje: ", x_tab[:5])
print("Vége:  ", x_tab[-5:])
# most egy általános deriváló függvényt definiálunk, ami tömbökön működik
# a széleken egy oldali deriválttal, máshol centrális deriválttal közelít
# profibbak megoldhatják ezt elegánsan a NumPy vektorizáló műveleteivel

def deriv(xx_tab, ff_tab):  # itt 'xx' az általános 'x' változót jelöli, nem az 'x' helykoordinátát!
    N=xx_tab.shape[0]   # a tömb első dimenziója; hibakezelés nincs
    dff_dxx=np.zeros(N, np.float64)  # a deriváltak tömbje
    for i in range(N):
        if i==0:        # bal széle
            deriv=(ff_tab[1]-ff_tab[0])/(xx_tab[1]-xx_tab[0])
        elif i==N-1:    # jobb széle
            deriv=(ff_tab[N-1]-ff_tab[N-2])/(xx_tab[N-1]-xx_tab[N-2])
        else:          # közepe
            deriv=(ff_tab[i+1]-ff_tab[i-1])/(xx_tab[i+1]-xx_tab[i-1])
        dff_dxx[i]=deriv
    return(dff_dxx)<jupyter_output><empty_output><jupyter_text>$$\frac{d f}{d x}\approx \frac{f(x+\Delta x)-f(x-\Delta x)}{2\Delta x},\qquad \mbox{középső elemeken}$$$$\frac{d f}{d x}\approx \frac{f(x+\Delta x)-f(x)}{\Delta x},\qquad \mbox{bal szélén}$$$$\frac{d f}{d x}\approx \frac{f(x)-f(x-\Delta x)}{\Delta x},\qquad \mbox{jobb szélén}$$<jupyter_code>v_tab=deriv(t_tab, x_tab)  # most már egyszerű sebességet számolni
a_tab=deriv(t_tab, v_tab)  # most már a gyorsulás is könnyen jön
# rajzoljuk ki őket egymás alá
fig=plt.figure(figsize=(20,15))  # nagyobb rajzméret
ax1=fig.add_subplot(311) # három rész-grafikon
ax2=fig.add_subplot(312)
ax3=fig.add_subplot(313)
ax1.set_ylabel("x(t)")
ax1.plot(t_tab, x_tab, color="red") # az elsőbe az x(t)
ax2.set_ylabel("v(t)")
ax2.plot(t_tab, v_tab, color="green") # a másodikba a v(t)
ax3.set_ylabel("a(t)")
ax2.set_xlabel("t")
ax3.plot(t_tab, a_tab, color="blue") # a harmadikba az a(t)
ax1.grid()
ax2.grid()
ax3.grid()
# most jön a visszafelé számolás
# egyszerű, józan eszes integrálás. lehetne pontosabb is, pl. a Simpson-formulával

def integral(xx_tab, ff_tab, F0=0.0):
    N=xx_tab.shape[0]   # a tömb első dimenziója; hibakezelés nincs
    intff=np.zeros(N, np.float64)  # az integrál értékek tömbje
    intff[0]=F0
    for i in range(1,N):
        intff[i]=intff[i-1]+(xx_tab[i]-xx_tab[i-1])*(ff_tab[i]+ff_tab[i-1])/2.0
    return(intff)
# kipróbáljuk:

v0=15.0  # ez csak önkényes érték! lehet, hogy állítani kell rajta
uj_v_tab=integral(t_tab, a_tab, v0)
x0=0.0
uj_x_tab=integral(t_tab, uj_v_tab, x0)
fig=plt.figure(figsize=(20,15))  # nagyobb rajzméret
ax1=fig.add_subplot(313) # három rész-grafikon
ax2=fig.add_subplot(312)
ax3=fig.add_subplot(311)
ax1.set_ylabel("x(t)")
ax1.plot(t_tab, x_tab, color="red") # az elsőbe az x(t)
ax1.plot(t_tab, uj_x_tab, color="orange") # az elsőbe az x(t)
ax2.set_ylabel("v(t)")
ax2.plot(t_tab, v_tab, color="green") # a másodikba a v(t)
ax2.plot(t_tab, uj_v_tab, color="cyan") # a másodikba a v(t)
ax3.set_ylabel("a(t)")
ax2.set_xlabel("t")
ax3.plot(t_tab, a_tab, color="blue") # a harmadikba az a(t)
ax1.grid()
ax2.grid()
ax3.grid()
x_hiba=x_tab-uj_x_tab
print(x_hiba[0:10])
print(x_hiba[-10:])<jupyter_output>[-0.31933622 -0.31965772 -0.31997894 -0.32029989 -0.32062057 -0.32094097
 -0.3212611  -0.32158097 -0.32186354 -0.32199843]<jupyter_text>Most tegyünk rá egy kis zajt!<jupyter_code>a_zajos=a_tab + 2*np.random.uniform(-1,1,a_tab.shape)
fig=plt.figure(figsize=(20,5))  # nagyobb rajzméret
ax1=fig.add_subplot(111) 
ax1.plot(t_tab, a_tab, color="blue") 
ax1.plot(t_tab, a_zajos, color="red") 
ax1.set_ylabel("a(t)")
ax1.grid()

# kipróbáljuk: most a zajosból számolunk

v0=15.0  # ez csak önkényes érték! lehet, hogy állítani kell rajta
uj_v_tab=integral(t_tab, a_zajos, v0)
x0=0.0
uj_x_tab=integral(t_tab, uj_v_tab, x0)
fig=plt.figure(figsize=(20,15))  # nagyobb rajzméret
ax1=fig.add_subplot(313) # három rész-grafikon
ax2=fig.add_subplot(312)
ax3=fig.add_subplot(311)
ax1.set_ylabel("x(t)")
ax1.plot(t_tab, x_tab, color="red") # az elsőbe az x(t)
ax1.plot(t_tab, uj_x_tab, color="orange") # az elsőbe az x(t)
ax2.set_ylabel("v(t)")
ax2.plot(t_tab, v_tab, color="green") # a másodikba a v(t)
ax2.plot(t_tab, uj_v_tab, color="cyan") # a másodikba a v(t)
ax3.set_ylabel("a(t)")
ax2.set_xlabel("t")
ax3.plot(t_tab, a_tab, color="blue") # a harmadikba az a(t)
ax1.grid()
ax2.grid()
ax3.grid()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.16420361247947454, 'fraction_numerical': 0.05053822295201606, 'mean_word_length': 4.8568376068376065, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 12, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '457346', 'license': 'MIT', 'n_tokens_mistral': 2831, 'n_tokens_neox': 2774, 'n_words': 469, 'path': 'jupyter_python/kinematika_dinamika/tanar_pelda.ipynb', 'repo_name': 'Pecneb/Physics', 'size': '5481'}