Symbolical Computations (SyCo)
FU:TFNPF0001 – akademický navazující Mgr SP TFYZNM Teoretická fyzika (st. plán TFYPOFYNM Počítačová fyzika): 2/2/0, 6 kreditů, Zko
Garance / přednášky & cvičení: doc. RNDr. Stanislav Hledík, Ph.D.
Informace o kursu ● Výuka ● Hodnocení a zkoušení ● Literatura ● Odkazy a zdroje ● Často kladené dotazy
Anotace
Kurs seznamuje s principy Wolfram Language – symbolického jazyka založeného na “pattern-matching- and replacement/transformation-rule-based programming” a funkcionálním programování, a s jeho nástroji pro řešení úloh a problémů ve fyzice, matematice a příbuzných oblastech.
Sylabus
1. Praktický úvod do systému Mathematica
Spuštění a základní použití, prostředí Wolfram Mathematica, notebook, cell, základní syntax, nastavení preferencí. Postup při “ručních” výpočtech. Algebraické výpočty. Symbolická matematika. Numerická matematika. Vzory a přepisovací pravidla. Funkce a programy. Multimédia. Dynamické výrazy. Soubory a externí operace. —★— Viz též An Elementary Introduction to the Wolfram Language, 3rd Ed. Stephena Wolframa, The Wolfram Language: Fast Introduction for Programmers, Mathematica & Wolfram Language: Fast Introduction for Math Students, Resources for Software Developers.
Výraz (expression), hlavička (head), evaluace, vyhodnocení (evaluation). I. princip: vše je výraz (Everything Is an Expression). Výrazy normální a atomické, různé významy výrazů, speciální způsoby zadávání výrazů; hlavička (Head), kontrola atomičnosti (AtomQ), interní forma (FullForm), stromová forma (TreeForm); části výrazů (Part, [[]]); úrovně ve výrazech (Level). II. princip: porovnávání vzorů a nahrazování pomocí pravidel (Pattern-matching and Rule Substitution). Nahrazovací pravidla, funkce jsou ve skutečnosti pravidla, OwnValues, DownValues, SubValues; nekomutativita a automatické uspořádávání nahrazovacích pravidel. III. princip: pravidla evaluace výrazů (Expression Evaluation) standardní a nestandardní (Evaluate, Unevaluated, Hold, ReleaseHold, HoldFirst, HoldRest, HoldAll), lokální a globální přepisovací pravidla (Rule (->), RuleDelayed (:>), Set (=), SetDelayed (:=)). Restrikce vzorů pomocí Blank (_), BlankSequence (__), BlankNullSequence (___), Pattern (:), PatternTest (?), Condition (/;). —★— Aplikace na praktické problémy – mnohonásobná definice jedné funkce. Vedlejší efekty. —★— Viz též průvodce Wolfram Language Syntax a technické poznámky Operator Input Forms, Textual Input and Output, Everything Is an Expression, Parts of Expressions, Patterns and Transformation Rules, The Meaning of Expressions.
Seznamy (lists, List, {}), jejich generování (ručně, z menu, programaticky pomocí Range, PowerRange, Table, Array, ConstantArray, Map (/@)), měření (Length, Dimensions, Depth, ArrayDepth, VectorQ, MatrixQ, ArrayQ) a základní operace s nimi (Map (/@), Thread, MapThread, Through, Inner, Outer). Části seznamů a manipulace s nimi (Part ([[…]]) Span (;;), First, Last, Most, Rest, Take, Drop, TakeDrop, TakeWhile, LengthWhile, Pick). Vkládání a mazání elementů (Prepend, Append, PrependTo, AppendTo, Insert, ReplacePart, Delete, Riffle, PadLeft, PadRight, ArrayPad). Mazání duplikátů elementů (DeleteDuplicates, Union). Vyhledávání pozic (Position, Extract, Ordering). Seskupování a rozdělování (Flatten, FlattenAt, Partition, Split, SplitBy, Tally, Gather, GatherBy). Přeorganizování elementů (Transpose, Sort, SortBy, Union, Reverse, RotateLeft, RotateRight). Kombinatorické operace (Permutations, Subsets, Tuples). Vyhledávání elementů (Select, Cases, Count). Operace s více seznamy (Join, Catenate, Union, Intersection, Complement, SymmetricDifference). Obecnější operace (Map, MapAt, MapIndexed, MapAll (//@), Apply (@@), MapApply (@@@), ApplyTo (//=), Sequence, Splice, Thread, MapThread, Through). —★— Definice prakticky použitelných funkcí. Ryzí (anonymní, čisté, λ) funkce (Function (&, |->), Slot (#), SlotSequence (##)). —★— Viz též kapitoly Lists, Function Definitions, Pure Functions v online tutoriálu The Wolfram Language: Fast Introduction for Programmers.
4. Programování založené na porovnávání vzorů a nahrazovacích pravidlech
(Pattern-matching- and replacement/transformation-rule-based programming.) Základní vzory Blank (_), BlankSequence (__), BlankNullSequence (___) a přepisovací pravidla (Rule (->), RuleDelayed (:>), Set (=), SetDelayed (:=)), optimalizace seznamu pravidel (Dispatch). Test shody výrazů pomocí MatchQ, FreeQ, MemberQ. Prohledávání a vybírání výrazů pomocí Cases, FirstCase, DeleteCases, Count, Pick, Position, FirstPosition. Transformace výrazů pomocí Replace, ReplaceAll (/.), ReplacePart, ReplaceAt, ReplaceList, ReplaceRepeated (//.). Pojmenovávání vzorů: Pattern (:). Vzory s restrikcemi: omezení hlavičkou (argument Blank (_) apod.), omezení testem (predikátem, PatternTest (?)), omezení podmínkou (Condition (/;)). Proměnný počet argumentů: BlankSequence (__), BlankNullSequence (___). Implicitní (defaultní) hodnoty (Optional (_:e, _.), Default). Alternativní a opakované vzory (Alternatives (|), Repeated (..), RepeatedNull(...)). Výjimka (Except). Nejdelší a nejkratší sekvence (Longest, Shortest). Sekvence vzorů (PatternSequence, OrderlessPatternSequence, SequenceCases). —★— Vývoj uživatelských funkcí, lokalizace proměnných (With, Module, Block). —★— Viz též technické poznámky Applying Transformation Rules, Variables in Pure Functions and Rules a průvodce Rules & Patterns.
Základní paradigma funkcionálního programování: aplikace funkcí na data a jiné funkce (ty jsou brány jako data, a mohou být argumenty jiných funkcí). Srovnání s procedurálním programováním. Rodina mapujících funkcí Map (/@), MapAt, MapIndexed, MapAll (//@), Apply (@@), MapApply (@@@), ApplyTo (//=), MapThread, Scan. Rodina “proplétacích” funkcí Thread, MapThread, Threaded, Through, Inner, Outer, Distribute, Transpose. Rodina iteračních funkcí Nest, NestList, NestWhile, NestWhileList, Fold, FoldList, FoldPair, FoldPairList, SequenceFold, SequenceFoldList, FixedPoint, FixedPointList, TakeWhile, LengthWhile, ComposeList, Accumulate, Differences. Skládání funkcí: Composition (@*), RightComposition (/*). Dvojice “zasij-skliď”: Sow, Reap. Ukončení výpočtu: Throw, Catch, Return, Break, Continue, Abort. —★— Atributy funkcí, nápověda a kontrola syntaxe (Attributes, SetAttributes, ClearAttributes, Clear, ClearAll, Remove, SyntaxInformation). —★— Viz též průvodce Functional Programming a technickou poznámku Functional Operations.
6. Symbolické řešení rovnic, kalkulus, grafika a vizualizace
Řešení rovnic a nerovnic: Solve, SolveValues, Root, Reduce, RootReduce, FindInstance, AsymptoticSolve, Eliminate, SolveAlways, LinearSolve. Diferenciální počet: D, Dt, Derivative, DifferenceQuotient, Minimize, Maximize, Grad, Div, Curl, Laplacian, Asymptotic, Series, InverseSeries, Limit, FractionalD, Piecewise, PiecewiseExpand. Integrální počet: Integrate, AsymptoticIntegrate, LaplaceTransform, FourierTransform, Convolve, ArcLength, Area, Volume, MomentOfInertia. Obyčejné diferenciální rovnice: DSolve, DSolveValue, AsymptoticDSolveValue, WhenEvent, DEigensystem, DEigenvalues, GreenFunction. Variační metody: balík VariationalMethods, EulerEquations, VariationalD. 2D grafika a vizualizace: Graphics, Point, Line, Polygon, Text, Arrow, Disk, Circle, Rectangle, Raster, Show. 2D grafy: Plot, LogPlot, LogLinearPlot, LogLogPlot, ParametricPlot, ContourPlot. 3D grafika a vizualizace: Graphics3D, Sphere, Cuboid, Cylinder, Cone, Tube. 3D grafy: Plot3D, ParametricPlot3D, DensityPlot, SliceContourPlot3D, SliceDensityPlot3D, ComplexPlot3D. —★— Volby funkcí (Options, OptionsPattern, SetOptions, OptionValue, FilterRules). Ošetření chyb pomocí restrikce vzorů na levé straně i na pravé straně (Message, MessageName (::), On, Off, Quiet, Check), zblbuvzdornění (bulletproofing) funkcí. —★— Viz též průvodce Equation Solving, Calculus, Mathematical Functions, Matrices and Linear Algebra, Function Visualization.
7. Reprezentace čísel a aritmetika
Obecné prerekvizity: Binární, oktalová a hexadecimální soustava, reprezentace dat; přesná čísla – celá a racionální; simulace reálných čísel nepřesnými “floating-point” čísly s fixní přesností, jejich specifika a parametry; IEEE aritmetika FP čísel; numerické výpočty a jejich možné patologie, nástrahy a pasti.
Implementace čísel ve Wolfram Language: Přesná (celá a racionální) čísla: EvenQ, OddQ, Prime, PrimePi, NextPrime, PrimeQ, RandomPrime, PrimePower, CoprimeQ, PrimeOmega, PrimeNu, FactorInteger, Divisors, DivisorSigma, DivisorSum, Divisible, IntegerExponent, GCD, LCM, Quotient, Mod, PowerMod, QuotientRemainder, IntegerLength, IntegerDigits, FromDigits, DigitCount, IntegerPartitions, PartitionsP, … Reálná a komplexní čísla: N, Round, Floor, Ceiling, IntegerPart, FractionalPart, Chop, Rationalize, RealAbs, I, Re, Im,Conjugate, Abs, Arg, AbsArg, Infinity, ComplexInfinity, DirectedInfinity, Indeterminate, … Aritmetika reálných čísel: Precision, Accuracy, “fixed-precision” aritmetika s “machine-precision” čísly vs. “variable-precision” aritmetika s “arbitrary-precision” čísly, MachinePrecision, $MachinePrecision, $MachineEpsilon, $MaxMachineNumber, $MinMachineNumber, $MaxNumber, $MinNumber, SetPrecision, SetAccuracy, … Formátování čísel: NumberForm, DecimalForm, ScientificForm, EngineeringForm, AccountingForm, PaddedForm, … Volby numerických rutin: WorkingPrecision, PrecisionGoal, AccuracyGoal. —★— Viz též průvodce Numerical Evaluation & Precision a technické poznámky Numerical Operations on Functions, Numbers.
8. Numerické řešení rovnic, kalkulus, grafika a vizualizace
Řešení rovnic a nerovnic: NSolve, NSolveValues, NSum, FindRoot, FindMinimum, FindMaximum, NMinimize, NMaximize, Interpolation, InterpolatingFunction, … Diferenciální počet: DifferenceQuotient, DifferenceDelta, ListConvolve, … Integrální počet: NIntegrate, Fourier, … Obyčejné diferenciální rovnice: NDSolve, NDSolveValue, ParametricNDSolve, NDEigensystem, NDEigenvalues, …Parciální diferenciální rovnice: viz PDEModels Overview. Monitorování výpočtu: StepMonitor, EvaluationMonitor, Sow, Reap. 2D grafika a vizualizace: ArrayPlot, ReliefPlot, MatrixPlot, ListVectorPlot, ListStreamPlot, … 2D grafy: ListPlot, ListLogPlot, ListLogLinearPlot, ListLogLogPlot, ListPolarPlot, ListLinePlot, ListStepPlot, ListDensityPlot, ListContourPlot, ListCurvePathPlot, … 3D grafika a vizualizace: ArrayPlot3D, ListVectorPlot3D, ListStreamPlot3D, ListSliceVectorPlot3D, … 3D grafy: ListPlot3D, ListPointPlot3D, ListLinePlot3D, ListDensityPlot3D, ListContourPlot3D, ListSurfacePlot3D, … —★— Viz též technické poznámky Numerical Calculations, Numerical Equation Solving, Numerical Root Finding, Numerical Solution of Differential Equations.
9. Rekurentní výpočty a některé výpočetní triky
Indexované rekurence: f[expr1_]:=f[expr2] (f repeatedly calls itself), expr//.pattern:>value (a rule repeatedly applied), dynamické programování, RSolve, RSolveValue, AsymptoticRSolveValue, RecurrenceTable, FindLinearRecurrence; některé explicitní funkce jako Fibonacci, LucasL. Nastavení $RecursionLimit a $IterationLimit. Neindexované rekurence: funkcionální rovnice, iterativní procedury, hledání kořenů, Fold, FoldList; sledování pomocí Trace, TracePrint, TraceDialog. Stabilita numerických rekurencí. —★— Viz též průvodce Recurrence and Sum Functions a technickou poznámku Solving Recurrence Equations.
10. Externí operace, dynamické výrazy, optimalizace WL kódu
Souborové a adresářové operace lokální i vzdálené, persistentní soubory: viz průvodce File Operations. Import a export: viz průvodce Importing and Exporting. Webové operace: viz průvodce Web Operations. Interakce s externími programy: viz průvodce Calling External Programs. Dynamické výrazy a interaktivita: viz technické poznámky Introduction to Dynamic, Advanced Dynamic Functionality a průvodce Dynamic Interactivity Language. Optimalizace Wolfram Language kódu: viz průvodce Parallel Computing, GPU Computing. Psaní aplikací a balíčků (paclets): viz průvodce Package Development, tutoriály Contexts and Packages, Setting Up Wolfram Language Packages a průvodce Working with Paclets.
Geometrie: viz průvodce Geometric Computation. Práce s řetězci a textem: viz průvodce String Manipulation. Zpracování a analýza signálu: viz průvodce Signal Processing. Zpracování a analýza obrazu: viz průvodce Image Processing & Analysis. Vědecká a medicínská data a výpočty: viz průvodce Physics & Chemistry: Data and Computation, Astronomical Computation & Data, Scientific Data Analysis, Units & Quantities. Kompletní přehled oblastí pokrytých Wolfram Language je na Wolfram Language & System Documentation Center.
Přednášky
Standardní čas přednášky: podle aktuálního rozvrhu.
Přednášky nemusejí nutně sledovat strukturu témat uvedenou v sylabu.
Účast na přednáškách je doporučená, není však povinná; prezence se provádět nebude.
V rámci přednášky využívané online materiály naleznete v mém Dropbox cloudu přes zkrácený odkaz
v adresáři SyCo (případně můžete použít přímý link do něj).
V případě, že něčemu neporozumíte nebo si budete chtít něco ujasnit, jsou k dispozici konzultace.
Pro případ mimořádných okolností uvádím odkaz na organizaci online výuky.
Cvičení
Cvičení bude probíhat podle aktuálního rozvrhu s přednášejícím; bezprostředně navazuje na přednášku.
Nejvýše 3 neomluvené absence za semestr (výjimku tvoří studenti se schváleným ISP, s nimiž se dohodnu individuálně).
Softwarové vybavení
Všem frekventantům bude po dobu trvání kursu minimálně do vykonání zkoušky poskytnuta legální školní licence programu Wolfram Mathematica (přidělení a instalaci vyřešíme po zápisu ještě před první přednáškou).
Student bude během semestru řešit 10 domácích cvičení (assignments), jejichž tematika odpovídá právě probrané problematice. Každé domácí cvičení je hodnoceno max. 1 bodem; to činí max. 10 bodů za domácí cvičení. Zadání jednotlivých cvičení (individuální pro každého studenta) budu postupně zveřejňovat na výše uvedeném cloudu v adresáři SyCo/Assignments. Zacházení s domácími cvičeními je popsáno v subsekci Symbolical Computations sekce Wolfram Language & Mathematica na stránce Technické a počítačové podpory.
Do poloviny října obdrží student zadání zkouškového projektu, který bude pomocí probíraných metod řešit v systému Wolfram Mathematica. Zkouška sestává z obhajoby projektu (max. 10 bodů). Výsledná klasifikace se uděluje podle 20-bodové klasifikační stupnice.
Materiály k některým tématům najdete na výše uvedeném cloudu v adresáři SyCo/Projects. Nabídka témat semestrálních projektů (po dohodě s vyučujícím lze navrhnout vlastní téma):
1. Epidemiologické modely založené na ODE (Compartmental Models): viz cloud; další informace a materiály dodá vyučující.
2. Stíhací křivka a psí křivka: Wolfram MathWorld, Mathcurve, Mathematical Association of America, Cornell Univ Math Dept., Gotohaggstrom, National Curve Bank, a další (vyhledávání “pursuit curve” nebo “dog curve”).
3. Keplerův problém pro orbiter s proměnnou hmotností (pohyb komety odvrhující či nabalující hmotu, výtrysky na planetce apod.): informace a materiály dodá vyučující.
4. Magnusův jev (aerodynamický vliv rotace míče na jeho trajektorii – tenis, stolní tenis, fotbal, apod.) resp. aerodynamické silové působení na rotující válec (rotoplán, Flettnerův rotor): informace a materiály dodá vyučující.
5. Permanentní magnet padající skrze vodivou smyčku (ilustrace elektromagnetického indukčního brzdění): Informace a materiály dodá vyučující.
6. Studium transientních jevů při zapnutí/vypnutí inkandescentní žárovky (aneb proč žárovka obvykle „odejde“ při zapnutí?): Viz cloud; další potřebné informace a materiály dodá vyučující.
7. Aplikace obecného asymetrického 1D Savitzkyho–Golayova konvolučního filtru, která obchází problém okrajových efektů: Informace a materiály dodá vyučující.
8. Konečný číselný interval {a, b} má být navzorkován n vzorky (tj. má v něm být rozmístěno n ekvidistantních hodnot) tak, aby takto vytvořená posloupnost vzorků byla rovnou (po namapování nějaké funkce na ně) připravena jako vstup pro systémové funkce Fourier a InverseFourier (první vzorek chceme mít implicitně v t=0). Napište po všech směrech ošetřenou funkci circularlySample[{a, b}, n], která toto realizuje.
Základní
[WLSDC]
Doplňková
[Wol99], [Rus09], [Shi09], [Wel13], [Wel16]
Knihy, příručky a online zdroje najdete výše v sekci Literatura resp. v sekci Wolfram Mathematica na stránce Technické a počítačové podpory; nejsou zde dále duplikovány.
Fans of the Big Bang Theory know that Leonard refers to 73 as the “Chuck Norris of Numbers” after Sheldon points out that : 73 is the 21st prime, and it’s mirror image 37 is the 12th prime. This enigma is the only known such combination. In binary 73 is a palindrom 1001001: see Chuck Norris of Numbers is the 73. Sheldon failed to mention that 73 is also the 37th odd number: see Pat's Blog, Tuesday, 14 March 2023.
—