Feladatok:

  1. 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);


  2. 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. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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!

  8. 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.

  9. 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.

  10. 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).

  11. 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.

  12. 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.
  13. 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

  14. 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.

  15. 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

  16. 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).

  17. 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.

  18. Mandelbrot fraktál Írjunk programot, amely kirajzolja, valamint nagyíthatóan és navigálhatóan megjeleníti a Mandelbrot fraktált.

  19. 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)

  20. 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)