Feladatok:
- Monte-Carlo integrálás Írjunk integrátort, ami az alábbi függvényként hívható, és kiszámolja egy 3D-s integrál közelítő értékét. Az első argumentum az integrandus, a második az integrálási tartomány (igazat ad vissza, ha a pont benne van a tartományban), az utolsó 6 az integrálási tartomány bennfoglaló téglatestje.
MonteCarlo( [](auto x, auto y, auto z){ return exp(-x*x-y*y-z*z); }, [](auto x, auto y, auto z)->bool{ return x*x+y*y+z*z<16.0; }, -4.0, 4.0, -4.0, 4.0, -4.0, 4.0);
- Stack-en tárolt Vektor és négyzetes Mátrix struktúra. Típus szinten adott méretű, hasonlóan az std::array-hez. A szokásos matematikai műveleteket kell támogatni közöttük. Mátrixon legalább kettőt kell az alábbiak közül: lineáris egyenletrendszer megoldása ismert jobboldallal, determináns számítás, inverz számítás.
- 3 dimenziós forgatások reprezentálása több féle módon Kvaterniók, 3x3-as mátrixok, szög-tengely reprezentáció és az ezek közötti konverziók.
- Polinom osztály (1 változós) Az osztály a polinom együtthatóit tárolja (dinamikusan változhat, tehát pl. std::vector), és az alapműveleteket támogatja: összeg, különbség, szorzat, kompozíció, derivált, integrál értéke adott helyen, gyökei (Newton iterációval), stb.
- Függvény osztály (1 változós) Az osztály valamilyen általunk választott reprezentációban tárolja egy folytonos függvény valamilyen diszkretizációját, a cél, hogy lehessen kiértékelni bárhol (interpoláció), határozott és határozatlan integrált számolni, deriválni, gyököt, minimumot, maximumot keresni.
- 3D Lorentz transzformáció osztálya Az osztály tudjon rapiditást és szöget is számolni, az alapvető műveleteken kívűl.
- Hisztogram osztály (1 változós) Dinamikusan állítható határok és felosztás. Lehessen két azonos hisztogramot összeadni, kivonni, skalárral szorozni, osztani, és random mintavételezni belőle, mint eloszlásból!
- Pszeudorandom szám generálása Írjunk egy olyan programot, amely generál pszeudorandom számokat, amelyek Gauss-eloszlást követnek és a szórásuk $\sigma = \dfrac{1}{\sqrt{2}}$. Ábrázoljuk a relatív frekvenciákat és a valószínűség sűrűség függvényt.
- Random engine benchmarking Hasonlítsuk össze a beépített random generátorok sebességét és tulajdonságait, főleg, hogy magasabb dimenziókban tudunk-e felfedezni korrelációt a generált számok között.
- Mértékegységek és prefixumok követése
Csináljunk egy olyan osztályt, amely adott T típust tárol, de követi azt is, hogy 3 kiválasztott SI alapmennyiség (pl. hosszúság, idő, tömeg) milyen kombinációját jelenti. Ezt pedig úgy éri el, hogy tárolja a három mennyiség kitevőjét. Tehát pl. a sebesség reprezentálása:
template<typename T, int L, int T, int M> class ValueWithDimension;
template<typename T> using Velocity = ValueWithDimension<T, 1, -1, 0>
Írjuk meg erre az osztályra az alapműveleteket, úgy, hogy összeadni, kivonni csak olyan mennyiségeket lehessen, amelyek azonos mértékegységűek! Szorzásnál, osztásnál pedig megfelelően transzformálódjanak a kitevők. Terjesszük ki az osztályt azzal a funkcionalitással, hogy az ismert SI prefixumokat is tárolja és követi a mennyiségekre, és a műveleteknél igyekszik a legjobb köztes prefixumot választani (pl. 1km + 1mm $\rightarrow$ 1000.001 m). - Hőmérséklet osztály Csináljunk egy olyan osztályt, amely tárolja a hőmérséklet értékét adott mértékegységekben. (pl. Celsius, Fahrenheit, Kelvin, Rankine, Delisle, Römer). Ezenkívűl képes őket összeadni, kivonni, átváltani, n-darab külünböző mértékegységben megadott értéket sorbarendezni.
- Perkoláció számolása Készítsünk egy NxN-es rácsra egy perkolációs számlálót. Határozzuk meg a kritikus valószínűséget, illetve készítsünk hozzá megfelelő ábrázolást. Teszteljük az algoritmusunkat különböző N-ekre.
- Kettős csillag körül keringő bolygó pályája Oldjuk meg 4-ed rendű Runge-Kuttával a gravitációs 3-test problémát. Törekedjünk arra, hogy rendszer a lehető legáltalánosabb legyen, pl. különböző tömegek. Teszteljünk különböző kezdeti feltételeket. Ábrázoljuk a fázisteret, illetve a rendszer energiáját az idő függvényében
- Kettős inga szimulálása Írjunk a 4-ed rendű Runge-Kuttával kettős inga szimulációt, úgy, hogy grafikusan megjelenítjük az ingát, és egérrel meglökhetőek a súlyok. Rajzoljuk ki a fázisteret is.
- Lorenz pillangó kirajzolása Számoljuk ki és jelenítsük meg a Lorenz rendszert, és számoljunk Ljapunov exponenst, amely alapján színezzük ki
- Ideális gáz gravitációs térben A 4-ed rendű Runge-Kutta felhasználásával írjunk 2D szimulációt, amelyben kis kör alakú gázrészecskék rugalmasan ütköznek egymással, és az alsó felülettel, vízszintesen periodikus határfeltétel van, és felfelé nyitott a rendszer, lefelé pedig a magassággal csökkenő gravitációs erő hat. Számoljuk ki az átlagos és a magassági régiókra külön-külön számolt termodinamikai állapotjelzőket (hőmérséklet, nyomás).
- Ponttöltés tere: Határozzuk meg n-darab ponttöltés által keltett elektromos teret és potenciált 2-dimenzióban. Poisson-egyenlet megoldása. Majd ezeket ábrázoljuk megfelelő módon. Próbáljunk ki minél több töltéselrendezést, illetve amennyiben ez lehetséges hasonlítsuk össze az analitikus megoldással.
- Mandelbrot fraktál Írjunk programot, amely kirajzolja, valamint nagyíthatóan és navigálhatóan megjeleníti a Mandelbrot fraktált.
- Van der Waals gáz dobozban A 4-ed rendű Runge-Kutta felhasználásával írjunk 2D szimulációt, ahol N(=1000) részecske mozog V térfogató dobozban. A részecskék véges sugarúak, merev gömbként ütköznek, továbbá közöttük a Lennard-Jones potenciál hat: $V(r) = 4 \epsilon ( (\sigma/r)^{12} - (\sigma/r)^6)$ Wiki (egyszerűbb 2D no pot eset githubon)
- Legrövidebb út algoritmus Legrövidebb út algoritmus implementálása (akár valamelyik legutóbbi Bosch-veseny mintájára, ahol a kocsinak kell az átlagos menetidők alapján eljutnia A-ból B-be, melyet fordulónként úgy variáltak, hogy a következő körben lámpák is voltak ismert időzítéssel, a harmadik körben pedig véletlen dugók is voltak benne). A lényeg, hogy meg kell találni a Dijkstra algoritmust és beprogramozni.
Órák: (péntek 10:00-11:30)
- 1. óra (feb. 12.):
- 2. óra (feb. 19.):
- 3. óra (feb. 26.): Jupyter ipynb jegyzet, illetve letöltés
- 4. óra (márc. 4.):
- 5. óra (márc. 11.):
- 6. óra (márc. 18.):
- 7. óra (márc. 25.):
- Tavaszi szünet (ápr. 2.):
- 8. óra (ápr. 9.):
- 9. óra (ápr. 16.):
- 10. óra (ápr. 23.):
- 11. óra (ápr. 30.):
- Pázmány nap (máj. 7.):
- 12. óra (máj. 14.):
Go to back. Go to top. Go to home.