Pavel Stránský
Contact: Contact
Česky English
Last updated: 31.3.2025
Všechny cykly cvičení
2018-2019
2019-2020
2020-2021
2021-2022
2022-2023
2023-2024
2024-2025

Použití počítačů ve fyzice (NOFY 084)

Akademický rok 2024-2025

Rozvrh cvičení

Výuka probíhá prezenčně v pondělí 16:30 - 18:00, počítačová učebna N10, Impakt, Troja.

Cíl cvičení

Účelem cvičení je pohrát si s jednoduchými fyzikálními problémy, vyzkoušet si různé způsoby jejich řešení (i triviální řešení je řešení) a naučit se analzyovat a zobrazovat obdržené výsledky. Většina příkladů bude demonstrována v populárním programovacím jazyce Python, ale dojde i na základy psaní textů v LaTeXu a úvod do použítí komerčního nástroje Mathematica. V průběhu cvičení se také naučíte základy verzovacího systému Git a základy práce v týmu. Oficiální informace k předmětu jsou na stránce SISu.

Ve cvičení nebude probíhat systematická výuka žádného programovacího jazyka ani numerických algoritmů. Pro prohloubení znalostí doporučuji specializované přednášky na oboru fyzika, například

NOFY078 - Programování a zpracování dat v Pythonu
NOFY082 - C++ pro fyziky
NOFY083 - Fortran pro fyziky
NOFY085 - Úvod do programování v prostředí MATLAB, Octave a Scilab
NOFY086 - Programování v IDL - zpracování a vizualizace dat
NTMF048 - Použití systémů počítačové algebry ve fyzice
NEVF523 - Numerické metody počítačové fyziky
NJSF081 - Software a zpracování dat ve fyzice částic
NPRF006 - Pokročilé metody programování
NFPL061 - Strojové učení ve fyzice
(přednášky s kódem NOFYxxx patří mezi povinně volitelné ze skupiny programování) a další přednášky na oboru informatika.

Co se bude probírat

Fyzika, matematika, numerika, algoritmy

  • Řešení diferenciálních rovnic, řešení pohybových rovnic
  • Fitování, aproximace, optimalizace
  • Náhodná čísla, náhodné procházky, metoda Monte-Carlo
  • Lineární algebra, spektrální rozklad matic
  • Fourierova transformace
  • Práce s algebraickými výrazy, symbolické manipulace, program Mathematica

Techniky

  • Python, Mathematica
  • Správa verzí, Git, GitHub
  • Úvod do obsluhy událostí
  • Úvod do paralelního programování
  • Psaní odborného textu v LaTeXu

Uvedený seznam není závazný. Jelikož se jedná o volitelný předmět, lze témata přizpůsobit přáním a schopnostem účastníků kurzu.

Zápočet

Klasifikovaný zápočet bude udělen za splnění jednoho ze dvou následujících počinů.
  • Včas odevzdané odladěné domácí úlohy.
  • Vytvoření vlastního programu.

Zápočet za domácí úlohy

Na cvičeních budeme probírat uzavřená témata, v rámci kterých společně napíšeme krátké programy. Po dokončení tématu zadám ještě doplňující úkoly na doma, které budou procvičené téma rozšiřovat. Za odladěný a správně a srozumitelně napsaný program odevzdaný nejpozdějí do následujícího cvičení získáte 10 bodů. Za později odevzdaný úkol lze získat maximálně 5 bodů.

Úkoly odevzdávejte před modul Studijní mezivýsledky v SISu, nebo přes nasdílený repozitář na GitHubu.

Známka klasifikovaného zápočtu bude určena na základě následujícího klíče za předpokladu, že bude zadáno 10 domácích úkolů (b je celkový získaný počet bodů):

b≥801 (výborně)
60≤b<802 (velmi dobře)
40≤b<603 (dobře)

Zápočet za vlastní program

Pokyny k vypracování

  • Naprogramujete řešení nějakého fyzikálního problému, který si zvolíte podle svých vlastních zájmů a zálib. Program by neměl být totožný s těmi, za které jste (byli, budete) klasifikováni v jiných předmětech, a neměl by být kopií nebo triviální úpravou programů běžně dostupných na webu.
  • Programovat nemusíte v Pythonu, ale je nutné, aby byl program čitelný a spustitelný pomocí veřejně dostupných nástrojů nebo pomocí nástrojů, ke kterým má naše fakulta licenci.
  • Program by měl obsahovat stručnou dokumentaci popisující, jaké metody či algoritmy jste použili, co program počítá, jak se spouští a jak se ovládá. Alternativně je možné se domluvit, že mi osobně nebo online program představíte.
  • Program lze vypracovávat jednotlivě nebo ve skupině. V případě skupinového programu musí být zřejmé, kdo se na které části podílel (například použitím vhodného verzovacího systému).
  • Doporučuji, abyste se mnou náplň zápočtového programu konzultovali, než se pustíte do práce.

Vypracování vlastního programu vždy povede na známku 1 (výborně).

Termín

Doporučuji vypracovat a odevzdat zápočtovou práci ještě před letními prázdninami. Nejzazší termín odevzdání je 7.9.2025, aby bylo dost času opravit případné nedostatky.

Programovací jazyky a vývojové prostředí

Ačkoliv převážná část předmětu bude demonstrována příklady v programovacím jazyce Python 3 a vývojovém prostředí Visual Studio Code, rozhodně není nutné, abyste úkoly nebo zápočtové programy vypracovávali pomocí stejných nástrojů. Zvolte si sami, jaký jazyk či vývojové prostředí jsou vám sympatické. Obecně doporučuji takové programovací jazyky, které mají dobrou podporu, jsou živé a ideálně pro které existují kvalitní numerické knihovny a knihovny pro vykreslování grafů. Sám jsem zběhlý v jazycích C/C++, C#, Python, Julia, Mathematica, PHP, Javascript, SQL; v nich vám budu schopen nejsnáze poradit a pomoci, pokud budete potřebovat.

Poznámky ke cvičení

Během dálkové výuky v době koronavirové pandemie jsem sepsal studijní text, jehož součástí jsou i vzorově vypracované úlohy dostupné v repozitáři na GitHubu. Velké části témat z textu se budeme věnovat i letos, a proto lze brát tento text jako studijní materiál.

Probraná látka

1. cvičení 17.2.2025 Úvod, organizace cvičení
Logistické (populační) zobrazení
2. cvičení 24.2.2025 Bifurkační diagram logistického zobrazení
docstring
instalace knihoven
progress bar alive-progress
Domácí úkol na 3.3.2025
3. cvičení 3.3.2025 Náhodná rozdělení, histogram
centrální limitní věta
generování výběru z normálního rozdělení
generování výběru z rozdělení se zadanou hustotou
Domácí úkol na 10.3.2025
4. cvičení 10.3.2025 Úvod do verzování pomocí Git
git init, add, commit, status, log, branch
vše demonstrováno na příkladu z předchozího cvičení
5. cvičení 17.3.2024 Metoda Monte-Carlo
Integrace Monte-Carlo
Domácí úkol na 24.3.2025
6. cvičení 24.3.2024 Paralelizace
github a vzdálené repozitáře git remote, push, pull, clone
Fork, Pull request
Domácí úkol na 31.3.2025
7. cvičení 31.3.2024 MFF cluster Chiméra (návod, login)
8. cvičení 7.4.2024 Řešení obyčejných diferenciálních rovnic
Eulerova metoda
Runge-Kutta metoda
symplektické metody

Literatura

Na webu existuje nepřeberné množství tutoriálů a návodů k Pythonu a jeho knihovnám, které vám pomůžou s konkrétními problémy. Odpovědi najdete na diskuzních fórech (např. Stack Overflow) nebo dotazem na chatbot, např. Claude, ChatGPT, Gemini, Microsoft Copilot...

Pokročilejší monografie, v nichž naleznete seriózní příklady využití programovacího jazyka Python ve vědě:

[1]P.R. Turner, T. Arildsen, K. Kavanagh, Applied Scientific Computing With Python (Springer 2018)
[2]R. Johansson, Numerical Python: Scientific Computing and Data Science Applications with Numpy, SciPy and Matplotlib (Springer 2019)
[3]S. Nagar, Introduction to Python for Engineers and Scientists (Springer 2018)
[4]S. Lynch, Dynamical Systems with Applications using Python (Springer 2018)
[5]B.J. Korites, Python Graphics: A Reference for Creating 2D and 3D images (Springer 2018)

Algoritmy obecně:

[6]M. Mareš, T. Valla, Průvodce labyrintem algoritmů (CZ.NIC 2022)

Náhodně vybrané (ale zajímavé) eseje k programování obecně:

[7]S. Wolfram, What Is ChatGPT Doing... and Why Does It Work? (2023)
[8]I. Suzdalnitski, Object-Oriented Programming - The Trillion Dollar Disaster (2019)
[9]Ch. Scalfani, Goodbye, Object Oriented Programming (2016)

Konzultace

Pokud se chcete na cokoliv zeptat nebo si potřebujete něco vyjasnit, stavte se na konzultaci.