Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím, prosím o radu jak co nejelegantněji dokázat korektnost algoritmu násobení matic metodou rozděl a panuj.
Vpodstatě vím jak to dokázat a není to tak složité, lze na to použít indukce. Ale je to hrozně dlouhé a nepřehledné.
Chtěl jsem se zeptat, zda na to nelze jít nějak elegantněji, aby se v tom dalo vyznat...
Tady je stručný popis algoritmu a ukázka jak jsem to zkoušel dokázat:
Algoritmus se používá pro násobení čtvercovích matic o velikosti mocniny 2. Je popsán zhruba takto:
Matice A, B, C o velikosti
se rozdělí na 4 podmatice o velikosti
pro
. Následně se vypočítají matice X1 ... X8 a z nich se vypočítá matice C (viz níže) .
Postupoval jsem tak, že jsem ověřil, zda to platí pro n = 1 (tj. matice 2x2). Když to rozepíšu, vypadá to zhruba takto: 




no a když se podívám na to jak se vypočítávají jednotlivé prvky C, je vidět že je použit stejný vzorec jako v klasické definici násobení matic tudíž pro n = 1 to platí.
Klasická definice násobení matic:
pro všechny prvky
.
2. krok je indukční předpoklad, že když to platí pro n, bude to platit pro n+1. A tady to začíná být ošklivé. Když si rozepíšu rozložení obecné matice o velikosti 2^(n+1) tak je to docela dlouhý, nemluvě o maticích X1...X8. 






obdobně pro B a C.
V tomto kroku chci využít předpokladu, že to platí pro n, a matice X1 ... X8 vypočítat pomocí klasického násobení matic. 

(Už tady je to děs co se týče přehlednosti).
A teď když to sečtu..
Už se mi to nechtělo rozepisovat, princip je myslím jasnej... Obdobně bych rozepsal všechny prvky C, načež bych zjistil, že to přesně odpovídá klasickému násobení matic a bylo by to dokázané.
Je to hrozně dlouhý, nepřehledný a není snadný se v tom vyznat. Mohl bych tam sice zavést nějaké substituce, ale taky by jich bylo hrozně moc :( Nenapadá mě jak to popsat jednodušeji a elegantněji :(
Offline
Ahoj, uprimne, pokud je v jakykoliv literature dukaz nejakeho pomerne jasneho tvrzeni o nasobeni matic, a ja chapu princip, konkretni, matematicky korektni zapis (tj. napr. vypisovani prvku z definice maticoveho nasobeni) nikdy nectu. (vcetne dukazu v tvem prispevku)
Prehlednost se da zlepsit napriklad pouzitim symbolu
..
Ale hlavne, kdyz dokazujes korektnost algoritmu, zpravidla dokazujes dve veci
1) algoritmus da spravny vysledek;
2) algoritmus je konecny
tedy u tveho algoritmu, kdy dostanes na vstupu matice A a B typu 2^n a na vystupu mas mit matici C=AB dokazujes
napriklad
ad 1) pouzijes tvrzeni block matrix multiplication zde: http://en.wikipedia.org/wiki/Block_matrix;
plus vlastnosti cisla 2^n
ad 2) v kazdem kroku se zmensuje velikost matic od 2^n az do 2, kdy je vynasobis vzorcem z tveho dukazu pro n=1
Taky je dobry si algoritmicky zapsat, co PRESNE chces delat v jednotlivych krocich (pak uz by te to vetsinou melo snadno navest na dokazovani 1) a 2))
Offline