Odwracanie macierzy metodą Gaussa-Jordana- dzielenie przez zero

0

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?

1

Ta macierz:

2 0 3
1 0 3
3 0 2

jest osobliwa.

0

Próbowałem coś ze stałą robić- to nie ma sensu...

Dane, które będą reprezentowały te macierze będą bardzo różne... co zrobić w przypadku trafienia na osobliwą macierz?
Chyba, żeby delikatnie zmodyfikować dane, które te macierze wygenerują... Ok, chyba wiem co robić. :)

0

Musisz liczyć wyznacznik. Jeśli wynosi on 0, to wtedy macierz jest osobliwa.

0

No to wiem, ale program musi działać dalej, więc jakoś muszę zareagować :) Na razie mam pomysł, zobaczę, co się uda zrobić.

0
S-cat napisał(a):

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.
A czemuż to tylko wiersze. Przecież o ile mi wiadomo to takie operacje tyczą się również kolumn.

1 użytkowników online, w tym zalogowanych: 0, gości: 1