jest taki fajny sposób odwracania macierzy, który podam na przykładowej
A =
1 0 0 0
0 2 1 0
0 1 1 1
1 1 0 1
- wybieramy szybko niezerowy element z macierzy, czyli tu (1,1) = 1
- następnie normalizujemy cały wiersz z tym wybranym elementem, w taki sposób:
- m = A[k][k]; pamiętamy ten wybrany (normalizator!)
- wstawiamy jedynkę w tym wybranym: A[k][l] = 1
- następnie dzielimy cały wiersz przez ten wybrany element, czyli tak:
m = 1/m i teraz:
A[k][j] *= m; dla j = 1..n
co w tym przypadku nic nie zmienia, ponieważ m = 1.
Następnie redukujemy pozostałe wiersze, znaczy dla każdego i <> k, w taki sposób:
m = A[i][l]; pamiętamy i zerujemy: A[i][l] = 0;
a teraz cały wiersz przeliczamy tak: A[i][j] -= m*A[k][j]; j = 1..n
otrzymamy macierz:
1 0 0 0; wybrany wiersz pomijamy
0 2 1 0; -= 0 * w1 co nic nie zmienia
0 1 1 1; też nic
-1 1 0 1; w4 -= w1; (0,1,0,1) - (1,0,0,0) = ...
teraz bierzemy element: (2,2) = 2, i robimy to samo
1 0 0 0
0 1/2 1/2 0
0 -1/2 1/2 1; = ( 0,0,1,1) - (0,1/2,1/2,0)
-1 -1/2 -1/2 1; = (-1,0,0,1) - (0,1/2,1/2,0)
element (3,3) = 1/2; w3 = 2(0,-1/2,1,1) = (0,-1,2,2) =
1 0 0 0
0 1 -1 -1; (0,1/2,0,0) - 1/2(0,-1,2,2) = (0,1,-1,-1);
0 -1 2 2
-1 -1 1 2; (-1,-1/2,0,1) + 1/2(0,-1,2,2) = (-1,-1,1,2);
finalnie:
w4 = 1/2(-1,-1,1,1) = (-1/2,-1/2,1/2,1/2);
1 0 0 0
-1/2 1/2 -1/2 1/2; (0,1,-1,0) + (-1/2,-1/2,1/2,1/2) = (-1/2,1/2,-1/2,1/2)
1 0 1 -1; (0,-1,2,0) - 2(-1/2,-1/2,1/2,1/2) = (0,-1,2,0) + (1,1,-1,-1) = (1,0,1,-1)
-1/2 -1/2 1/2 1/2
N i to powinna być już gotowa odwrotna:
A^-1 =
1 0 0 0
-1/2 1/2 -1/2 1/2
1 0 1 -1
-1/2 -1/2 1/2 1/2
w każdym razie powinna być... hihi!
Fajna metoda, wbrew pozorom - opis jedynie wygląda na skomplikowany, ale po zakodowaniu tam chyba z pięć linii będzie!
Zna ktoś to - jak ta metoda się nazywa?