Języki Modelowania i Symulacji 2018 Arytmetyka zmiennoprzecinkowa w standardzie IEEE Wykład 3

Podobne dokumenty
Liczby zmiennoprzecinkowe i błędy

Met Me ody numer yczne Wykład ykład Dr inż. Mic hał ha Łan Łan zon Instyt Ins ut Elektr Elektr echn iki echn i Elektrot Elektr echn olo echn

Kod IEEE754. IEEE754 (1985) - norma dotycząca zapisu binarnego liczb zmiennopozycyjnych (pojedynczej precyzji) Liczbę binarną o postaci

Podstawy Informatyki

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci:

Pracownia Komputerowa wykład VI

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

Wielkości liczbowe. Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

Reprezentacja stałoprzecinkowa. Reprezentacja zmiennoprzecinkowa zapis zmiennoprzecinkowy liczby rzeczywistej

EMN. dr Wojtek Palubicki

Wielkości liczbowe. Wykład z Podstaw Informatyki. Piotr Mika

BŁĘDY OBLICZEŃ NUMERYCZNYCH

Wprowadzenie do metod numerycznych. Krzysztof Patan

Technologie Informacyjne Wykład 4

Zwykle liczby rzeczywiste przedstawia się w notacji naukowej :

LICZBY ZMIENNOPRZECINKOWE

Metody numeryczne. Postać zmiennoprzecinkowa liczby. dr Artur Woike. Arytmetyka zmiennoprzecinkowa. Uwarunkowanie zadania.

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 2 WSTĘP DO INFORMATYKI

Pracownia Komputerowa wyk ad VI

Przedmiot: Urządzenia techniki komputerowej Nauczyciel: Mirosław Ruciński

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

Dokładność obliczeń numerycznych

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

Arytmetyka stało i zmiennoprzecinkowa

METODY NUMERYCZNE. Po co wprowadzamy liczby w formacie zmiennoprzecinkowym (floating point)?

Teoretyczne Podstawy Informatyki

Dodatek do Wykładu 01: Kodowanie liczb w komputerze

BŁĘDY PRZETWARZANIA NUMERYCZNEGO

Informatyka 1. Wykład nr 5 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

Metody numeryczne I. Janusz Szwabiński. Metody numeryczne I (C) 2004 Janusz Szwabiński p.1/61

Zapis liczb binarnych ze znakiem

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

METODY NUMERYCZNE. Wykład 2. Analiza błędów w metodach numerycznych. Met.Numer. wykład 2 1

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

Obliczenia Naukowe. O arytmetyce komputerów, Czyli jak nie dać się zaskoczyć. Bartek Wilczyński 29.

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym

Wstęp do informatyki- wykład 1 Systemy liczbowe

Obliczenia naukowe Wykład nr 2

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

Adam Korzeniewski p Katedra Systemów Multimedialnych

Metody numeryczne. Janusz Szwabiński. nm_slides.tex Metody numeryczne Janusz Szwabiński 2/10/ :02 p.

Adam Korzeniewski p Katedra Systemów Multimedialnych

Reprezentacja symboli w komputerze. Liczby całkowite i zmiennoprzecinkowe. Programowanie Proceduralne 1

Arytmetyka binarna - wykład 6

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

LICZBY ZMIENNOPRZECINKOWE

Zapis zmiennopozycyjny, arytmetyka, błędy numeryczne

Zaawansowane metody numeryczne

Mikroinformatyka. Koprocesory arytmetyczne 8087, 80187, 80287, i387

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Metoda znak-moduł (ZM)

Architektura komputerów

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

Naturalny kod binarny (NKB)

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Stan wysoki (H) i stan niski (L)

Arytmetyka. Działania na liczbach, potęga, pierwiastek, logarytm

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Bardzo łatwa lista powtórkowa

SYSTEMY LICZBOWE. SYSTEMY POZYCYJNE: dziesiętny (arabski): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 rzymski: I, II, III, V, C, M

Technologie Informacyjne

Metody Obliczeniowe w Nauce i Technice

Pracownia komputerowa. Dariusz Wardecki, wyk. VI

Podstawy Informatyki. Wykład 2. Reprezentacja liczb w komputerze

Pozycyjny system liczbowy

Informatyka 1. Wykład nr 4 ( ) Plan wykładu nr 4. Politechnika Białostocka. - Wydział Elektryczny

Metody numeryczne II. Reprezentacja liczb

ARCHITEKTURA KOMPUTERÓW Liczby zmiennoprzecinkowe

Prefiksy binarne. kibibit (Kibit) mebibit (Mibit) gibibit (Gibit) tebibit (Tibit) pebibit (Pibit) exbibit (Eibit) zebibit (Zibit) yobibit (Yibit)

Systemy zapisu liczb.

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

System liczbowy jest zbiorem reguł określających jednolity sposób zapisu i nazewnictwa liczb.

Kod U2 Opracował: Andrzej Nowak

Kodowanie informacji. Kody liczbowe

W wielu obliczeniach w matematyce bądź fizyce wykonanie niektórych kroków zależy od spełnienia warunku.

Pracownia Komputerowa wykład V

Kod uzupełnień do dwóch jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych.

Wstęp do metod numerycznych Zagadnienia wstępne Uwarunkowanie. P. F. Góra

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

Informatyka 1. Wykład nr 4 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Architektura komputerów

Zagadnienia na egzamin poprawkowy z matematyki - klasa I 1. Liczby rzeczywiste

Zagadnienia - równania nieliniowe

RODZAJE INFORMACJI. Informacje analogowe. Informacje cyfrowe. U(t) U(t) Umax. Umax. R=(0,Umax) nieskończony zbiór możliwych wartości. Umax.

Arytmetyka komputerów

Egzamin z Metod Numerycznych ZSI, Egzamin, Gr. A

4 Standardy reprezentacji znaków. 5 Przechowywanie danych w pamięci. 6 Literatura

Arytmetyka liczb binarnych

Pułapki liczb zmiennoprzecinkowych. Adam Sawicki asawicki.info

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

Wstęp do informatyki- wykład 1 Systemy liczbowe

Powtórzenie podstawowych zagadnień. związanych ze sprawnością rachunkową *

Architektura komputerów Reprezentacja liczb. Kodowanie rozkazów.

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Wstęp do programowania

Pracownia Komputerowa wykład IV

Kodowanie liczb. Reprezentacja liczb całkowitych. Standard IEEE 754. dr inż. Jarosław Forenc

Transkrypt:

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ę