w Matlabie, jakie są różnice między Linsolve a miliivide?

10

w matlabie zarówno linsolve , jak i miliiwide są używane do rozwiązywania układu równań liniowych we wszystkich określonych, zbyt określonych i nieokreślonych przypadkach.

Czytając ich dokumenty, zastanawiałem się, jakie są między nimi różnice? Czy używają prawie tych samych algorytmów rozkładu macierzy i trójkątowania w trzech przypadkach?

Jeśli A ma właściwości w opts, linsolve jest szybszy niż mldivide, ponieważ linsolve nie wykonuje żadnych testów w celu sprawdzenia, czy A ma określone właściwości

Czy mldivide przeprowadza te same testy, aby sprawdzić, czy A ma specjalne właściwości? A może miliiwide traktuje je jako ogólny przypadek bez specjalnych właściwości?

Dzięki!

Tim
źródło

Odpowiedzi:

16

Oba są bezpośrednimi solverami do rozwiązywania układów liniowych (w przeciwieństwie do solvera iteracyjnego).

mldivideZAZAx=bmldivide

mldividedla matryc kwadratowych: jeśli A jest symetryczny i ma rzeczywiste, dodatnie elementy ukośne, MATLAB próbuje dokonać rozkładu na czynniki Choleskiego. Jeśli rozkład na czynniki pierwsze nie powiedzie się, MATLAB przeprowadzi symetryczne, na czas nieokreślony rozkład na czynniki pierwsze. Jeśli A jest górną Hessenbergiem, MATLAB stosuje eliminację Gaussa, aby zredukować układ do macierzy trójkątnej. Jeśli A jest kwadratem, ale nie jest permutowanym trójkątnym, symetrycznym i dodatnim określonym, ani Hessenbergiem, to MATLAB przeprowadza ogólną faktoryzację trójkątną z wykorzystaniem faktoryzacji LU z częściowym przestawieniem

linsolve dla matryc kwadratowych: faktoryzacja LU z częściowym przestawieniem

mldividea linsolvedla matryc prostokątnych: faktoryzacja QR

linsolveoptsZA

opts.POSDEF = true; linsolve(A,b,opts)

xZAopts

Jeśli określone kryteria są spełnione linsolvei mldividewykorzystaj ten sam proces faktoryzacji. Na przykład, dla gęstego, pozytywnego określonego systemu spełniającego określone właściwości, lub masz zbyt określony system i oba wykonują dopasowanie najmniej kwadratowe.

Ponadto linsolvemoże również wykonywać obliczenia symboliczne . Jest to przydatne, gdy masz mały, nieokreślony system, który ma nieskończoną liczbę rozwiązań. linsolvepozwala rozwiązać symbolicznie, mldividenie można tego zrobić. Jeśli jednak zmienne nie są zadeklarowane symbolicznie mldividei linsolvedałby ten sam komunikat ostrzegawczy: „Matryca ma szczególną precyzję działania”.

Wreszcie, linsolvenie obsługuje rzadkich systemów, takich jak następująca macierz (niebieska kropka oznacza niezerowe wejście). Chociaż mldividemoże obsługiwać rzadkie systemy solidnie, gdy rozmiar jest mniejszy niż 200k na 200k. rzadki przykład

Shuhao Cao
źródło