Java és C++ gyakorlat fizikus–informatikusoknak

1. zárthelyi dolgozat

2004. november 8., hétfő

1. A kvaterniók teste a komplex számtest egy speciális bővítése. Minden kvaternió az a = α_{0} + α_{1}i + α_{2}j + α_{3}k alakban írható, ahol α_{0}, α_{1}, α_{2}, α_{3} valós számok, az i, j, k generátor kvaterniókra pedig fennállnak az alábbi szorzási szabályok:

i^{2} = j^{2} = k^{2} = −1,
jk = −kj = i,
ki = −ik = j,
ij = −ji = k.

Írjunk C++ programot, melyben definiáljuk a kvaterniók osztályát, dolgozzuk ki az összeadás és szorzás operátorát és a műveleti jelek túlterhelésével egyszerű jelölésmóddal alkalmazzuk a következő kifejezés kiszámítására:

(−3 + 2i + 4j + 5k) + (3 + 4i − 7j + 5k)(2 − 6i + 3j + 7k).

2. Virtuális függvények alkalmazásával írjunk olyan C++ programot, amely

az

ax^{2} + bx + c = 0

valós együtthatós másodfokú egyenlet gyökeit minden lehetséges esetben (két konjugált komplex gyök van, a két valós gyök egybeesik, két különböző valós gyök van) helyesen, az esetnek megfelelő megoldóképlet alkalmazásával adja meg!

3. Minden négyzetes mátrix felbontható egy ortogonális mátrix (Q) és egy felső háromszögmátrix (R) szorzatára. (Hatékonyan alkalmazható pl. sok nem felcserélhető mátrix összeszorzására.) A felbontás neve Q-R dekompozíció, melynek egy C nyelvű, float típusra megírt változata a Numerical Recipes programkönyvtárban (a gépen a numrec directory-ban) qrdcmp.c néven található meg, a hozzátartozó dokumentáció a doc/c2-10.ps file.

C++ programunkban sablonok alkalmazásával általánosítsuk a Q-R dekompozíciós algoritmust úgy, hogy float, double és std::complex<double> típusú adatok esetén egyaránt működjön!