Największe wartości na przekątnej

0

Witam,
Mam pewien problem. Muszę napisać program na metody numeryczne który metodą Jacobiego liczy układ n równań z n niewiadomymi.
Aby program działał poprawnie musi tak przekształcić macierz z równaniami, aby po dodaniu wartości (w module) na przekątnej był jak największy wynik. Np. mam taką macierz :

-3 2 8
2 3 1
-10 4 1

a chcę uzyskać taką macierz:

-10 4 1
2 3 1
-3 2 8

Najprostszą metodą byłoby sprawdzenie wszystkich możliwych kombinacji i pozostawienie tej w której na przekątnej jest największy wynik, jednak jest to mało wydajne i dla większej macierzy np.100x100 czas wykonywania programu bardzo by się wydłużył. Ma ktoś może pomysł jak to rozwiązać ?

1

chciałem zaproponować naiwny algorytm (jazda po przekątnej i jako kolejny wiersz wybierany ten z tych, które pozostały, który ma w danej kolumnie największą wartość), ale pisząc przykład sam sobie udowodniłem, że nie zawsze znajdzie najlepsze rozwiązanie (np dla macierzy [2 -5][1 2]), chociaż zadziała dla Twojego przykładu. wydaje mi się, że rozwiązanie to minimalizacja funkcji wielu zmiennych. z dziesięć lat będzie jak ostatnio miałem do czynienia z minimalizacją, więc nie pamiętam jak się to robi, ale może ten termin podpowie Ci czego szukać w internecie.

1

ja bym zrobił tak:
wyszukał maksymalną wartość bezwzględną i przemieściłbym wiersz tak by ta wartość maksymalna znalazła się na przekątnej (zapamiętać indeks).
znowu wyszukał maksymalną wartość bezwzględną, ale pomijając wiersz i kolumnę o zapamiętanym indeksie
i tak dalej.

2

Tak na prawde to jest assignment problem: chcesz z macierzy wybrac takie elementy, ktore bedzie mozna przesunac na przekatna (przez permutacje wierszy i kolumn) i ktorych suma jest maksymalna. Aby element mozna bylo przesunac na przekatna zaden inny wybrany element nie moze byc w tym samym wierszu i w tej samej kolumnie.
Tu jest opis algorytmu rozwiazujacy problem: http://www.math.harvard.edu/archive/20_spring_05/handouts/assignment_overheads.pdf

Algorytm @MarekR22 nie zawsze dziala optymalnie, choc pewnie w wiekszosci przypadkow da sensowne wyniki pozwalajace na obliczenie ukladu rownan.

0

Takie przekształcenie macierzy to wymóg prowadzącego?

Warunkiem wystarczającym na zbieżność metody Jacobiego jest to, aby macierz była dominująca diagonalnie.

0

Dziękuję wszystkim za pomoc, @MarekR22 zrobiłem to takim samym sposobem i jeżeli podpasuje układ równań to metoda działa, program ma rozwiązywać przykłady podane przez prowadzącego i je rozwiązuje, więc zadanie zrobione.

0

To akurat bardzo proste zadanie które łatwo jest rozwiązywane przez algorytm węgierski.

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