Diskuze: Pascal - Hledání inverzní matice
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V zásadě existují dva způsoby, jak k dané matici vypočítat matici inverzní. Potřebuješ ale mít nějaké znalosti z lineární algebry, aby se to dalo rozumně implementovat.
První možnost spočívá v tom, že s maticí pracuješ, jako bys prováděla Gaussovu eliminaci (tedy řešení soustavy lineárních rovnic, tady s nulovou pravou stranou), přičemž jednotlivé úpravy (vynásobení řádku číslem, sečtení/odečtení dvou řádkků) zakóduješ do podoby matic. Vynásobením těchto matic získáš inverzní matici (v podstatě získáš matici, která ti provede všechny ty úpravy najednou a jelikož je výsledkem Gaussovy eliminace jednotková matice, tento součin matic je hledaná inverzní matice).
Pro tento způsob bys ale měla vědět, co je to Gaussova eliminace a jak se provádí.
Druhý způsob je v zásadě jen dosazení do vzorečku. Nicméně potřebuješ vědět, jak vypočítat determinant matice (pro tvoje případy bude stačit i přímo zdefinice přes všechny permutace, ale lze použít i rozvoj podle řádku/sloupce).
Některý ze způsobů případně rozepíšu večer, až bude víc času.
Je také třeba říci, že inverzní matice existuje, právě když má soustava tvořená vstupní maticí a nulovou pravou stranou právě jedno řešení.
Oba způsoby počítání inverzní matice znám, ale já mám právě problém s těma zlomkama, s nima pracovat neumím, ani jsem to nezkoušela nikdy. Když jsem vždycky počítala inverzní matici nad reálnými čísly, tak tam asi vždycky byl alespoň jeden zlomek. Ale na ten determinant jsem nějak zapomněla a možná mi to přijde lepší to počítat s ním. Že bych spočítala nějak tu adjungovanou matici, tam by byly celá čísla, a pak bych to nějak uložila do matice s recordem, a druhá složka toho byl byl ten determinant, a vypsala bych to na obrazovku nějak jako X/Y. A pak ta druha matice by měla jen ty nezáporné celé čísla, a to bych mohla ze vstupu už dobře číst. Ještě jsem to teda nezkoušela, tak nevím, jak mi to pude. Díky.
mám právě problém s těma zlomkama
A nemůžeš místo s celými čísly počítat s reálnými (typ Real, Double, či Extended)? Až na případné zaokrouhlovací chyby (kterých bych se nebál) by měl být kód stejný.
Případně, pokud se chceš vyhnout zlomkům při tom prvním způsobu (ekvivalentní řádkové úpravy), nestačilo by například v případě, že máš řádek R1, který potřebuješ vynásobit 1.5krát a přičíst k řádku R2 (aby se nějaká složka vyrušila), prostě R1 vynásobit 3krát a R2 2x a sečíst je pak? V podstatě takové převádění na společného jmenovatele, dalo by se říci...
Co se týče nutnosti kladných čísel, tady nevím. Tak dobře si na lineární algebru už nepamatuju .
Zobrazeno 5 zpráv z 5.