2009-09-14 30 views

Odpowiedz

30

Niedokładność, o której wspomniałem, dotyczy metody INV, a nie jej implementacji przez MATLAB. Powinieneś używać QR, LU lub innych metod do rozwiązywania układów równań, ponieważ metody te zwykle nie wymagają podniesienia do kwadratu numeru warunku danego systemu. Używanie inv zwykle wymaga operacji, która traci celność przez podniesienie do kwadratu numeru warunku oryginalnego systemu.

--Loren

19

Myślę, że celem bloga Lorena nie jest to, że funkcja MATLABa inv jest szczególnie wolna lub bardziej niedokładna niż jakakolwiek inna implementacja numeryczna obliczania odwrotności macierzy; raczej, że w większości przypadków sama odwrotność nie jest potrzebna i można postępować w inny sposób (np. rozwiązywanie liniowego układu przy użyciu \ - operator odwrotnego ukośnika - zamiast obliczać odwrotność).

+1

Co więcej, operator ukośnika odwrotnego (ogólnie) daje dokładniejsze wyniki niż inv (A) * b: wybiera odpowiedni algorytm do rozwiązania A * x = b. – Martijn

+0

Aby być jawnym dla studentów tam, chcesz napisać 'x = A \ b' zamiast' x = inv (A) * b' w celu rozwiązania układu liniowego Ax = b. Obliczanie odwrotności A nie jest konieczne, niezbyt mocne i nie szybkie. W ogromnym udziale wzorów matematycznych, gdzie widzisz A^-1, algorytm może być zaimplementowany BEZ obliczania odwrotności A. To znaczy, dla małych macierzy pełnych szeregów, obliczanie inv (A) będzie prawie zawsze być w porządku. W przypadku dużych macierzy lub źle uwarunkowanych macierzy może to powodować problemy. –

0

inv() pewnością jest wolniejszy niż \ chyba że masz wiele wektorów z prawej strony, aby rozwiązać za. Jednak rada MathWorks dotycząca niedokładności wynika z nadmiernie zachowawczego powiązania w wyniku numerycznej algebry liniowej. Innymi słowy, inv() NIE jest niedokładne. Łącze omawia ponadto: http://arxiv.org/abs/1201.6035

Wiele powszechnie stosowanych podręcznikach prowadzić czytelnika wierzyć, że rozwiązanie układu równań liniowych Ax = B przez pomnożenie przez wektor b komputerowej INV przeciwnym (A) jest niedokładna. Praktycznie wszystkie inne podręczniki dotyczące analizy numerycznej i numerycznej algebry liniowej odradzają stosowanie obliczonych odwrotności bez stwierdzenia, czy jest to dokładne, czy nie. W rzeczywistości, przy rozsądnych założeniach, jak obliczana jest odwrotność, x = inv (A) * b jest tak dokładne, jak rozwiązanie obliczone przez najlepsze stabilne stabilne wstecz.