Java és C++ gyakorlat fizikus–informatikusoknak

1. zárthelyi dolgozat

2004. november 11., csütörtök

1. A mellékelt programban megtalálja a kvaternio osztályt, amellyel az α = α_{0} + α_{1}i + α_{2}j + α_{3}k alakú kvaterniók definiálhatók, értelmezett rájuk az összeadás (+ és += műveletek), a szorzás ill. a valós számmal való szorzás (* ill. *= alakban egyaránt), valamint a konjugálás (i, j, k együtthatójának egyidejű előjelváltása) a conjg függvénnyel. Helyvektorokat kvaterniókkal r = xi+yj+zk alakban adhatunk meg. Mutassa meg numerikus példákon (véletlenszerű kvaterniókat kiválasztva), hogy az r′ = αrα^{∗} transzformáció tetszőleges α kvaternió esetében a vektor elforgatásának felel meg, amennyiben α_{0}^{2}+α_{1}^{2}+α_{2}^{2}+α_{3}^{2} = 1! Mutassa meg továbbá, hogy a z tengely körüli φ = 45^{∘} szögű elforgatás a cos(φ/2) + sin(φ/2)k kvaterniónak felel meg, az x tengely körüli β = 60^{∘} szögű elforgatás pedig a cos(β/2) + sin(β/2)i kvaterniónak! Határozza meg ennek alapján numerikusan, a kvaterniók használatával a φ = 45^{∘}, β = 60^{∘}, ψ = 30^{∘} Euler-szögekhez (φ szögű forgatás a z tengely körül, majd β szögű forgatás az x tengely körül, végül ψ szögű forgatás a z tengely körül) tartozó forgatás mátrixát!

2. Virtuális függvények alkalmazásával írjon olyan C++ programot, amely minden kétismeretlenes, két egyenletből álló lineáris egyenletrendszer esetében automatikusan megtalálja a lehetséges megoldásokat!

3. Minden négyzetes mátrix felbontható egy alsó háromszögmátrix (L) és egy felső háromszögmátrix (U) szorzatára. (Hatékonyan alkalmazható lineáris egyenletrendszerek megoldásakor.) A felbontás neve LU 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) ludcmp.c néven található meg, a hozzátartozó dokumentáció a doc/c2-3.ps file.

C++ programjában sablonok alkalmazásával általánosítsa az LU dekompozíciós algoritmust úgy, hogy float, double és std::complex<double> típusú adatok esetén egyaránt működjön!