6

Given L i ULU decomposition i grafika stałych b takie, że LU*x=b, czy istnieje wbudowana funkcja, która znaleźć x? Myśli coś takiego -rozwiązać układ równań liniowych o danym rozkładzie LU i wektora stałych

X = functionName(L,U,b) 

zauważyć, że w obu L i U mamy do czynienia z trójkątnymi matryc, które mogą być rozwiązane przez forward and backward substitution bezpośrednio bez użycia procesu Gaussian elimination.

Edit:

Rozwiązując ten układ równań liniowych powinny być zgodnie z następującymi krokami -

1. define y - s.t Ux=y 
2. solve Ly=b by forward substitution 
3. solve Ux=y by backward substitution 
4. return y 

Edit 2:

znalazłem linalg::matlinsolveLU ale nie próbowałem to powoduje, że mam zbyt starą wersję (R2010a). Czy to działa dla nikogo?

+0

Czy twoje wektory i macierze są symboliczne? Jeśli tak, musisz to szczegółowo ująć w swoim pytaniu. – horchler

+0

Również 'mldivide' jest [przeciążone dla systemów symbolicznych] (http://www.mathworks.com/help/symbolic/arithmeticoperations.html), ale nie będzie działać dokładnie tak samo. – horchler

+0

Co to jest średnia "matriały symboliczne"? – URL87

Odpowiedz

5

Jeśli masz:

A = rand(3); 
b = rand(3,1); 

to rozwiązanie do systemu można łatwo obliczyć następująco:

x = A\b 

Lub jeśli masz już metoda lu A, następnie:

[L,U] = lu(A); 
xx = U\(L\b) 

Funkcja mldivide to smart enough w celu wykrycia, że ​​macierz jest trójkątny i wybrał odpowiednio algorytm (podstawienie do przodu/do tyłu)

+0

Tego rodzaju rzeczy są przydatne, jeśli macie stałą macierz współczynników "A", ale wiele różnych prawych stron "b".Więc przez wstępne obliczenie rozkładu, możesz przyspieszyć rzeczy – Amro

+0

Jak wiesz, że "wystarczająco inteligentne, by wykryć ..."? – URL87

+0

Podałem łącze do dokumentów, które wyjaśniają, w jaki sposób 'mldivide' implementuje różne algorytmy i wybiera odpowiednią w oparciu o charakterystykę macierzy wejściowej. – Amro

3

myślę, że to jest to, czego szukasz:

A = rand(3,3); % Random 3-by-3 matrix 
b = rand(3,1); % Random 3-by-1 vector 
[L,U] = lu(A); % LU decomposition 
x = U\(L\b) % Solve system of equations via mldivide (same as x = A\b or x = (L*U)\b) 
err = L*U*x-b % Numerical error 

Układ równań został rozwiązany za pomocą mldivide. Możesz również spojrzeć na qr, która implementuje QR decomposition zamiast dekompozycji LU. qr może bezpośrednio rozwiązać problemy typu A*x = b i jest bardziej wydajny. Zobacz także linsolve. W przypadku systemów symbolicznych nadal możesz używać mldivide lub spróbować linalg::matlinsolveLU w MuPAD.

+0

zobacz mój zredagowany post, proszę – URL87

+0

Dzięki za linki @Amro. – horchler