Haladó numerikus módszerek és programozási alapismeretek 2023/ősz - Laborgyakorlat
Javasolt programozási környezet
A gyakorlaton feladatok megoldására a Code::Blocks nevű programozási környezetet használjuk. A Code::Blocks tetszőleges operációs rendszerre letölthető innen: http://www.codeblocks.org/Saját laptopon, otthoni gépen természetesen más elterjedt fordító (Visual Studio, Visula Studio Code stb.) használható.
Feladatok beküldése
A házi feladatokat a https://k8plex-edu.elte.hu/ weboldalon keresztül lehet beküldeni, illetve ennek segítségével szedjük be őket.
Programok ellenőrzése beküldés előtt
Különböző operációs rendszerek alatt különböző (default) C++ fordítók érhetőek el. Előfordulhat, hogy a saját gépen fejlesztett program nem fordul le a k8plex-en. Mindig le kell ellenőrizni, hogy a program lefordul-e a k8plex-en!Csak azokat a feladatokat tudjuk értékelni, amelyek a k8plex-en lefordulnak a clang++ -Wall main.cpp vagy g++ -Wall main.cpp paranccsal! Szintaktikailag hibás program automatikusan 0 pontot ér.
A gyakorlaton bemutatott további anyagok
Szept. 12. 1. gyakorlat Code:Blocks és alapszintű programok |
Szept. 19. 2. gyakorlat Ciklusok létrehozása, függvények |
Szept. 19. Gyakorló feladatok |
Szept. 26. 3. gyakorlat Beolvasás, tömbök, beolvasás fájlokból |
Beadandó feladatok
1-5. beadandó feladat eredményei
1. feladat. Alakfelismerés macskákra
Közismert, hogy a macskás gif-ek milyen fontos szerepet játszanak/játszottak
az Internet fejlődésében. Egy másik mostanában nagyon fontos kérdéskör pedig
a számítógépes alak és arcfelismerés. Ez a két megatrend inspirálta a következő feladatot.
Egy kedves ismerősünknek rendszeresen elszöknek a macskái. Ez gyakran előfordul, ezért automatizáljuk a keresést.
Írjunk programot, ami a környező házaknál elhelyezett webcamok képein megtalálja őket!
Elsőként az egyik elveszett cicáról adunk egy képet:
Mivel 7 egyforma macskáról van szó, egy cica képe elegendő lesz.
Az egyik szomszéd verandáját mutató képen több olyan cicát is felfedezünk, amelyek nagyon hasonlítanak a mi
elveszett macskáinkra:
Azt kell kiderítenünk, hogy valóban a mi macskáink vannak-e ezen a képen. Az ilyen típusú feladatokat tipikusan
neurális hálózatokkal szokták megoldani, de mi most egy egyszerűbb megközelítést fogunk alkalmazni.
A kereséshez és összehasonlításhoz az elveszett macska képét egy mátrixban tároljuk. Ezután kiszámoljuk ennek a képnek
és a verandát mutató kép egyes részleteinek a korrelációját és feljegyezzük, hogy a nagy kép mely részein lesz a
korreláció egy bizonyos határértéknél nagyobb.
A feladat teljes szövege megtalálható a k8plexen a /v/courses/halnum.public/feladat1/ mappában vagy innen letölthető:
1-es feladat.
A feladathoz tartozó adat és képfájlok a /v/courses/halnum.public/feladat1/ mappában találhatóak.
Beküldési határidő: 2023. október 9, 7.00
2. feladat. Részecske adatok feldolgozása struktúrák segítségével
Egy kísérletben mérjük a részecskék impulzusának px és py komponensét és ezt egy fájlban egymás mellé feljegyezzük.
A részecskéknek
van még egy szabadsági fokuk, amelyet színnek nevezünk és ezt is feljegyezzük az impulzus komponensek után. Három különböző szín lehet,
az egyes színeket egy karakterrel jelöljük: p (piros), f (fehér) és z (zöld).
Definiáljunk egy struktúra adattípust, amely az egyes részecskékre vonatkozó adatokat tárolja! Ezután a fájlból olvassuk be az
adatokat egy, a struktúrákat tartalmazó vektorba.
A feladatban a részecskék adatait kell különbözú szempontok szerint feldolgozni.
A feladat teljes szövege megtalálható a k8plexen a /v/courses/halnum.public/feladat2/ mappában vagy innen letölthető: 2-es feladat.
Beküldési határidő: 2023. október 23, 7.00
3. feladat. Kincskeresés vektorosan
Ismerősünk ismét segítségünket kérte. Nagyapja naplójában talált egy
feljegyzést arról, hogy hol van az ő nagyapjától kapott kincs elrejtve:
"Lépj előre x_0 lépést, jobbra fordulva x_1 lépést, majd balra fordulva
x_2 lépést, és ezt ismételd!"
Azt sejti, hogy honnan kell indulni, csakhogy nagyapja a hely eléréséhez
szükséges lépések számából álló x vektort beszorozta egy A mátrixszal és
az eredményül kapott b vektort írta le. Szerencsére eszébe jutott, hogy
nagyapjával matekot is játszottak régebben, talált is a számítógépén egy "Játékos matek"
nevű mappát. Ebben volt két fájl, amelyekben mátrixelemeknek tűnő
számok voltak, legalább is erre lehetett következtetni a fájlok elején lévő rövid szövegből.
Ezen fájlok egyike lehet az, amit nagyapja használt.
Készítsünk C++ programot, mely megvalósítja a Gauss-Jordan-elimináció
algoritmusát, vagyis megoldja az A x = b lineáris egyenletrendszert!
Itt A egy N x N méretű adott mátrix, x és b pedig N
elemű oszlopvektorok tetszőleges n értékkel.
A feladat teljes szövege megtalálható a /v/courses/halnum.public/feladat3/ mappában, illetve
innen is letölthető: 3-as feladat
Beküldési határidő: 2023. november 13, 7:00
4. feladat. Tanulni és/vagy bulizni
A hallgatók alapesetben a tanulás mellett még sok időt töltenek bulizással is.
Vizsgáljuk meg, hogy az ezzel töltött idő hogyan befolyásolja a Halnum tárgy sikeres elvégzésének esélyét! Ehhez
megkérdeztük 1001 korábbi hallgatónkat visszamenőleg 42 évig, hogy a 2. éves programozás jellegű tantárgyak
tanulása mellett mennyi időt töltöttek bulizással, és milyen eredménnyel végezték el a tantárgyat.
Ha valaki átment, akkor azt "1"-gyel jelöltük, ha nem ment át, akkor "0"-val.
A probléma vizsgálata során két dolgot fogunk megtanulni:
Igen/nem kimenetelű kísérletek (mérések, vagy próbálkozások) eredményeihez valószínűségi eloszlásfüggvény
illesztését (logisztikus regresszió) és többdimenziós minimumkeresést (azon belül a gradiens módszert).
A feladat teljes szövege megtalálható a /v/courses/halnum.public/feladat5/ mappában, illetve
innen is letölthető: 4-es feladat.
Beküldési határidő: 2023. november 27., 7:00
5. feladat. Ising lánc és Metropolis-Hastings algoritmus
Ebben a feladatban az előadáson ismertetett Metropolis-Hastings algoritmust fogjuk használni az Ising lánc tulajdonságainak vizsgálatára. Ehhez először képet alkotunk arról, hogy milyen lesz az algoritmus által szolgáltatott energiaértékek eloszlása és hogy ez függ-e a attól, milyen kezdeti állapotból indultunk. Ezután megnézzük, hogy egy rendezett Ising lánc állapotból indulva véges hőmérsékleten hogyan alakulnak ki azonos spin polarizációjú lánc szakaszok, vagyis "domének". Végül tanulmányozzuk a lánc teljes energiájának hőmérséklet függését.
A feladat teljes szövege megtalálható a /v/courses/halnum.public/feladat5/ mappában, illetve
innen is letölthető: 5-ös feladat
Beküldési határidő: 2023. december 11, 7:00