Macierz Trójkątna to taka macierz, która powyżej diagonali, albo pod ma tylko wartości 0. Równania z tego typu macierzami rozwiązuje się szybciej dzięki ich właściwościom. W tym artykule zostanie wyjaśniony algorytm rozwiązywania układów równań z macierzę górnotrójkątną.
Ogólna postać macierzy górnotrójkątnej wygląda następująco:
Taką postać można otrzymać w wyniku przeprowadzenia eliminacji Gaussa. Jej zaletą jest fakt, że wyznacznik wynosi tyle co iloczyn wartości na diagonali tj. det(U) = U11 + U22 + .. + Unn. Przypuśćmy, że do rozwiązania jest układ Ux = b, gdzie szukany jest wektor x. Wtedy można skorzystać z następujących wzorów:
Wyliczanie kolejnych elementów zaczyna się od n-tego rzędu, ponieważ wszystkie poprzednie wyrazy zostaną wyliczone na podstawie następnych. Podczas rozwiązywania układu równań dla macierzy dolnotrójkątnej należałoby wyliczać od pierwszego rzędu do ostatniego używają bardzo podobnych wzorów.
Dane jest następujące równanie:
Kolejno zostaną wykonane następujące działania:
Podsumowując rozwiązaniem podanego na początku przykładu równanie Ux = b ma rozwiązanie x = [0; -4; 3].
Napisana ponizej funkcja korzysta z biblioteki matrix.h, aby wczytać / wyświetlić dane w macierzy. Ponizej została przedstawiona funkcja rozwiazGora(), która dla danej macierz U oraz wektora b wyznaczy i zwróci x w równaniu Ux = b.
(2.) Sprawdź czy wektor b i macierz A mają tyle samo wierszy i jeśli nie to (3.) zwróć NULL. Następnie (4.) pobierz rozmiar macierzy A. (5.) Dla każdego wiersza: (6. - 9.) oblicz xi.
W celu przetestowania napisanej funkcji wystarczy poniższy fragment kodu, który wczyta od użytkownika odpowiednie dane, a następnie wyświetli rozwiązanie.
Napisz funkcję rozwiazDol(), która rozwiąże układ równań Lx = b, gdzie L jest macierzą dolnotrójkątną. Przetestuj działanie napisanego programu.