Cześć :) Napisałem dla siebie klasę, służącą do wykonywania operacji na macierzach. Do pełni szczęścia, brakuje mi tylko operacji odwrócenia macierzy kwadratowej.
Algorytm działa... z pewnym wyjątkiem.
W pierwszym kroku, mnożę cały bieżący wiersz, przez odwrotność elementu leżącego na przekątnej głównej w tym wierszu. Dzięki temu, ten element zyskuje wartość 1. Nie licząc przypadku, który opisałem poniżej, tam występuje dzielenie przez 0 i program przestaje działać jak należy.
Kolejny krok to pętla, która tą jedynką "zeruje" całą kolumnę, tzn. dodaję aktualny wiersz, do i-tego wiersza, mnożąc tą jedynkę w aktualnym wierszu, przez wartość przeciwną do odpowiadającego elementu wiersza, do którego dodaję aktualny wiersz.
Obrabiam w ten sposób całą "lewą" macierz, a "prawa" macierz, w wyniku tych operacji elementarnych, z macierzy jednostkowej przekształca się w macierz odwrotną do początkowej, "lewej" macierzy.
Działam wedle tego artykułu: http://blog.etrapez.pl/macierze/macierze-odwrotne-liczone-metoda-gaussa-jordana/
A teraz problem:
w przypadku np. takiej macierzy:
2 0 3
1 0 3
3 0 2
żadna operacja elementarna (o której wiem :) ), nie umożliwia uzyskania jedynki na przekątnej głównej. Mam na myśli przemnożenie wiersza przez liczbę, dodanie wiersza (przemnożonego przez jakąś liczbę do innego wiersza), czy też zamiana wierszy.
W tej metodzie, wedle artykułu, operacje można wykonywać jedynie na wierszach.
Zatem:
a) Dodać sztucznie do któregoś z felernych zer jakąś bardzo małą stałą?
Czy manipulowanie przy wartościach macierzy bardzo wpływa na wynik? I tak ma ona docelowo służyć do wyznaczenia współczynników dla wielomianu aproksymującego.
Tutaj więcej info: https://4programmers.net/Forum/Algorytmy/263894-aproksymacja_wielomianowa_funkcji_dyskretnej-_pomoc_w_zrozumieniu_koncepcji
b) Powinienem rozwiązać to inaczej?