1. feladat: Egyszerű mátrixműveletek Minimum feladat: Írjunk olyan programot, amely parancssorban megadott MxN méretű mátrixot (pl. matrix.dat) és egy N elemű oszlopvektort (pl. vector.dat) fájlból beolvas, összeszorozza őket, és az eredményvektort kiírja a standard outputra! A parancssor M=5, N=3 esetén így nézhet ki: matmul 5 3 matrix.dat vector.dat Teljes feladat: Írjuk meg a mátrixot fájlból betöltő függvényt úgy, hogy az ne várja előre a mátrix méretét, hanem találja ki a fájlban levő oszlopok és sorok számából. A fájl formátumára nincsen sok megkötés, a lényeg, hogy ránézésre mátrixot tartalmazó szöveges állomány legyen. Készítsünk a programhoz különböző próbafájlokat, amikkel a helyes működése tesztelhető. Figyelem: a fájlt csak egyszer és csak szekvenciálisan szabad végigolvasni, valamint a fájl tetszőlegesen nagy lehet! 2. feladat: Gauss-elimináció Minimum feladat: Írjunk olyan programot, amelyik beolvas egy NxN méretű valós mátrixot (szöveges, szóközzel, illetve soremeléssel elválasztott fájlokból), eredményként pedig kiírja a mátrix inverzét! Algoritmusként használjuk a Gauss-eliminációt sor- és oszlopcserékkel! A program detektálja, ha az invertálandó mátrix szinguláris! Tervezzük meg modulárisan a programot úgy, hogy egy lineárisegyenlet-megoldó algoritmus függvényként legyen hívható! Teljes feladat: A Gauss-elimináció implementálása után használjuk mátrix inverzének meghatározására a LAPACK csomag szingulárisérték-dekompozíció függvényét. Hasonlítsuk össze az SVD algoritmus eredményét a Gauss-eliminációéval néhány mátrix esetében! Teszteljük a két algoritmus sebességét különböző méretű mátrixokra! Próbáljuk ki az SVD-t szinguláris és közel szinguláris mátrixokra. 3. feladat: Polinomillesztés Minimum feladat: Írjunk olyan programot, amely az előző feladatban kidolgozott, lineáris egyenletrendszereket megoldó kódot felhasználva általános N változós polinomillesztést hajt végre a lineáris legkisebb négyzetek módszerével! A program parancssori paraméterként várja a független változók számát, az illesztendő polinom rendjét, valamint a bemenő adatokat tartalmazó fájl nevét. A program írja ki a képernyőre az illesztési paramétereket, valamint egy fájlba az eredeti mérési értékeket és az illesztett polinom által adott becsléseket az eredeti bemeneti fájl minden adatpontjára. Készítsünk ábrát, melyről leolvasható a polinomillesztés jósága! Készítsünk saját adatfájlokat az algoritmus tesztelésére, majd futassuk a programot az alább letölthető adatfájlokra (5 változó). Az alapfeladathoz nem szükséges a többváltozós polinomok vegyes tagjait (pl. xy, xy2 stb.) figyelembe venni. Teljes feladat: Vegyük figyelembe a többváltozós polinomok vegyes tagjait (pl. xy, xy2 stb.) is! 4. feladat: Differenciálegyenlet megoldása Minimum feladat: Írjunk olyan programot, amelyik az explicit Euler-módszer segítségével megoldja a Föld-Hold-rendszer mozgásegyenletét. Ábrázoljuk a kapott eredményeket. Nézzük meg, hogy tapasztalható-e eltérés az analitikus megoldástól sok periódus után! A feladat megoldása során dolgozzunk síkban, geocentrikus koordinátákban (a Föld a 0,0 pontban van rögzítve). Ábrázoljuk a Hold pályáját, valamint a rendszer teljes energiáját az idő függvényében. Teljes feladat: Integráljuk a mozgásegyenletet egyszerű, valamint adaptív lépéshossz-szabályozott negyedrendű Runge-Kutta-módszerrel! A program legyen teljesen általános, ne legyen megkötés az integrálandó változók számára. Használjunk függvénypointereket! Próbáljuk ki a programot a Lorenz-féle egyenletrendszer, vagy a kettős inga egyenleteinek megoldására! Ábrázoljuk az eredményeket!