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