Zapomeňte na e-shopy: Python umí modelovat realitu (2. díl) – co je gradient?
V minulém článku jsme si ukázali, co je pole a jak ho vizualizovat v Pythonu. Teď jdeme dál – pochopíme gradient, tedy jak se pole v prostoru mění a jak z něj číst informace o reálných jevech.
V předchozím článku jsme si ukázali, co je to pole a jak ho můžeme chápat i vizualizovat pomocí Pythonu. To byl ale jen první krok. Pokud chceme pole opravdu využít pro popis reality, potřebujeme jít dál – pochopit, jak se pole v prostoru mění a jak z něj číst informace o dějích, které probíhají kolem nás. Právě na to se zaměříme v tomto pokračování.

Zdrojový kód k článku:
- GitHub (zdrojový kód): https://github.com/Semtexcz/python-modeling-reality/blob/main/notebooks/vector_fields.ipynb
- Google Colab (spustit online): https://colab.research.google.com/drive/1r8G2HgYz01bzO_HKE1h8rg7QfiiMa4Wl?usp=sharing
Jak můžeme pole popisovat?
Zavedli jsme si pojem pole a ukázali jsme si dva základní typy: skalární pole a vektorové pole. Viděli jsme také, jak taková pole můžeme jednoduše vizualizovat pomocí Pythonu.
A co dál?
Pokud chceme pomocí matematiky modelovat reálné jevy, nestačí pole jen definovat. Musíme také umět popsat, jak se pole v prostoru mění, kde vznikají jejich maxima a minima, kde se koncentrují zdroje nebo kde dochází k proudění.
Abychom si tyto pojmy představili intuitivně, vraťme se na chvíli k příkladu počasí. Z předpovědi počasí pravděpodobně znáte pojmy jako tlaková výše, tlaková níže nebo teplá a studená fronta. Meteorologové jimi popisují právě strukturu různých polí v atmosféře – například pole tlaku, teploty nebo rychlosti větru.
Tlaková výše a níže například odpovídají místům, kde má pole tlaku lokální maxima nebo minima, zatímco fronty označují oblasti, kde se hodnoty polí rychle mění v prostoru.
V matematice existují nástroje, které nám umožňují tyto změny přesně popsat. Nejčastěji se používají tři základní operace nad poli: gradient, divergence a rotace. V následujících částech si ukážeme, co tyto pojmy znamenají a jak souvisejí s fyzikálními jevy, které známe z každodenního života.
Gradient
Představte si následující situaci. Jedete na kole. V prvním případě jedete po cyklostezce v Nizozemsku podél nějakého kanálu. Krajina je téměř dokonale rovná a změny nadmořské výšky jsou minimální. Ve druhém případě jedete v Italských Alpách a snažíte se vyšlapat legendární horský průsmyk Passo Stelvio.


Passo Stelvio a Nizozemská cyklostezka (zdroje obrázků v odkazech)
Na kterém z těchto míst bude nadmořská výška růst rychleji?
Otázka je samozřejmě řečnická. V Alpách budete stoupat mnohem prudčeji než na rovinaté nizozemské cyklostezce.
V matematice a fyzice bychom tuto situaci popsali pomocí gradientu. Gradient nám říká, jak rychle se nějaká veličina mění v prostoru a kterým směrem tato změna probíhá nejrychleji.
Pokud bychom nadmořskou výšku popsali jako skalární pole $h(x,y)$, pak by gradient tohoto pole ukazoval směr, ve kterém výška roste nejrychleji. Velikost gradientu pak říká, jak prudké toto stoupání je.
V našem příkladu tedy můžeme říct, že gradient nadmořské výšky ve směru jízdy je v Italských Alpách mnohem větší než na rovinaté cyklostezce v Nizozemsku. Právě proto se v Alpách nadřete mnohem více než na rovině.
Příklad s kolem nám dává dobrou intuici. Vidíme, že nadmořská výška se může v různých místech měnit různě rychle. Na rovině téměř vůbec, zatímco v horách může stoupat velmi prudce.
Teď si představte jinou situaci. Stojíte na svahu na lyžích a vaším cílem je dosáhnout co největší rychlosti. Musíte tedy zvolit takový směr, ve kterém je kopec nejprudší. Zkušení lyžaři by řekli, že se máte vydat po spádnici.
A co je vlastně spádnice?
Spádnice je směr, ve kterém nadmořská výška klesá (nebo roste, pokud jdeme opačným směrem) nejrychleji. Jinými slovy, je to směr největší změny nadmořské výšky v daném bodě svahu.
Právě tento směr popisuje v matematice gradient.
Pokud nadmořskou výšku zapíšeme jako funkci dvou proměnných
$$h(x,y)$$
pak gradient této funkce definujeme jako
$$\nabla h = \left(\frac{\partial h}{\partial x},\frac{\partial h}{\partial y} \right)$$
Tento zápis říká dvě věci zároveň. První složka popisuje, jak rychle se nadmořská výška mění ve směru osy $x$, druhá složka říká, jak rychle se mění ve směru osy $y$. Když tyto dvě informace spojíme dohromady, dostaneme vektor, který ukazuje směr nejrychlejšího růstu výšky – tedy přesně to, co jsme na svahu intuitivně nazvali spádnicí.
Gradient tedy převádí skalární pole (například pole nadmořské výšky) na vektorové pole, které v každém bodě ukazuje směr největší změny. Právě proto se gradient objevuje v mnoha fyzikálních zákonech – například při popisu proudění tepla, difuze látek nebo elektrického pole.
Python ukázka gradientu
Vrátíme se ke skalárnímu poli, které jsem již v článku použili $f(x, y) = x^2 + y^2$ a ukážeme si na něm jak spočítat gradient a zobrazit ho jako vektorové pole.
import numpy as np
import matplotlib.pyplot as plt
# vytvoření souřadnic
x = np.linspace(-2, 2, 40)
y = np.linspace(-2, 2, 40)
X, Y = np.meshgrid(x, y)
# definice skalárního pole
Z = X**2 + Y**2
# výpočet gradientu
dZdy, dZdx = np.gradient(Z)
# vizualizace
plt.contourf(X, Y, Z, 20, cmap="viridis")
plt.colorbar(label="Value")
plt.quiver(X, Y, dZdx, dZdy, color="white")
plt.title("Gradient of scalar field")
plt.show()

Co tento kód dělá
Nejprve vytvoříme mřížku bodů v rovině pomocí funkcí linspace a meshgrid.
X, Y = np.meshgrid(x, y)
Každý bod této mřížky má souřadnice ((x,y)).
Definice skalárního pole
Pak definujeme funkci
$$f(x,y) = x^2 + y^2$$
v Pythonu:
Z = X**2 + Y**2
Toto pole můžeme interpretovat například jako nadmořskou výšku kopce.
Výpočet gradientu
Gradient spočítáme pomocí funkce np.gradient.
dZdy, dZdx = np.gradient(Z)
Tato funkce vrací dvě pole:
- změnu ve směru (x)
- změnu ve směru (y)
tedy právě složky gradientu.
Vizualizace
Nejprve vykreslíme skalární pole jako barevnou mapu.
plt.contourf(X, Y, Z, 20)
Potom přes něj vykreslíme gradient pomocí šipek.
plt.quiver(X, Y, dZdx, dZdy)
Každá šipka ukazuje směr nejrychlejšího růstu funkce.
Co vidíme na obrázku
Výsledný obrázek ukazuje zajímavou vlastnost gradientu:
- všechny šipky míří od středu ven
- uprostřed je minimum funkce
To odpovídá intuici – pokud stojíme v nejnižším bodě „údolí“, nejrychleji začneme stoupat směrem ven od středu.
Výsledný obrázek není vizuálně úplně působivý, proto ho můžeme drobně upravit.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = X**2 + Y**2
dZdy, dZdx = np.gradient(Z)
plt.contourf(X, Y, Z, 30, cmap="terrain")
plt.colorbar(label="Elevation")
step = 6
plt.quiver(
X[::step, ::step],
Y[::step, ::step],
dZdx[::step, ::step],
dZdy[::step, ::step],
color="black",
scale=None, # vypne automatické škálování
width=0.004
)
plt.title("Gradient of scalar field (elevation)")
plt.xlabel("x")
plt.ylabel("y")
plt.show()
V tomto článku jsme udělali zásadní krok od pouhého „popisu“ pole k pochopení jeho změn. Ukázali jsme si, že gradient není jen abstraktní matematický pojem, ale velmi intuitivní nástroj, který říká, kam se vydat, pokud chceme, aby se sledovaná veličina měnila co nejrychleji. Ať už jde o stoupání na kole, směr spádnice na svahu, nebo tok tepla v materiálu, gradient nám vždy dává stejný typ informace: směr a velikost nejrychlejší změny.
Zároveň jsme viděli, že gradient převádí skalární pole na pole vektorové. Tím se dostáváme o úroveň výš – začínáme z pole „číst“ dynamiku a strukturu. A právě v tom spočívá síla matematického modelování: z jednoduché funkce dokážeme získat hluboký vhled do chování reálných systémů.
Gradient je ale jen první z trojice základních nástrojů. V dalším díle se podíváme na divergenci – operátor, který nám umožní odhalit zdroje a „vývěry“ v poli. Uvidíme, jak poznat, kde se něco hromadí, kde naopak mizí, a jak tento koncept souvisí například s prouděním tekutin nebo elektrickými poli.
Pokud chcete vidět celý obraz a jak to všechno zapadá dohromady, tady je kompletní článek:


