Języki Modelowania i Symulacji 2018 Arytmetyka zmiennoprzecinkowa w standardzie IEEE Wykład 3 dr inż. Marcin Ciołek Katedra Systemów Automatyki Wydział ETI, Politechnika Gdańska
Języki Modelowania i Symulacji dr inż. Marcin Ciołek Katedra Systemów Automatyki Konsultacje: wtorek 11:15-13 Pokój: ETI EA 546 e-mail: marcin.ciolek@pg.edu.pl e-wizytówka: http://pg.edu.pl/marciole
O czym będziemy mówili 1. Przypomnienie wiadomości 2. Liczby zmiennoprzecinkowe: standard IEEE 754 liczby znormalizowane, zdenormalizowane niedomiar, przepełnienie wartości specjalne NaN, Inf działania na liczbach zmiennoprzecinkowych 3. Przykłady nieoczekiwanych wyników obliczeń 4. Uwarunkowanie zadania wielomian Wilkinsona macierz Hilberta 5. Podsumowanie
Literatura Dokumentacja MATLABa, https://www.mathworks.com/help/matlab/ Moler, Cleve. "Floating Points" MATLAB News and Notes. Fall, 1996. [https://au.mathworks.com/company/newsletters/news_notes/pdf/fall96cleve.pdf] Moler, Cleve. Numerical Computing with MATLAB. Natick, MA: The MathWorks, Inc., 2004.
O czym będziemy mówili 1. Przypomnienie wiadomości 2. Liczby zmiennoprzecinkowe: standard IEEE 754 liczby znormalizowane, zdenormalizowane niedomiar, przepełnienie wartości specjalne NaN, Inf działania na liczbach zmiennoprzecinkowych 3. Przykłady nieoczekiwanych wyników obliczeń 4. Uwarunkowanie zadania wielomian Wilkinsona macierz Hilberta 5. Podsumowanie
What You Get Is Not What You Expect W pakiecie MATLAB prawie wszystkie operacje matematyczne wykonywane są w artytmetyce zmiennoprzecinkowej z podwójną precyzją zgodnie z standardem IEEE 754. Ponieważ liczby reprezentowane są w komputerach ze skończoną precyzją, czasem obliczenia dają matemtycznie nieoczkiwane wyniki. Pamiętajmy, że te wyniki nie są spowodowane błędami w pakiecie MATLAB. skończona precyzja błędy zaokrągleń utrata precyzji kolejność wykonywania działań nierównomierna odległość pomiędzy liczbami przepełnienie niedomiar?
Przypomnienie Reprezentacja liczby w układzie dziesiętnym 9.90625 = 9 10 0 + 9 10 1 + 0 10 2 + 6 10 3 + 2 10 4 + 5 10 5 Reprezentacja liczby w układzie binarnym 9.90625 = (1001.11101) 2 = 1 2 3 + 0 2 2 + 0 2 1 + 1 2 0 + 1 2 1 + 1 2 2 + 1 2 3 + 0 2 4 + 1 2 5 Uwaga! liczba 0.1 ma nieskończone rozwinięcie w układzie binarnym Zaokrąglenie do 30 miejsca po przecinku 0.1 = (0.00011001100110011 ) 2 0.100000001490116119384765625
Standard IEEE 754 Postać zmiennopozycyjna liczby x 0 w układzie dwójkowym (sc 1 c p f 1 f t ) 2 s 0(+), 1( ) znak m [1,2) mantysa c wykładnik (cecha) b dodatnie przesunięcie(ang. bias) x = ( 1) s m 2 c m = 1 + f = 1 + f j 2 j = (1. f 1 f 2 f 3 ) 2 f j {0, 1} j=1 Przykład pojedyncza precyzja: cecha 8 bitów dla b = 127 zakres wykładników od <-126,127> podwójna precyzja: cecha 11 bitów dla b = 1023 zakres wykładników od <-1022,1023> Zapamiętaj Wyróżniamy dwa rodzaje liczb zmiennoprzecinkowych: 32-bitowe (pojedynczej precyzji - ang. single precision) 64-bitowe (podwójnej precyzji - ang. double precision)
Standard IEEE 754 Obliczyć wartość dziesiętną liczby zmiennoprzecinkowej pojedynczej precyzji: 01000010110010000000000000000000 Kod binarny dzielimy na poszczególne pola zawierające kolejno znak, cechę oraz bity ułamkowe mantysy Przykład 0 10000101 10010000000000000000000 s cecha bity ułamkowe mantysy s = 0 liczba jest dodatnia c = 10000101 (BIAS = 127) = 133-127 = 6 m = 01.10010000000000000000000 (U1) = 1.5625 x = ( 1) s m 2 c m = 1 + f = 1 + f j 2 j = (1. f 1 f 2 f 3 ) 2 f j {0, 1} j=1 Obliczamy wartość liczby x = ( 1) 0 1.5625 2 6 = 100
Standard IEEE 754 Standard IEEE 754 definiuje dwa zasadnicze formaty reprezentacji zmiennoprzecinkowej liczb rzeczywistych oraz określa reguły wykonywania działań arytmetycznych Precyzja Standard IEEE 754 Pojedyncza Podwójna Liczba bitów wykładnika 8 11 Liczba bitów mantysy 23 52 Zapamiętaj Liczby pojedynczej precyzji IEEE 754 oferują precyzję 7 cyfr dziesiętnych. Zatem nadają się one do bardzo prostych rachunków. Przesunięcie (bias) 127 1023 Orientacyjny zakres 10 38 10 38 10 308 10 308 Orientacyjna precyzja 6 10 8 10 16 Liczby podwójnej precyzji IEEE 754 oferują precyzję 15...16 cyfr dziesiętnych. Zatem nadają się do dokładnych obliczeń naukowych i inżynierskich. MATLAB wykorzystuje podwójną precyzję w arytmetyce zmiennoprzecinkowej ε = 2.2204 10 16 = 2 52 10
Standard IEEE 754 Obliczyć wartość największej liczby zmiennoprzecinkowej pojedynczej/podwójnej precyzji Pojedyncza precyzja Największa cecha c = 11111111 wartość specjalna c = 11111110 (BIAS=127) c = 254 127 = 127 Największa mantysa m = 01.11111111111111111111111 (U1) m = (2 24 1) / 2 23 Obliczamy wartość największej liczby x = (2 24 1) / 2 23 2 127 3.4 10 38 Podwójna precyzja Największa cecha c = 11111111110 (BIAS=1023) c = 2046 1023=1023 Największa mantysa m = 01.1111111111111111111111111111111 111111111111111111111 (U1) m = (2 53 1) / 2 52 Obliczamy wartość największej liczby x = (2 53 1) / 2 52 2 1023 1.8 10 308
Standard IEEE 754-wartości specjalne W formacie IEEE 754 nie można zapisać wartości 0, ponieważ mantysa ma domyślną część całkowitą równą 1 Wartość zdenormalizowana liczba otzymana gdy wszystkie bity cechy mają wartość 0, lecz mantysa zawiera bity o wartościach 1. W takim przypadku mantysa nie posiada domyślnej części całkowitej 1 Wartość specjalna: 0 c = 00000000 (BIAS=127) m = 01.00000000000000000000000 (U1) x = m 2 126 = 0 Najmniejsza liczba pojedyncza precyzja m = 2-23 x = 2-23 2-126 = 2-149 x = ±1,4 10-45 podwójna precyzja m = 2-52 x = 2-52 2-1022 = 2-1074 x = ±4,9 10-324 Zapamiętaj Wartości zdenormalizowane pozwalają przedstawiać bardzo małe liczby zmiennoprzecinkowe, które bez tej opcji zostałyby zaokrąglone do 0. Zwiększa to precyzję wykonywanych operacji zmiennoprzecinkowych i jest cechą bardzo pożądaną.
Standard IEEE 754: NaN i Inf Wartosći specjalne (NaN - Not a Number Nie Liczba, Inf - Infinity) propagują się w obliczeniach zgodnie z poniższymi regułami działanie wynik działanie wynik 1+NaN NaN Inf Inf NaN NaN+NaN NaN Inf+Inf Inf NaN NaN NaN Inf Inf Inf 1>NaN 0 Inf>1 1 1==NaN 0 Inf<0 0 NaN==NaN 0 Inf ( Inf) Inf NaN NaN 1 Inf/Inf NaN NaN NaN 0 Inf==Inf 1 2 NaN 1 Inf<Inf 1 Standard IEEE 754 pozwala reprezentować dodatnią i ujemną nieskończoność, jest to zależne od pola znaku. Cecha posiada wszystkie bity ustawione na 1, a bity mantysy są wyzerowane. Standard IEEE 754 definiuje dwie specjalne wartości, które nie reprezentują liczb tzw. ciche - QNaN (ang. Quiet NaN) lub głośne SNaN (ang. Signaling NaN). W obu przypadkach cecha zawiera same 1. Jeśli najstarszy bit ułamkowy mantysy jest ustawiony na 1/0, to kod reprezentuje cichą/głośną nieliczbę.
Przepełnienie i Niedomiar Rozważmy system dwójkowy, w którym zarówno na cechę, jak i na mantysę, przeznaczono po dwa bity (p = 2; t = 2). Przyjmijmy b = 1, dzięki czemu 1 c b 2 Niech x > 0 i x = m 2 c b gdzie 1 m < 2 m {(1.00) 2, (1.01) 2, (1.10) 2, (1.11) 2 } = {1, 1.25, 1.5, 1.75} 2 c b {0.5, 1, 2, 4} x {0.5, 0.625, 0.75, 0.875, 1, 1.25, 1.5, 1.75, 2, 2.5, 3, 3.5, 4, 5, 6, 7} Co powiesz o rozkładzie liczb?
Przykład: eps Funkcja eps podaje odległość do najbliższej kolejnej liczby zmiennoprzecinkowej Pojedyncza precyzja eps(single(1)) >> 1.1921e-07 eps(single(10)) >> 9.5367e-07 eps(single(100)) >> 7.6294e-06 eps(single(1000)) >> 6.1035e-05 eps(single(10000)) >> 9.765e-04... eps(single(10^10)) >> 1024 eps(single(10^14)) >> 8388608 eps(single(10^16)) >> 1.0737e+09 eps(single(10^18)) >> 6.8719e+10 eps(single(10^20)) >> 8.7961e+12 Podwójna precyzja eps(1) >> 2.2204e-16 eps(10) >> 1.7764e-15 eps(100) >> 1.4211e-14 eps(1000) >> 1.1369e-13 eps(10000) >> 1.8190e-12... eps(10^10) >> 1.9073e-06 eps(10^14) >> 0.0156 eps(10^16) >> 2 eps(10^18) >> 128 eps(10^20) >> 16384 10^20+10000-10^20 =? Zapamiętaj Stosowanie podwójnej precyzji zwiększa dokładność prowadzonych obliczeń 15
Przykład: eps 16
Przepełnienie i Niedomiar Zjawisko przepełnienia powstaje, gdy dla liczby x, c > c max, wtedy liczba x jest reprezentowana przez specjalną wartość, nieskończoność ze znakiem ± Zjawisko niedomiaru powstaje, gdy dla liczby x, c < c min, wtedy liczba x jest reprezentowana przez zero
Przepełnienie i Niedomiar Obliczanie normy euklidesowej wektora x = [x 1,, x n ] R n x 2 = x 1 2 + + x n 2 Jeśli x = [x 1 x 2 ] to zjawisko przepełnienia wystąpi, gdy x 1 = 10 200 i x 2 = 1. Rozwiązaniem problemu może być wstępna normalizacja danych tak, by wszystkie elementy wektora nie były większe od 1. Niech M = max{ x i : i = 1,, n} x 2 = x 1 2 + + x n 2 = M x 1 M 2 + + x n M 2
Reprezentacja zmiennopozycyjna Liczby zapisane przy użyciu takiej sekwencji bitów (sc 1 c p f 1 f t ) 2 należą do zbioru liczb maszynowych Ψ. Są to jedyne dokładnie zapisywalne w komputerze liczby rzeczywiste, pozostałe będą musiały zostać wyrażone z wykorzystaniem liczb maszynowych. Niech x > 0 i x = m 2 p gdzie 1 m < 2 x = (1. f 1 f 2 ) 2 2 p Zaokrąglenie w dół x = (1. f 1 f 2 f t ) 2 2 p Zaokrąglenie w górę x + = [ 1. f 1 f 2 f t 2 + 2 t ] 2 p x + x = 2 p t
Reprezentacja zmiennopozycyjna Niech fl(x) oznacza liczbę maszynową najbliższą względem x błąd względny zaokrąglenia x fl x x 2 t ε = 2 t precyzja arytmetyki fl x = x 1 + δ, gdzie δ ε δ = fl x x x
Reprezentacja zmiennopozycyjna Wyniki działań arytmetycznych w komputerze spełniają związki: Niech liczby x, y Ψ, a symbol {+,,, } fl x y = x y 1 + δ, przy czym δ ε Niech liczby x, y Ψ, a symbol {+,,, } fl fl x fl y = x 1 + δ 1 y 1 + δ 2 1 + δ 3, δ i ε
Reprezentacja zmiennopozycyjna Niech liczby x, y, z Ψ fl x y + z = x fl y + z 1 + δ 1 = δ 1 ε x y + z 1 + δ 1 1 + δ 2 = δ 2 ε x y + z 1 + δ 1 + δ 2 + δ 1 δ 2 x y + z 1 + δ 1 + δ 2 = x y + z 1 + δ 3 δ 3 2ε Dlaczego usunięto iloczyn δ 1 δ 2?
O czym będziemy mówili 1. Przypomnienie wiadomości 2. Liczby zmiennoprzecinkowe: standard IEEE 754 liczby znormalizowane, zdenormalizowane niedomiar, przepełnienie wartości specjalne NaN, Inf działania na liczbach zmiennoprzecinkowych 3. Przykłady nieoczekiwanych wyników obliczeń 4. Uwarunkowanie zadania wielomian Wilkinsona macierz Hilberta 5. Podsumowanie
What You Get Is Not What You Expect Liczba dziesiętna 4/3 nie jest dokładnie reprezentowana jako liczba binarna Przykład 1 e = 1 3*(4/3 1) e = 2.2204e-16 Podobnie, 0.1 nie jest dokładnie reprezentowane jako liczba binarna Przykład 2 e = 10*(7.1 7) 1 e = 3.5527e-15 Ciekawostka e = 0:0.1:1 e = 0; e = e + 0.1?
What You Get Is Not What You Expect Arytmetyka zmiennoprzecinkowa nie jest łączna i nie jest też rozdzielna x + y + z x + y + z zyz xyz x y + z xy + xz Kolejność wykonywania operacji ma znaczenie w obliczeniach i wpływa na końcowy wynik Przykład 3 b = 1e 16 + 1 1e 16; c = 1e 16 1e 16 + 1;? b == c ans = logical 0
What You Get Is Not What You Expect Istnieją luki pomiędzy liczbami zmiennoprzecinkowymi. Gdy liczby stają się duże, luki stają się zauważalne Przykład 4 (2^53 + 1) - 2^53 ans = 0? Przykład 5 2^73 + 1000000-2^73 ans = 0 Przykład 6 2^73-2^73 + 1000000 ans = 1000000
What You Get Is Not What You Expect Ponieważ liczba pi nie jest dokładnie liczbą π Przykład 7 sin(pi) ans = 1.224646799147353e-16?
Catastrophic Cancellation Załóżmy że chcemy dodać lub odjąć dwie dodatnie liczby zmiennoprzecinkowe x 1, x 2, x 1 x 2 x 1 = m 1 2 c 1 x 2 = m 2 2 c 2 x 1 ±x 2 = (m 1 ± m 2 2 c 2 c 1 )2 c 1? W szczególnym przypadku, jeśli c 1 c 2 jest większe niż t (liczba cyfr mantysy), to po denormalizacji mantysa będzie miała wartość 0, a liczba o mniejszym wykładniku nie wpłynie na wynik dodawania bądź odejmowania Gdy wykonywane są odejmowania z niemal równymi liczbami, czasami może wystąpić nieoczekiwane zmniejszenie liczby cyfr znaczących. Jest to spowodowane utratą precyzji, która sprawia, że różnica pomiędzy liczbami staje się nieistotna
Catastrophic Cancellation Jako przykład sytuacji utraty cyfr znaczących rozważmy odejmowanie dwóch bliskich liczb x = 0.3721478693 y = 0.3720230572 x y = 0.0001248121 Jeśli te obliczenia byłyby wykonane na komputerze dziesiętnym z pięciocyfrowymi mantystami, to mielibyśmy następujące zaokrąglenia fl(x) = 0.37215 fl(y) = 0.37202 fl(x) fl(y) = 0.00013 Czy otrzymany błąd względny jest duży czy mały? δ x y fl x fl y x y = 0.0001248121 0.00013 0.0001248121 0.04
Catastrophic Cancellation Nie możemy dzielić przez zero Przykład 1 1/(sqrt(1e 16 + 1) 1) ans = Inf? Nieoczekiwane zachowanie algorytmu Przykład 2 x = (sqrt(1e 16 + 1) 1) if x > 0... else... end Inne Utrata własności macierzy (symetria, dodatnio określoność, odwracalność) Rekurencyjnie liczone wielkości (np. wariancja) mogą zacząć przyjmować ujemne wartości, podczas gdy powinny być zawsze dodatnie
Catastrophic Cancellation Ile miejsc zerowych będzie miała funkcja y(x) dla bardzo małych zmian argumentu x? Przykład 2 y x = (x 1) 4 y x = (x 1) 4 = x 4 4x 3 + 6x 2 4x + 1
Catastrophic Cancellation Ile miejsc zerowych będzie miała funkcja y(x) dla bardzo małych zmian argumentu x? Przykład 2 y x = (x 1) 4 y x = (x 1) 4 = x 4 4x 3 + 6x 2 4x + 1
Catastrophic Cancellation Rozważmy ciąg liczb rzeczywistych określony wzorem rekurencyjnym Przykład 3 x n + 1 = 13 3 x n 4 x n 1, 3 x 0 = 1, x(1) = 1 3, n 1 Łatwo pokazać, że n x(n) = 1 3
Catastrophic Cancellation Rozważmy ciąg liczb rzeczywistych określony wzorem rekurencyjnym Przykład 3 x n + 1 = 13 3 x n 4 x n 1, 3 x 0 = 1, x(1) = 1 3, n 1 Łatwo pokazać, że x(n) = 1 3 n n x1(n) x2(n) 0 1 1 1 0,333333 0,333333 2 0,111111 0,111111 3 0,037037 0,037037 4 0,012346 0,012346 5 0,004115 0,004115 6 0,001372 0,001372 7 0,000457 0,000457 8 0,000152 0,000152 9 5,08E-05 5,08E-05 10 1,69E-05 1,69E-05 11 5,64E-06 5,65E-06 12 1,88E-06 1,88E-06 13 6,26E-07 6,27E-07 14 2,06E-07 2,09E-07 15 5,64E-08 6,97E-08 16-2,99E-08 2,32E-08 n x1(n) x2(n) 17-2,05E-07 7,74E-09 18-8,48E-07 2,58E-09 19-3,40E-06 8,60E-10 20-1,36E-05 2,87E-10 21-5,44E-05 9,56E-11 22-0,00022 3,19E-11 23-0,00087 1,06E-11 24-0,00348 3,54E-12 25-0,01394 1,18E-12 26-0,05575 3,93E-13 27-0,22302 1,31E-13 28-0,89207 4,37E-14 29-3,56827 1,46E-14 30-14,2731 4,86E-15 31-57,0923 1,62E-15 32-228,369 5,40E-16 33-913,477 1,80E-16
Catastrophic Cancellation Powinniśmy unikać ryzykownego odejmowania bliskich sobie liczb y x = x 2 + 1 1 dla małych x odejmowanie bliskich sobie liczb spowoduje zmniejszenie liczby cyfr znaczących, rozwiązanie: y x = x 2 + 1 1 x 2 + 1 + 1 x 2 + 1 + 1 = x 2 x 2 + 1 + 1
Algebra liniowa Błędy zaookrągleń, błędy odejmowania niemal równych liczb oraz inne cechy arytemetyki zmiennoprzecinkowej łączą się, dając czasem zaskakaujące wyniki obliczeń przy rozwiązywaniu problemów algebry liniowej MATLAB ostrzega jeżeli dana macierz A jest źle uwarunkowana, co oznacza że system, opisany układem równań liniowych Ax = b, może być czuły na małe zaburzenia Przykład 1 A = diag([2 eps]); b = [2; eps]; y = A\b; Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.110223e-16. A = 2 0 0 eps y = A 1 b b = 2 eps Zapamiętaj Wskaźnik uwarunkowania determinuje w znacznej mierze przebieg rozwiązania danego zadania niezależnie od użytej w tym celu metody
O czym będziemy mówili 1. Przypomnienie wiadomości 2. Liczby zmiennoprzecinkowe: standard IEEE 754 liczby znormalizowane, zdenormalizowane niedomiar, przepełnienie wartości specjalne NaN, Inf działania na liczbach zmiennoprzecinkowych 3. Przykłady nieoczekiwanych wyników obliczeń 4. Uwarunkowanie zadania wielomian Wilkinsona macierz Hilberta 5. Podsumowanie
Złe uwarunkowanie zadania Jeśli niewielkie względne zmiany danych zadania powodują duże względne zmiany jego rozwiązania, to takie zadanie nazywamy źle uwarunkowanym Wielkości charakteryzujące wpływ zaburzeń danych na odkształcenia rozwiązania nazywamy wskaźnikami uwarunkowania zadania Wskaźnik uwarunkowania determinuje w znacznej mierze przebieg rozwiązania danego zadania niezależnie od użytej w tym celu metody?
Wskaźnik uwarunkowania funkcji Zadanie polega na obliczeniu wartości funkcji f(x) w punkcie x Pytanie: Jak małe zaburzenie wartości x wpływa na f (x)? f x + h f(x) hf (x) Wielkość względna zaburzenia wartości funkcji jest równa f x + h f(x) f(x) hf x f x = xf x f x h x Wskaźnik uwarunkowania wynosi xf x f x
Wielomian Wilkinsona Wielomian Wilkinsona jest specyficznym wielomianem, użyty przez Jamesa H. Wilkinsona w 1963 roku, jako ilustracyja stopnia trudności problemu poszukiwania miejsc zerowych wielomianu: położenie pierwiastków wielomianu może być bardzo czułe na małe zmiany współczynnikow wielomianu 20 f x = k=1 x k = x 1 x 2 x 20 g x = sgn f x log(1 + f(x) ) sign(x) 1 element x jest > 0 0 element x jest == 0-1 element x jest < 0
Wielomian Wilkinsona a i f x = a 1 x 20 + a 2 x 19 + + a 20 x + a 21 wartość a i wartość a 1 1 a 11 1307535010540395 a 2-210 a 12-10142299865511450 a 3 20615 a 13 63030812099294896 a 4-1256850 a 14-311333643161390640 a 5 53327946 a 15 1206647803780373360 a 6-1672280820 a 16-3599979517947607200 a 7 40171771630 a 17 8037811822645051776 a 8-756111184500 a 18-12870931245150988800 a 9 11310276995381 a 19 13803759753640704000 a 10-135585182899530 a 20-8752948036761600000 a 21 2432902008176640000 funkcja poly znajduje współczynniki wielomianu r = [1 2 20] pierwiastki wielomianu a = poly(r) współczynniki wielomianu funkcja roots znajduje pierwiastki wielomianu a = [a 1 ; a 2 ; ; a 21 ] współczynniki wielomianu r = roots(a) pierwiastki wielomianu funkcja polyval oblicza wartość wielomianu y = polyval(a,x), x może być wektorem funkcja conv mnoży wielomiany u = [1 1]; współczynniki wielomianu u v = [1 2]; współczynniki wielomianu v w = conv(u, v) w = [1 3 2] współczynniki wielomianu w
Wielomian Wilkinsona Jak zmieni się położenie pierwiastków wielomianu jeżeli zwiększymy wartość współczynnika a 1 = 1 przy x 20 o 2 23? Nowa wartość współczynnika to a 1 = 1.0000001192. Czy taka mała zmiana spowoduje proporcjonalne zmiany przy rozkładzie miejsc zerowych??
Wielomian Wilkinsona k nowe położenie pierwiastków 1 1 2 2 3 3 4 4 5 5 6 6 7 7.002 8 7.950 9 9.019 0.601i 10 9.019+ 0.601i k nowe położenie pierwiastków 11 10.435 + 1.750i 12 10.435 1.750i 13 12.326 2.99i 14 12.326 + 2.99i 15 14.978 4.041i 16 14.978 + 4.041i 17 18.510 4.096i 18 18.510 + 4.096i 19 21.756 1.894i 20 21.756 + 1.894i przed zmianą po zmianie f 20 = 0 f 20 = 1.245e + 19 zplane zero-pole plot zplane(z, p) [z wektor zer, p wektor biegunów] zplane(r,[]) r = [1 2 20]
Wielomian Wilkinsona W przypadku wielomianu Wilkinsona oraz h x = f x + tc x nowy wielomian c x = x 20 t = 2 23 h x = (t + a 1 )x 20 + a 2 x 19 + + a 20 x + a 21 Dla pojedynczych pierwiastków, x j, zmiana położenia pierwiastka kontrolowana jest przez pochodną t dx j dt = t c(x j) f (x j ) duża wartość (bezwzględna) pochodnej sugeruje, że pierwiastek x j będzie bardzo czuły na małe zmiany w t Pochodna dana jest wzorem factorial(x) y = factorial(19); %silnia y = 19! dla x j = 20: t dx 20 j dt = t x j = t 2020 ς k j x j x k 19! dla x j = 1: t dx j dt = t 1 ς k j x j x k = t 1 19! = 102.76 = 9.8e 25 niestabilny stabilny
Uwarunkowanie Sprawdzamy uwarunkowanie funkcji nieliniowej. Problem polega na znalezieniu miejsc zerowych wielomianu 13-tego stopnia (x + 2)(x 2 1) 6 3 10 6 x 11 = 0 Kod MATLABa x = -2.01:0.01:1.5; y = zz(x); plot(x,y,'k','linewidth',1.1) axis([-2.1 1.5-9 35]) xlabel('$x$','interpreter','latex','fontsize',12) ylabel('$y(x)$','interpreter','latex','fontsize',12) function z=zz(x) z = (x+2).*(x.^2-1).^6-(3e-6).*x.^11; end
Uwarunkowanie Do znalezienia miejsc zerowych wielomianu w okolicy punktu x0 możemy użyć funkcji fzero (x + 2)(x 2 1) 6 3 10 6 x 11 = 0 x = fzero(fun,x0) a1 = fzero('zz',1.02) a1 = 1.053 a2 = fzero('zz',-2) a2 = -2 a3 = fzero('zz',1) a3 = 0.953 hold on plot(a1,0,'ro',a2,0,'ro',a3,0,' ro','markersize',9);
Uwarunkowanie Przybliżamy przedział funkcji [ 1.1, 0.9] axis axis([xmin xmax ymin ymax]) axis([-1.1-0.9 0 10^-4]) Badana funkcja nie ma miejsc zerowych w tym przedziale
Uwarunkowanie Jak wyznaczyć współczynniki wielomianu? (x + 2)(x 2 1) 6 3 10 6 x 11 = 0 Jeżeli posiadamy w pakiecie MATLAB odpowiednią bibliotekę do wykonywania działań na symbolach możemy użyć funkcji syms i expand Aby zadeklarować niewiadomą x używamy polecenia syms x Następnie wydajemy polecenie, aby MATLAB doprowadził wielomian do postaci, gdzie będą widoczne wszystkie współczynniki expand(fun(x)) wynikiem tej operacji jest wielomian o postaci a 1 x 13 +...+a 13 x + a 14 = 0
Uwarunkowanie Jak wpłynęła na rozkład miejsc zerowych zmiana współczynnika przy x 13 z 1 na 1.00001? 0.00001x 13 + (x + 2)(x 2 1) 6 3 10 6 x 11 = 0 przed zmianą po zmianie
Macierz Hilberta Wskaźnik uwarunkowania macierzy A v A = A A 1 2 A = A ij cond v = cond(a), v > 0 rcond = 1/cond c = rcond(a), c < 0,1) Duża wartość wskaźnika v A świadczy o złym uwarunkowaniu macierzy Macierz Hilberta jest klasycznym przykładem macierzy źle uwarunkowej hilb A = hilb(4); %macierz Hilberta 4x4 v = cond(a); v = 1.55e + 04 A = A ij = 1 i + j 1, i, j = 1,, n 1 0.5 0. (3) 0.25 0.5 0. (3) 0.25 0.2 0. (3) 0.25 0.2 0.1(6) 0.25 0.2 0.1(6) 0.14
Macierz Hilberta Macierz odwrotna do macierzy Hilberta powinna zawierać liczby całkowite A 1 = 16 120 240 140 120 1200 2700 1680 240 2700 6480 4200 140 1680 4200 2800 A 1 = 16 119. (9) 239. (9) 139. (9) 119. (9) 1199. (9) 2699. (9) 1680 239. (9) 2699. (9) 6479. (9) 4199. (9) 139. (9) 1679. (9) 4219. (9) 2799. (9) Główną przyczyną są błędy zaokrągleń na etapie definiowania macierzy Hilberta, a nie na etapie odwracania macierzy invhilb dokładna postać dla n<15 odwrotna macierz Hilberta nxn A = invhilb(n); Różnice stają się wyraźniejsze wraz ze wzrostem rozmiaru macierzy
Układ równań liniowych Rozważmy następujący układ równań ቊ 10x 1 + x 2 = 11 3x 1 + 0.3x 2 = 3.3 Rozwiązanie jest oczywiste x 1 = x 2 = 1? Rozwiązanie uzyskane w MATLAB'ie, ponieważ A(2,2) 0.3 A = [10 1; 3 0.3] b = [11 3.3]' x = A 1 b x = [1 16 ] v = cond(a) v = inf d = det(a) 0 d 5.55e 16 A = [10 1; 3 0.3] b = [11 3.3]' x = A\b x = [NaN NaN]
Układ równań liniowych Przykład równania źle uwarunkowanego 1 1 1 0 0.0001 1 0 0 9999 x x 1 x 2 x 3 = 1 1 10000 Rozwiązanie uzyskane w MATLAB'ie Rozwiązanie >> b = 1 1 10000 ; >> A = [1 0 0; 1 0.0001 0; 1 1 9999];? >> wsk1 = cond(a) >> ans = 1.4141e+008 >> wsk2 = norm(a)*norm(inv(a)) >> ans = 1.4141e+008 >> x = inv A b >> ans = [1 0 1] >> x = A\b >> ans = [1 0 1]
O czym będziemy mówili 1. Przypomnienie wiadomości 2. Liczby zmiennoprzecinkowe: standard IEEE 754 liczby znormalizowane, zdenormalizowane niedomiar, przepełnienie wartości specjalne NaN, Inf działania na liczbach zmiennoprzecinkowych 3. Przykłady nieoczekiwanych wyników obliczeń 4. Uwarunkowanie zadania wielomian Wilkinsona macierz Hilberta 5. Podsumowanie
Co muszę zapmiętać 1) Reprezentacja liczb zmiennoprzecinkowych w standardzie IEEE 754 2) Problemy wynikające ze skończonej precyzji 3) Zadania źle uwarunkowane, wskaźniki uwarunkowania? Poznane funkcje roots fzero poly axis polyval syms conv expand factorial cond hilb rcond invhilb zplane sign
Zadania domowe 1) Omów problemy pojawiające się przy wykonywaniu operacji na liczbach zmiennoprzecinkowych, podaj własne przykłady 2) Omów problem złego uwarunkowania na przykładzie wielomianu Wilkinsona 3) Omów problem złego uwarunkowania macierzy na przykładzie macierzy Hilberta?
Języki Modelowania i Symulacji Dziękuję za uwagę