Poszukujemy wektora który spełnia

Dokładne:

wyznaczniki Cramera

Eliminacja Gaussa

Metoda Gaussa-Jordana

Metoda Doolittle'a (rozkład LU)

Metoda Choleskiego

Iteracyjne (przybliżone):

Metoda Jacobiego

Metoda Gausa-Seidla

Dekompozycja macierzy kwadratowej na iloczyn macierzy trójkątnej dolnej oraz macierzy trójkątnej górnej

gdzie

metoda Doolitle'a (gdy )

metoda Choleskiego-Banachiewicza (gdy )

Tadeusz Banachiewicz 1938

po dekompozycji sprowadza się do rozwiązania dwóch prostszych problemów

wiersz 1 kolumna 1

wiersz 2

kolumna 2

wiersz 3

kolumna 3

wiersz 4

Dla

Każdy element wykorzystywany jest tylko raz, więc można wykorzystać miejsce w macierzy do przechowania wartości i

#define MAX 100 typedef double matrix[MAX][MAX]; void print_matrix(matrix A, int w, int k) { printf("\nMacierz %dx%x\n", w, k); for(int i=0; i< w;i++) { for(int j=0; j< k; j++) printf(" %5.1lf", A[i][j]); printf("\n"); } }
void mul(const matrix A, const matrix B, matrix C, int nwa, int nka, int awb, int nkb) { for (int i = 0; i < nwa; i++) { for (int j = 0; j < nkb; j++) { C[i][j] = 0.0; for (int k = 0; k < nka; k++) { C[i][j] += A[i][k] * B[k][j]; } } } }
void rozklad_lu(const matrix A, matrix L, matrix U, int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < i; j++) { U[i][j] = 0; L[j][i] = 0; } L[i][i] = 1.0; for (int j = i; j < n; j++) { U[i][j] = A[i][j]; for (int k = 0; k <= i-1; k++) { U[i][j] -= L[i][k] * U[k][j]; } } for (int j = i+1; j < n; j++) { L[j][i] = A[j][i]; for (int k = 0; k <= i-1; k++) { L[j][i] -= L[j][k] * U[k][i]; } L[j][i] /= U[i][i]; } } }

Przykładowy kod lu.c

zamieniamy na stąd

Z pierwszego układu

otrzymujemy wektor

Z drugiego układu

uzyskujemy rozwiązanie

Treść zadania znajduje się w Moodle pod adresem Zadanie 10

Ćw. 1 Wiedząc, że napisz program, który wykorzystując rozkład LU wyznaczy macierz odwrotną dowolnej (podanej przez użytkownika) macierzy kwadratowej . Rozwiązanie zadania sprowadza się do rozwiązanie układów równań, gdzie wektorem wyrazów wolnych jest wektor posiadający na -tej pozycji (kolumna macierzy jednostkowej) a rozwiązaniem jest -ta kolumna macierzy odwrotnej.

Ćw. 2

Metodą rozkładu LU można uprościć obliczenia wyznacznika, gdyż Napisz program, który wykorzystując rozkład LU obliczy wyznacznik dowolnej macierzy kwadratowej . Współczynniki macierzy podaje użytkownik.