Pokud si dobře vzpomínám na algebru, tak inverzní matice existuje jen ke čtvercové , protože matici a inverzní matice musejí být navzájem vynásobitelné, což je u čtvercových zaručeno.
Jeden postup je:
napsat si vedle matice jednotkovou
původní matici Gaussovou eliminační metodou upravit na jednotkovou a stejné operace provádět s tou druhou. Výsledkem je, že z původně jednotkové matice se stane inverzní.
Tady jsem vygooglil popis
http://www.kolej.mff.cuni.cz/~lmotm2...ml/node55.html
Je tady uvedený i druhý způsob přes determinanty, ale počítat determinanty matice rozměru +-9 je IMHO blbost, složité a dlouhé. Šel bych první cestou.
Kdyby byl zájem můžu se mrknout, jestli ještě najdu skripta, pak bych je naskenoval.
Kód:
for (radek = 0; radek < n; radek ++) { /* projit vsechny radky */
pivot = matice[radek][radek];
for (i = 0; i < n; i++)
matice[radek][i] /= -1 * pivot; /*vyrobit jednicku na miste na hlavni diagonale */
for (i = radek; i < n - 1; i++) { /* projdu vsechny nizsi radky mimo posledniho */
pivot = matice[i + 1][i] / matice[i][i] * -1; /* cislo, kterym musim vynasobit radek a pricist k nizsimu radku */
for (j = 0; j < n; j++) { /* tady nasobim ten radek a pricitam ke spodnimu */
matice[i + 1][j] += matice[i][j] * pivot
}
}
}
/* opakovat cele obracene, to jest odspoda nahoru a vytvaret nuly nad hlavni diagonalou. Ty same operace provadet s tou druhou matici */
Je to jenom takovy lehoučký nástřel pro inspiraci, kdoví jestli by někde nějaký index nepřetekl apod. Možná je tam i logická chyba. Kdo ví
. Ale zhruba takhle se to dělá.