matematykaszkolna.pl
transpozycja Mariusz: Czy macierzy ATA jest symetryczna i dodatnio określona Czy mnożąc równanie macierzowe Ax=B lewostronnie przez macierz transponowaną unikniemy częściowego wyboru elementu podstawowego
13 lut 09:27
g: ATA = ATA xT(ATA)x = (Ax)T(Ax) ≥ 0 więc ATA jest symetryczna i dodatnio określona.
13 lut 11:56
g: poprawka: (ATA)T = ATA
13 lut 11:57
Mariusz: Oczywiście zakładamy że A jest kwadratowa i nieosobliwa (wyznacznik różny od zera) A czy to prawda że dla takiej macierzy nie jest konieczny wybór elementu podstawowego ? (Wybór elementu podstawowego następuje wtedy gdy w eliminacji szukamy w kolumnie elementu największego co do wartości bezwzględnej i zamieniamy wiersze) Przypuśćmy że mamy układ równań w postaci macierzowej Ax=B W jaki sposób przekształcić ten układ równań aby mieć układ równań z macierzą silnie diagonalnie dominującą
13 lut 19:28
Pytający: Zgaduję, że czytałeś: http://wazniak.mimuw.edu.pl/index.php?title=MN05 "Dla niektórych ważnych klas macierzy wiadomo, że rozkład LU jest wykonalny bez wyznaczania elementu głównego, co istotnie może zmniejszyć całkowity czas działania algorytmu. Jest tak m.in. dla macierzy: • symetrycznych, dodatnio określonych • silnie diagonalnie dominujących" Zatem, jeśli A jest nieosobliwa, dla równania: ATAx=ATb, rozkład LU wykonasz bez konieczności wyboru elementu głównego.
13 lut 20:21
Mariusz: Z grubsza to przeczytałem i kiedyś nawet napisałem kod Pascalowy na podstawie ich pseudokodu No tak ale jak to pokazać (to że nie trzeba dokonywać wyboru elementu głównego) W sumie mnożenie przez macierz transponowaną zwiększy nam złożoność pamięciową co nie gra roli przy odwracaniu macierzy Mnożenie przez macierz transponowaną zwiększy nam złożoność czasową ale jest łatwiejsze do zapisania w języku programowania Przy odwracaniu macierzy metodą eliminacji Gaussa na wejściu mamy daną macierz blokową A | I i chcemy uzyskać macierz blokową I I A−1 Można by na wejściu podać macierz ATA | AT i jeśli udałoby się pokazać że to co na ważniaku piszą jest prawdą to można byłoby uniknąć wyboru elementu głównego
13 lut 21:35
Mariusz: Przydałaby się edycja wpisów Pomnożenie lewostronne przez transpozycję macierzy spowoduje że rozkład Choleskiego będzie wykonalny jednak rozkład LU jest preferowany bo nie używa pierwiastków
13 lut 21:44
Mariusz: @ Pytający czytałeś ten artykuł na ważniaku do którego dałeś odnośnik ? Jeśli czytałeś to powinieneś zauważyć że mają tam kilka drobnych błędów w pseudokodzie Poza tym według mnie ich artykuł jest niedokończony Pomijając te kilka drobnych błędów ich pseudokod jest czytelny i łatwo napisać na jego podstawie kod w ulubionym języku programowania
19 lut 19:05
Pytający: Czytałem. Aha. Aha. Aha.
20 lut 17:46
Mariusz: I co nie znalazłeś błędów lub braków w ich pseudokodzie ? Wg mnie jest ich kilka Pewnie czytałeś tak samo jak kod kulek który jakiś czas temu umieściłem do dokończenia
20 lut 18:42
Mariusz: 1. Czy aby na pewno dobrze obliczają elementy macierzy L ? 2. Czy na pewno dobrze zapamiętują pozycje jedynek w macierzy permutacji ? 3. Co z permutacją wektora wyrazów wolnych Nie brakuje ci jej u nich ? https://www.geeksforgeeks.org/reorder-a-array-according-to-given-indexes/ Jeśli chodzi o pierwszy sposób to wolałbym nie używać dodatkowej tablicy zresztą na ten pomysł już sam wpadłem Jeśli chodzi o drugi sposób to wolałbym nie modyfikować tablicy indeksów bo później może być potrzebna W Pascalu ten ich drugi pomysł może jakoś by przeszedł bo parametry w nagłówku funkcji bądź procedury mogą być poprzedzone słówkiem var , const albo mogą występować bez żadnego z nich W twoim ulubionym C tablica jest wskaźnikiem i te ich pomysły nie przejdą Jeżeli chodzi o permutację wektora wyrazów wolnych to bez dodatkowej pamięci nie może trwać dłużej niż O(n2)
20 lut 19:12
Pytający: 1. Tak. 2. Tak. 3. Nie brakuje, przecież ten pseudokod znajduje rozkład PA=LU. Jedynie trzeba wciąż pod uwagę, że w pseudokodzie P oznacza wektor (bo wystarczy zapamiętać permutację jako wektor), a nie macierz, ale jest to wspomniane. Wtedy rozwiązując już równanie Ly=Pb, w pseudokodzie w stylu C (ponoć moim ulubionym) wartość (Pb)k możesz uzyskać w ten sposób: b[ P[k] ]; Toteż wektora wyrazów wolnych b w ogóle nie musisz permutować, bo do odpowiednich wartości wektora Pb masz dostęp w czasie stałym. Tymczasem milknę, gdyż wystarczy mi tych insynuacji.
20 lut 20:46
Mariusz: Insynuacji ... to mnie rozbawiłeś Co nie jest twoim ulubionym A kto szczekał na Pascala ? Odpowiadając na postawione przeze mnie pytania pokazałeś że nie czytasz treści do których dajesz odnośniki Przekręcasz też zdania z moich wpisów Zatem gdzie masz te insynuacje ? Próbowałem napisać procedurę rozwiązującą te układy z macierzami trójkątnymi bez permutowania wyrazów wolnych odwołując się do elementów w wyżej pokazany sposób ale otrzymywałem błędne wyniki Ciekawe po co dali adres do marudzenia skoro nie reagują na to marudzenie Gdyby przepisać dosłownie ten ich pseudokod na kod w języku programowania to mielibyśmy błędy , np dzielenie przez zero itp a jeśli nawet program by się zatrzymał to zwróciłby błędny wynik Skoro nie czytałeś tego co na tym ważniaku napisali to tym bardziej nie przepisałeś ich pseudokodu na język programowania Jakiś czas temu działający kod rozkładu LU=PA można było ściągnąć razem z książką po angelsku (dali go w niej jako przykład czyli po waszemu gotowiec)
20 lut 22:43