matematykaszkolna.pl
Program do wartości własnych Mariusz: Maciess , jak będziesz miał trochę więcej czasu to odpisz Oto co do tej pory napisałem https://ideone.com/c7vgTD https://ideone.com/jcmdLu Redukcję macierzy do postaci Hessenberga zrealizowałem za pomocą eliminacji Gaussa choć wolałbym użyć odbić Householdera jednak nie znalazłem dobrze opisanego ani sposobu konstrukcji macierzy odbić Householdera jak i efektywnego sposobu mnożenia przez macierze odbić (zarówno lewostronnego jak i prawostronnego) Redukcję macierzy do postaci Hessenberga za pomocą eliminacji Gaussa znalazłem w książce Z Fortuna B Macukow J Wąsowski Metody numeryczne Jeżeli chodzi o rozkład QR to rozpisałem sobie zarówno lewostronne jak i prawostronne mnożenie przez macierze obrotów Okazało się że lewostronne mnożenie przez macierze obrotów modyfikuje tylko dwa wiersze a prawostronne mnożenie przez macierze obrotów modyfikuje tylko dwie kolumny W przypadku mnożenia macierzy to wystarczyły trzy pętle ale aby dobrze działało trzeba było macierz skopiować Wiem że mnożenie macierzy można przyśpieszyć ale kosztem zwiększenia złożoności pamięciowej Przydałoby się dopisać jakieś przesunięcie ale iloraz Rayleigha nie daje gwarancji zbieżności a poza tym podobno wektor dla którego liczymy ten iloraz powinien dążyć do wektora własnego Przesunięcie Wilkinsona natomiast działa tylko dla macierzy symetrycznych Zastanawiam się nad tzw podwójnym przesunięciem ale jak je zrealizować Chciałbym przybliżać zespolone wartości własne unikając arytmetyki zespolonej rozwiązując równanie kwadratowe z klatek 2x2 występujących na diagonali Co z deflacją ? Jak rozpoznać że można dokonać deflacji i jak ją zrealizować w miejscu ? Zamiana kolumn i wierszy albo zastosowanie podobnego pomysłu co w iteracji sortowania przez wstawianie może popsuć postać Hessenberga a także ostateczną postać Schura Ostatnio znalazłem też w tablicach Mizerskiego wzór na współczynniki wielomianu charakterystycznego jednak okazało się że Mizerski pokręcił coś z indeksami ale udało mi się to poprawić Tr(Am) = ∑i=1nλim zatem ślad potęgi macierzy daję nam sumę jednakowych potęg a my potrzebujemy funkcji symetrycznych podstawowych bo to one występują we wzorach Vieta Suma jednakowych potęg jest funkcją symetryczną więc możliwe jest wyrażenie jej za pomocą funkcji symetrycznych podstawowych Wzory Newtona−Girarda wiążą funkcje symetryczne podstawowe z sumą jednakowych potęg Tutaj mamy jak je wyprowadzić http://matwbn.icm.edu.pl/ksiazki/mon/mon11/mon1109.pdf Wzory Newtona−Girarda dają nam taki wzór rekurencyjny kek = ∑i=1k(−1)i−1ek−ipi
 1 
ek =

(∑i=1k(−1)i−1ek−ipi)
 k 
 −1 
ek =

(∑i=1k(−1)iek−ipi)
 k 
 −1 
ek =

(∑i=1k(−1)i−k(−1)kek−ipi)
 k 
 −1 
(−1)kan−k =

(∑i=1k(−1)kan−(k−i)Tr(Ai))
 k 
 1 
an−k = −

(∑i=1k(−1)kan−k+iTr(Ai))
 k 
Niech m=n−k m=n−k k=n−m Mamy zatem an = 1
 1 
am = −

(∑j=1n−maj+mTr(Aj)) 0 ≤ m < n
 n−m 
I teraz trzeba by policzyć pierwiastki wielomianu o wyżej podanych współczynnikach Samo obliczenie współczynników wielomianu charakterystycznego w ten sposób wymaga O(n4) czasu i O(n2) pamięci Dodatkowo potęgowanie macierzy może zwiększyć błędy numeryczne a zadanie poszukiwania zer wielomianu charakterystycznego może być źle uwarunkowane Napisałem to w C# ze zgodnością z C# 5 bo każdy użytkownik Windowsa ma kompilator C# i maszynę wirtualną do interpretowania kodu bajtowego Pod tym względem C# jest dość podobny do Javy która była kiedyś w Linuksach
9 lip 05:04