Úvod do praktické fyziky NOFY055
Programování pro statistiku a zpracování měření v příkladech
Mgr. Jan Matoušek, Ph.D.
Výběr jazyka/prostředí:
python root
Zpět na hlavní stránku
Hello world program
Co je potřeba udělat, abych dostal nejjednoduší možný funkční program?
Vytvořím soubor test.py, obsahující:
print("Hello world!")
Program spustím z příkazového řádku:
user@machine:~$ python test.py
Hello world!
Proměnné, podmínka
Definice proměnných, jednoduchá operace, vypsání výsledku:
import numpy
n = 2
x = 3.5
print("n = " + str(n) + ", x = " + str(x))
y = n * x + 4
if y > 0:
z = numpy.sqrt(y)
print("y = " + str(y) + ", z = sqrt(y) = " + str(z))
else:
print("y = " + str(y) + ", z = sqrt(y) = není definováno")
Generování náhodných čísel
Generujeme 100 čísel s rovnoměrným rozdělením v intervalu (0,1):
import numpy
for i in range(100):
x = numpy.random.rand()
print(str(i) + "\t" + str(x))
Generování čísel do pole:
import numpy
N = 10
x = numpy.random.rand(N)
print(x)
print()
for i in range(N):
print(str(i) + "\t" + str(x[i]));
Graf
Jednoduchý graf funkce sin(2x):
import numpy
import matplotlib.pyplot as plt
N = 100
xMin = -numpy.pi
xMax = numpy.pi
dx = (xMax -xMin) / N
x = numpy.empty(N)
y = numpy.empty(N)
for i in range(N):
x[i] = xMin + dx * i
y[i] = numpy.sin(2*x[i])
plt.plot(x, y, 'o')
plt.xlabel("x")
plt.ylabel("y")
plt.show()
Histogram
Histogram reprezentuje distribuci nějaké numerické veličiny. Je to typ grafu, kde vertikální osa vyjadřuje četnost výskytu sledované veličiny v intervalech (binech) znázorněných na horizontální ose. Histogram uděláme následovně: Nejdřív rozdělíme rozsah dané veličiny na biny. Potom sledujeme danou veličinu v nějakém počtu případů a zaznamenáme, kolikrát leží ve kterém binu. Příklad vytvoření histogramu a jeho naplnění exponenciálně rozdělenou náhodnou veličinou:
import numpy
import matplotlib.pyplot as plt
N = 100
tau = 1
x = numpy.random.exponential(tau,N)
nBins = 10
plt.hist(x, nBins)
plt.xlabel("x");
plt.show()
plt.hist(x, nBins, range=(0, 5*tau))
plt.show()
n, bins, patches = plt.hist(x, nBins)
plt.show()
for i in range(nBins):
print("bin [" + str(bins[i]) + ", " + str(bins[i+1]) + ") případů: " + str(n[i]))
Zápis do souboru
Zapíšeme do souboru dvojice náhodných čísel:
import numpy
file = open("data.txt", "w")
for i in range(10):
x = numpy.random.normal(0,0.5)
y = numpy.random.normal(2.5,1)
file.write(str(x) + "\t" + str(y) + "\n")
file.close()
Čtení ze souboru
Následující program přečte textový soubor vytvořený v předchozím příkladě a spočítá průměr každého sloupce (odhad střední hodnoty rozdělení).
import numpy
mx = 0.0
my = 0.0
n = 0
file = open("data.txt", "r")
for line in file:
columns = line.split()
x = float(columns[0])
y = float(columns[1])
print("přečteno: " + columns[0] + "\t" + columns[1])
mx = mx + x
my = my + y
n = n + 1
file.close()
mx = mx / n
my = my / n
print("----------------------------------------")
print("průměrné x = " + str(mx) + ", průměrné y = " + str(my))
Výběr jazyka/prostředí:
python root
Zpět na hlavní stránku