NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Kami-sama
Člen
Avatar
Kami-sama:13.2.2018 22:12

Potřebovala bych najít dvě matice typu 3×3 (nebo i 4×4), aby když je vynásobím, tak vznikla jednotková matice. Problém je ten, že potřebuji, aby obě matice byly celočíselné a jedna z nich obsahovala nezáporné čísla. Zkoušela jsem to dělat prostě tak, že jsem si pomocí funkce Random dala do obou matic čísla, vynásobila a pak porovnávala s jednotkovou maticí. Dokud vynásobení těch dvou matic nebyla jednotková matice, tak jsem hledala dál. Pro matice 2×2 to funguje rychle, ale pro 3×3 už to je dlouhý. Chtěla bych se tedy zeptat, jestli byste mi neporadili nějaký efektivnější algoritmus pro hledání takových matic. Děkuji.

 
Odpovědět
13.2.2018 22:12
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Kami-sama
Martin Dráb:14.2.2018 13:11

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í.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
14.2.2018 13:11
2 + 2 = 5 for extremely large values of 2
Avatar
Kami-sama
Člen
Avatar
Kami-sama:14.2.2018 14:13

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.

 
Nahoru Odpovědět
14.2.2018 14:13
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Kami-sama
Martin Dráb:14.2.2018 18:35

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 :-(.

Nahoru Odpovědět
14.2.2018 18:35
2 + 2 = 5 for extremely large values of 2
Avatar
Kami-sama
Člen
Avatar
Kami-sama:14.2.2018 19:03

Jo tak díky, zkusím to a uvidím.
Kladné čísla tam být nemusí, ale já tu jednu matici kladnou potřebuji, tak si jí tak vygeneruji a z ní pak budu počítat ten inverz.

 
Nahoru Odpovědět
14.2.2018 19:03
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.