Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015 1
Metody numeryczne Dział matematyki Metody rozwiązywania problemów matematycznych za pomocą operacji na liczbach. Otrzymywane tą drogą wyniki są na ogół przybliżone, jednak dokładność obliczeń może być z góry określona i dobiera się ją zależnie od potrzeb. Wykorzystywane są wówczas gdy badany problem nie ma w ogóle rozwiązania analitycznego (danego wzorami), lub korzystanie z takich rozwiązań jest uciążliwe ze względu na ich złożoność. 2
Kalkulator, komputer -> maszyna cyfrowa Jakość maszyny cyfrowej wielkość pamięci operacyjnej, szybkość wykonywania operacji matematycznych i logicznych, dopuszczalny zakres liczb podczas obliczeń, dokładność wykonywania podstawowych działań arytmetycznych na liczbach rzeczywistych Zastosowanie do obliczeń w elektronice np.: - analiza obwodów (Spice) - analiza sygnałów 3
Zagadnienia omawiane na wykładzie: 1. Zapis liczb w komputerach 2. Metody rozwiązywania układów równań liniowych: - metody dokładne: dekompozycji LU, - metody iteracyjne: Jacobiego, Gaussa-Seidla 3. Wybrane metody przybliżonego wyznaczania rozwiązań równania algebraicznego: bisekcji, regula falsi, siecznych, stycznych, iteracji prostej 4. Aproksymacja funkcji: interpolacja, aproksymacja 4
Zapis liczb w komputerach Sem. 2 EiT, 2014/2015 5
Każdą liczbę zastosowaną do obliczeń w komputerach należy przedstawić w postaci dogodnej do wykonywania operacji matematycznych Przyjmujemy, że zapiszemy liczby w postaci określonych wartości, które będą występować lub nie, w zależności od pewnej wagi. Jako wagę można zastosować wartości: 0 (nie) lub 1 (tak). Wartości, które wybierzemy do reprezentacji liczb, powinny stanowić jakiś logiczny ciąg, np. 2 0, 2 1, 2 2, 2 3, 2 4,, 2 n Jest to system dwójkowy, p = 2 Liczba 10 zapisana w systemie dziesiętnym, w systemie dwójkowym zostanie zapisana jako: 1 0 1 0 Jaką największą liczbę mogę zapisać? Jaką najmniejszą liczbę mogę zapisać? 1 2 3 + 0 2 2 + 1 2 1 + 0 2 0 = 8 + 2 = 10 Czy mogę zapisać 2,5? Konieczne jest ustalenie, co w danym rejestrze jest zapisane, oczywiście symbolicznie, w maszynie cyfrowej występuje tylko zapis wartości: 0 i 1 Przyjęto, że każdy element zapisany w maszynie cyfrowej jest nazywany bitem. 6
Zapisanie liczby o większej wartości, liczby ułamkowej, liczby ujemnej wymaga stworzenia odpowiedniego systemu zapisu liczb. W naszym przykładzie, przy 4 bitach, można zapisać liczby od 0 do 15, ale co 1. Większy zakres liczb możemy uzyskać zwiększając liczbę bitów. Liczby ułamkowe możemy uzyskać wprowadzając zapis dla części całkowitej i ułamkowej. Liczby dodatnie i ujemne można uzyskać wprowadzając dodatkowy bit na znak. Co zrobić, żeby uzyskać odpowiednią dokładność? Od czego ona zależy? 7
Liczby w komputerach są zapisywane w postaci: stałopozycyjnej (stałoprzecinkowej), zmiennopozycyjnej (zmiennoprzecinkowej). Zapis liczby w komputerze w postaci bitów, np. słowo 32-bitowe, 16-bitowe,. Reprezentacja stałopozycyjna Do zapisu liczby stałoprzecinkowej przeznaczamy z góry określoną liczbę bitów, a pozycję przecinka ustala się arbitralnie, w zależności od wymaganej dokładności: S = s c n 1 c 1 c 0 c 1 c 2 c m+1 c m c i 0,, p 1, s +, p podstawa, s znak System dziesiętny p = 10, system dwójkowy (binarny) p = 2 Przyjmujemy, że p = 2, więc c i 0,1 i = n-1, n 2,., - m + 1, - m Słowo 7-bitowe możemy zapisać w postaci: część całkowita 4 bity (n = 4), 1 bit na znak, część ułamkowa 2 bity (m = 2) 0 znak +, 1 znak. 8
S = s c n 1 c 1 c 0 c 1 c 2 c m+1 c m c i 0, 1, s 0, 1 Liczba dodatnia S = 0(c n 1 2 n 1 + c n 2 2 n 2 + + c 0 2 0 + c 1 2 1 + c 2 2 2 + +c m 2 m ) Przykład część całkowita część ułamkowa Na część całkowitą przeznaczono 4 bity (n = 4), na część ułamkową 2 bity (m = 2) S = s c 3 c 1 c 0 c 1 c 2 c i 0, 1, s 0, 1 Liczba dodatnia s = 0, wartość maksymalna to: 0 1111 11 czyli 0(1 2 3 + 1 2 2 + 1 2 1 + 1 2 0 + 1 2 1 + 1 2 2 ) = +15,75 Symbol reprezentuje przecinek 9
Liczba dodatnia s = 0, najmniejsza wartość większa od zera to: 0000 01 czyli 0(0 2 3 + 0 2 2 + 0 2 1 + 0 2 0 + 0 2 1 + 1 2 2 )= + 0,25 Wniosek: można zapisać liczby od 15,75 do + 15,75, ale tylko co 0,25 Przykładowa liczba: s = 1 1011 10 1 (1 2 3 + 0 2 2 + 1 2 1 + 1 2 0 + 1 2 1 + 0 2 2 )= 11,50 Podziału na część całkowitą i ułamkową dokonuje programista. Przy ustalonej liczbie bitów trzeba bardzo precyzyjnie określić: część całkowitą (liczbę bitów na część całkowitą) i część ułamkową (liczbę bitów na część ułamkową), żeby uzyskać we wszystkich obliczeniach (operacjach matematycznych) wymagany zakres liczb. Przy ustalonej liczbie bitów Zwiększanie części ułamkowej powoduje zmniejszenie zakresu liczb, natomiast zwiększanie części całkowitej, to zmniejszanie dokładności (precyzji). 10
Reprezentacja zmiennopozycyjna Do zapisu liczby zmiennopozycyjnej stosujemy następujący zapis: Z = ( 1) s M W gdzie: s 0,1 M - mantysa, W - cecha, s znak, 0 znak +, 1 znak. Mantysa M jest znormalizowana, liczba ułamkowa. Jeżeli M jest stałe, a zmienia się W, to przesunięciu ulega przecinek stąd nazwa tej reprezentacji liczb. 11
Z = ( 1) s M W s = 0 znak +, s = 1 znak Mantysa Przeznaczamy na mantysę n bitów M = 1 + m n 1 2 1 + m n 2 2 2 + m n 3 2 3 + m 1 2 n+1 + m 0 2 n m i 0, 1 część ułamkowa Cecha Przeznaczamy na cechę n bitów W = w n 1 2 n 1 + w n 2 2 n 2 + w n 3 2 n 3 + w 0 2 0 w i 0, 1 12
Reprezentacja zmiennopozycyjna Sposób zamiany Należy zapisać liczbę 99,00 (system dziesiętny) w systemie binarnym (p = 2) zmiennopozycyjnym: Najbliższa potęga 2, o wartości mniejszej od 99, to 2 6 = 64, s = 0, znak " + " Obliczamy ułamek: 99 64 Zapis mantysy (6 bitów): 0,546875 x 2 = 1,09375 1 0,09375 x 2 = 0,1875 0 0,1875 x 2 = 0,375 0 0,375 x 2 = 0,75 0 0,75 x 2 = 1,50 1 0,5 x 2 = 1,0 1 Z = ( 1) s M W = 1,546875 będziemy zapisywać liczbę w postaci: (1 + 0,546875) 64, M = 1 + 0,546875 cecha W = 2 6 s 0,1 Zapis cechy (7 bitów): 64:2 = 0 32:2 = 0 16:2 = 0 8:2 = 0 4:2 = 0 2:2 = 0 1 1 znak cecha W =2 6 Zapis liczby mantysa 0 1000000 100011 M = 1 + m 5 2 1 + m 4 2 2 + m 3 2 3 + m 2 2 4 + m 1 2 5 + m 0 2 6 = 1,546875 W = w 6 2 6 + w 5 2 5 + w 4 2 4 + w 0 2 0 = 64 Z = 0 1 + 1 2 1 + 0 2 2 + 0 2 3 + 0 2 4 + 1 2 5 + 1 2 6 [(1 2 6 + + 0 2 5 + 0 2 4 + 0 2 3 + 0 2 2 + 0 2 1 + 0 2 0 )] = = +1,546875 64 = +99 13
Na zapisanie liczby 99 przeznaczono: 1 bit na znak, siedem bitów na cechę, sześć bitów na mantysę. Przy ograniczaniu liczby bitów, zapis liczby będzie niedokładny, z błędem. Przykładowo: 1 bit na znak, siedem bitów na cechę, pięć bitów na mantysę, wtedy: 0 1000000 0 10001 Z = 0 1 + 1 2 1 + 0 2 2 + 0 2 3 + 0 2 4 + 1 2 5 (2 6 ) = = 1,53125 64 = + 98 Błąd bezwzględny: 99-98 = 1, błąd względny 1/99 = 1,01% 1 bit na znak, siedem bitów na cechę, cztery bity na mantysę, wtedy: 0 1000000 0 1000 Z = 0 1 + 1 2 1 + 0 2 2 + 0 2 3 + 0 2 4 (2 6 ) = = 1,5 64 = 96 Błąd bezwzględny: 99-96 = 3, błąd względny 3/99 = 3,03% A co spowoduje ograniczanie liczby bitów na cechę? 14
Dokładność zapisu liczby zależy od mantysy, a zakres liczby od cechy. 15
Błędy w obliczeniach 16
BŁĘDY W OBLICZENIACH Błąd bezwzględny definiuje się w obliczeniach jako różnicę między dokładną (na ogół nieznaną) wartością liczbową x a jej wartością przybliżoną otrzymaną jako wynik rozwiązania pewnego zadania obliczeniowego, δ = x x W celu określenia dokładności obliczeń określa się zwykle graniczny (tzn. maksymalny) błąd bezwzględny δ M = max x x wyrażany w jednostkach wielkości obliczanej, lub graniczny błąd względny ε M = x x x wyrażany w postaci ułamka lub procentu wartości obliczanej wielkości. 17
Rozpatruje się trzy główne przyczyny powstawania niedokładności w trakcie realizacji obliczeń: błędy danych wejściowych, błędy obcięcia, błędy zaokrągleń. Błędy danych wejściowych powodowane są przez skończoną długość słowa stosowanego w maszynie cyfrowej (skończoną dyskretną reprezentację liczb stosowanych w obliczeniach komputerowych) i związaną z tym w konsekwencji niemożliwością przedstawienia wartości rzeczywistej w postaci dokładnego zapisu liczbowego. 18
Reprezentacja stałopozycyjna S = s c n 1 c 1 c 0 c 1 c 2 c m+1 c m c i 0, 1, s 0, 1 Powtórka Liczba dodatnia S = 0 (c n 1 2 n 1 + c n 2 2 n 2 + + c 0 2 0 + c 1 2 1 + c 2 2 2 + +c m 2 m ) część całkowita część ułamkowa Do zapisu liczby stałoprzecinkowej przeznaczamy z góry określoną liczbę bitów, a pozycję przecinka ustala się arbitralnie, w zależności od wymaganej dokładności Przykład Na część całkowitą przeznaczono 4 bity (n = 4), na część ułamkową 2 bity (m = 2) Liczba dodatnia s = 0, wartość maksymalna to: 1111 11 czyli Symbol reprezentuje przecinek 0 (1 2 3 + 1 2 2 + 1 2 1 + 1 2 0 + 1 2 1 + 1 2 2 ) = +15,75 19
Reprezentacja stałopozycyjna Należy zapisać liczbę 0,48 (system dziesiętny) w systemie binarnym, jako liczbę stałopozycyjną: Założenie Zapis liczby w systemie binarnym p = 2 1 bit na znak, cztery bity na część całkowitą, 2 bity na część ułamkową Część całkowita: 0000 Zapis liczby w systemie binarnym Sposób zamiany Część ułamkowa 0,48 x 2 = 0,96 0 0,96 x 2 = 1,92 1 0,92 x 2 = 1,84 1 0,84 x 2 = 1,68 1 0 0000 01 Wartość w systemie dziesiętnym: 0 0 2 1 + 1 2 2 = 0,25 Wniosek: nie ma możliwości zapisania dokładnie wartości 0,48 w przyjętym systemie zapisu: znak, 4 bity na część całkowitą i 2 bity na część ułamkową Błąd bezwzględny 0,48 0,25 = 0,23, błąd bezwzględny 0,23/0,48 = 47,9% Błąd danych wejściowych 20
Reprezentacja stałopozycyjna Należy zapisać liczbę 16,50 (system dziesiętny) w systemie binarnym stałopozycyjną: Założenie Część całkowita: 16:2 reszta 0 8:2 reszta 0 4:2 reszta 0 2:2 reszta 0 1 reszta 1 Zapis: 10000 Zapis liczby w systemie binarnym 1 bit na znak, cztery bity na część całkowitą, 2 bity na część ułamkową Sposób zamiany Część ułamkowa: 0,50 x2 = 1,0 1 0,0 x 2= 0 0 Zapis: 10 Nie można zapisać tej liczby w założonym systemie zapisu (cztery bity na mantysę), liczba wymaga pięciu bitów na mantysę. Można zapisać tylko liczbę 15,75 Błąd bezwzględny 16,50 15,75 = 0,75, błąd bezwzględny 0,75/16,50 = 4,5% Błąd danych wejściowych 21
Reprezentacja stałopozycyjna Należy zapisać liczbę (system dziesiętny) w systemie binarnym stałopozycyjną: 11,60 Założenie Część całkowita: Zapis liczby w systemie binarnym Znak, cztery bity na mantysę, 2 bity na cechę Sposób zamiany Część ułamkowa: 11:2 reszta 1 5:2 reszta 1 2:2 reszta 0 1 reszta 1 Zapis: 1011 Wartość w systemie dziesiętnym: 0,60 x2 = 1,2 1 0,2 x 2= 0,4 0 Zapis: 10 Zapis liczby w systemie binarnym: 1011 10 1 2 3 + 0 2 2 + 1 2 1 + 1 2 0 + 1 2 1 + 0 2 2 = 11,50 Wniosek: nie ma możliwości zapisania dokładnie wartości 11,60 w przyjętym systemie zapisu, znak, 4 bity na część całkowitą i 2 bity na część ułamkową Błąd bezwzględny 11,60 11,50 = 0,10, błąd bezwzględny 0,10/11,60 = 0,86% Błąd danych wejściowych 22
Działania na liczbach w systemie dwójkowym 1 + 0 = 1 1 + 1 = 10 1 * 0 = 0 1 * 1 = 1 10 1 = 1 23
Dodawanie liczb stałopozycyjnych Zasady dodawania: 0+0 = 0, 1+0 = 1, 0+1 = 1, 1+1 = 10 Należy dodać liczby 11,5 i 3,5 w systemie dziesiętnym i binarnym System dziesiętny: 11,5 + 3,5 = 15 Zamiana liczb na binarne, przyjmujemy, że liczby zostaną zapisane : W formacie 1 bit na znak, 4 bity na część całkowitą, 2 bity na część ułamkową Część całkowita Liczba 11 11:2 1 5:2 1 2:2 0 1 1 Liczba 3 3:2 1 1 1 0 0 0 0 Część ułamkowa 0,50 0,50 x 2 = 1 1 0,00 0 Liczba 3,5 0 0011 10 Liczba 11,5 0 1011 10 11,5 = 0 1 2 3 + 0 2 2 + 1 2 1 +1 2 0 + (1 2 1 + 0 2 0 ) 3,5 = 0 0 2 3 + 0 2 2 + 1 2 1 +1 2 0 + (1 2 1 + 0 2 0 ) 24
Dodawanie Liczba 11,5 0 1011 10 Liczba 3,5 0 0011 10 Suma 0 1111 00 11,5 + 3,5 = 0 1 2 3 + 1 2 2 + 1 2 1 +1 2 0 + (0 2 1 + 0 2 0 ) = +15 Liczby zostały dodane prawidłowo, nie występuje błąd 25
Zadanie Należy dodać liczby zapisane w systemie dziesiętnym (jest to przeliczenie skali): T F = 32 + 9 5 T C W systemie binarnym liczby te należy zapisać jako liczby całkowite: Przeliczamy temperaturę T c = 100. 9/5 = 1,8 1,0 obcięcie 2,0 zaokrąglenie T F = 32 + 9 5 T C 132 232 Wynik poprawny 212 Jeżeli zmienimy kolejność działań, czyli T F = 32 + 9 T C 5, to wynik będzie poprawny 9 100 = 900 900/5 = 180 T F = 32 +180 = 212 26
Wniosek W czasie wykonywania operacji matematycznych występują błędy danych wejściowych, błędy zaokrąglenia i obcięcia, które zależą od reprezentacji liczby w maszynie cyfrowej Na dokładność obliczeń wpływa również kolejność wykonywanych operacji matematycznych. 27
Standardy zapisu liczb w maszynach cyfrowych 28
Liczba w reprezentacji zmiennopozycyjnej o pojedynczej lub podwójnej precyzji (IEEE 754) jest zapisywana w rejestrach komputera jako liczba o podstawie p = 2 w postaci: Reprezentacja zmiennopozycyjna, pojedyncza precyzja (32 bity): znak cecha mantysa (1 bit) (8 bitów) (23 bity) numer bitu: 31 30 22 Reprezentacja zmiennopozycyjna, podwójna precyzja (64 bity): znak cecha mantysa (1 bit) (11 bitów) (52 bity) numer bitu: 63 62 51 29
Zapis liczby Z w standardzie IEEE 754 Z = ( 1) s E wartość stała M 2 s znak, jeżeli s = 0, to jest to liczba dodatnia, jeżeli s = 1, to jest to liczba ujemna, M mantysa, składa się z określonej liczby bitów, zapisywana jako ułamek binarny, E - cecha, składa się z określonej liczby bitów, zapisywana jako liczba. Pojedyncza precyzja: Z = ( 1) s M 2 E 127 M = 1. m 22 m 21 m 2 m 1 m 0 Zajmuje 23 bity: 0 (LSB), 22 (MSB) M = 1 + m 22 2 1 + m 21 2 2 + + m 1 2 22 + m 0 2 23 m przyjmuje wartości 0 lub 1 E zajmuje 8 bitów: 23 (LSB), 30 (MSB) 30
0 albo 1 2 7 2 0 Cecha, s 30 29 28 27 26 25 24 23 maksymalna wartość E = 255, czyli 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128, minimalna E = 0, czyli wykładnik może znak, 1 bit zmieniać się od -127 do +128 (2 127 do 2 128 ) cecha, 8 bitów 2 1 Mantysa, jeżeli wszystkie m są równe 0, to M = 1, jeżeli wszystkie m są równe 1, to M = 2 2 23 2 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 mantysa, 23 bity 31
Przykład: 0 00000111 11000000000000000000000 + 1,75 2 7 127 = +1,316554 10 36 + 7 0,75 znak cecha mantysa (1 bit) (8 bitów) (23 bity) numer bitu: 31 30 22 32
33