Napisać program który implementuje procedurę
rozkładu macierzy na wymiaru
metodą eliminacji Gaussa z częściowym wyborem elementu głównego ( - macierz
dolnotrójkątna, - górnotrójkątna, - macierz permutacji - czyli inaczej
macierz o spermutowanych wierszach macierzy ) i
zastosować do rozwiązywnia układów równań liniowych
.
Testowąc program jak opisano poniżej.
W programie wprowadzić następujące opcje na wczytywanie danych:
Po rozkładzie macierzy możliwe powinno być wykorzystywanie rozkładu dla rozwiązywanie układu równań liniowych dla różnych wektorów prawej strony bez ponownego wykonywania rozkładu.
Powinna być też opcja włączania/wyłączania częściowego wyboru elementu głownego (c.w.e.g) (wtedy dla pewnych macierzy program może przestać działać mimo że działał z c.w.e.g.)
Po rozwiązaniu układu drukować błąd względny i residualny w normie 2, tzn.
Wypisywanie rowiązania uzyskanego algorytmem na ekranie pozostawić jako opcję, tzn po rozwiązaniu układu drukować tylko błedy a użytkownik może np wciskając odpowiedni klawisz i/lub klikając gdzieś myszką rozwiązanie zobaczyć.
Rozwiązanie znane można uzyskać losowaniem a następnie prawą stronę dostaniemy mnożąc przez macierz tzn .
Powyższy algorytm rozkładu będzie omówiony teoretycznie na algebrze liniowej wkrótce. Ponieważ jest to projekt na zalicznie w terminie wstępnym więc w jego skład wchodzi też dokładne zapoznanie się z powyższym algorytmem - wystarczy aspekt algorytmiczny tzn jak działa algorytm bez znajomości uzasadnienia czy i dlaczego działa, dla jakich macierzy itd. okaże się, że algorytm ten nie jest za skomplikowany - trzy pętle + ewentualna zamiana wierszy macierzy. Większa część pracy będzie związana z zaprogramowaniem opcji na wczytywanie macierzy, drukowanie błędów itp
Ten algorytm zwany też algorytmem eliminacji Gaussa z c.w.e.g. omówiony jest w każdej książce o metodach numerycznych czy do algebry liniowej (wtedy pominięty jest zazwyczaj aspekt wyboru elementu głównego i w ogóle praktyczna stron implementacji). Ewentualnie slużę informacją lub objaśnieniem jakby ktoś miał kłopoty ze zrozumieniem lub znalezieniem opisu algorytmu.
Ocena będzie zależała od uwzględnienia wszystkich zaleceń i ogólnej funkcjonalności/sensowności programu (oczywiscie bez przesady - wystarczy np wybieranie opcji może być podawaniem cyfr z klawiatury i wciśnięciem Enter). jeśli chodzi o sensowność to np. nie ma sensu trzymać całej macierzy permutacji , która jest złożeniem (iloczynem) transpozycji (zamiany indeksów) wystarczy zapamiętać kolejne transpozycje w formie pary odpowiednich indeksów, jak ktoś napisze program w taki sposób że trzyma całą macierz w pamięci i potem przez nią mnoży wektory stadardowo to oczywiście to nie wpłynie na podwyższenie ilości pktów za projekt,trzeba się posłużyć zdrowym rozsądkiem.
Ważne: Termin zaliczenia nieprzekraczalny!!!