Rozdział 2
Elementy teorii błędów
Błędy są częścią opłaty,
którą płacimy za pełne życie
Sophia Loren
2.1. Analiza błędów.
Liczba przybliżona a nazywa się liczba różniąca się nieznacznie od liczby dokładnej A i zastępująca ją w obliczeniach.
Na przykład, liczba dokładna ![]()
, wówczas jako liczba przybliżona może być ![]()
.
Również, liczba dokładna ![]()
, wówczas jako liczba przybliżona może być ![]()
.
Definicja 2.1. Błędem bezwzględnym ![]()
liczby przybliżonej a nazywa się wartość bezwzględna różnicy pomiędzy liczbą dokładną A i liczbą przybliżoną a, tzn.
![]()
.
Zaznaczmy, że tak określoną wielkość ![]()
jeszcze nazywają górnym kresem błędu przybliżenia ![]()
.
Przykład 2.1. Liczba ![]()
jest przybliżeniem liczby ![]()
z błędem ![]()
Za górny kres błędu można przyjąć ![]()
.
Ponieważ najczęściej liczba dokładna ![]()
nie jest znana, to zamiast nieznanego błędu bezwzględnego ![]()
wprowadza się ocena ![]()
błędu bezwzględnego.
Definicja 2.2. Ocena ![]()
błędu bezwzględnego ![]()
liczby przybliżonej ![]()
nazywa się każda liczba nie mniejsza od błędu bezwzględnego ![]()
tej liczby przybliżonej
![]()
.
Wynika stąd, że
![]()
.
We wzorze tym wartość ![]()
jest przybliżeniem z niedomiarem liczby ![]()
, natomiast wartość ![]()
jest przybliżenie z nadmiarem liczby dokładnej ![]()
.
Taką nierówność często zapisujemy również w postaci
![]()
.
Na przykład, jeśli ![]()
i ![]()
, to, ponieważ ![]()
, wówczas ![]()
. Zatem możemy przyjąć ![]()
.
Jeżeli ![]()
, to ![]()
i ![]()
.
Definicja 2.3. Błędem względnym ![]()
liczby przybliżonej ![]()
nazywa się stosunek błędu bezwzględnego ![]()
tej liczby do wartości bezwzględnej liczby dokładnej ![]()

.
Wielkość ![]()
jeszcze nazywają górnym kresem błędu względnego dla przybliżenia ![]()
.
Przykład 2.2. Liczba ![]()
jest przybliżeniem liczby ![]()
z błędem ![]()
Za górny kres błędu względnego można przyjąć iloraz 
.
Definicja 2.4. Oceną ![]()
błędu względnego ![]()
liczby przybliżonej ![]()
nazywa się każda liczba nie mniejsza od błędu względnego tej liczby
![]()
.
Za ocenę błędu bezwzględnego danej liczby ![]()
można przyjąć wielkość
![]()
.
Ponieważ najczęściej liczba ![]()
nie jest znana, ale ![]()
, to często korzysta się ze wzorów

oraz
![]()
.
Na przykład, jeśli ![]()
i ![]()
, to, ponieważ

,
to za ocenę błędu bezwzględnego danej liczby ![]()
można przyjąć ![]()
.
Przykład 2.3. Jedna stopa sześcienna równa jest ![]()
; mamy tu 3 cyfry wartościowe, więc jest to przybliżenie w trzecim stopniu dokładności. Jeden cal równia się ![]()
; mamy tu 5 cyfr wartościowych, więc jest to przybliżenie w trzecim stopniu dokładności.
Jeżeli przybliżenie ![]()
ma ![]()
cyfr wartościowych, to jego błąd względny

,
gdzie ![]()
jest pierwszą cyfrą wartościową danego przybliżenia ![]()
.
Przybliżenie ![]()
z błędem względnym ![]()
ma ![]()
cyfr przybliżenia ![]()
, gdzie ![]()
jest największą liczbą całkowitą spełniającą warunek
![]()
.
Przykład 2.4. Jeżeli liczba ![]()
jest wynikiem działań na liczbach przybliżonych i wiadomo, że ![]()
, to otrzymujemy ![]()
, gdyż ![]()
; dane przybliżenie ma więc tylko 3 cyfry wartościowe i należy ![]()
napisać w postaci ![]()
.
2.2. Źródła błędów.
Nie pytaj błędu, skąd pochodzi.
Stanisław Jerzy Lec
Przy obliczeniach występują różne rodzaje błędów:
błędy nieusuwalne (błędy zagadnienia, błędy początkowe);
błędy metody (błędy obcięcia, błędy dyskretyzacji);
błędy obliczeń (błędy zaokrąglenia, błędy działań).
2.2.1. Błędy zagadnienia. Jest to błędy niedokładności modelu matematycznego oraz danych wejściowych (współczynników w równaniach modelu, warunków początkowych i brzegowych). Prawie zawsze model matematyczny jest pewnym przybliżeniem zjawiska lub procesu fizycznego, a dane wyjściowe oparte jest na dane pomiarowe, które obciążone są błędami pomiarowymi.
Wahadło matematyczne. Jest to punktowa masa ![]()
zawieszona na nitce o długości ![]()
. Przyjmuje się, że masa nitki jest znacznie mniejsza od masy ![]()
. Dla określenia prawa ruchu tej masy rozważamy działające siły i korzystamy z drugiej zasady Newton'a.
Przyjmiemy, że w pewnej chwili czasu w kierunku ruchu punktu materialnego działa składowa ![]()
siły ciężkości ![]()
, wówczas w kierunku przeciwnym działa siła oporu ![]()
, która jest wprost proporcjonalna do prędkości ![]()
, mianowicie
![]()
,
gdzie ![]()
— współczynnik tarcia.
Wtedy z drugiej zasady Newtona mamy
![]()
,
gdzie ![]()
— przyspieszenie styczne.
Ponieważ

, 
,
to równanie ruchu przyjmuje postać

,
gdzie ![]()
— małe przemieszczenie wzdłuż stycznej, ![]()
— kąt, który tworzy nitka z kierunkiem pionowym, ![]()
— czas, ![]()
— charakterystyka wahadła.
W większości wypadków rozważa się małe wychylenia, dla których ![]()
i ![]()
. Zatem otrzymane powyżej równanie istotnie upraszcza się

.
2.2.2. Błędy początkowe. Kiedy opisuje się konkretny proces, to należę zażądać spełnienia warunków początkowych
![]()
,
opisujących położenie i prędkość punktu materialnego w chwili czasu ![]()
(![]()
i ![]()
— stałe). Warunki tę są określane eksperymentalnie z błędami pomiarowymi.
Podobnie stałe ![]()
, ![]()
i ![]()
w równaniu możemy określić tylko w pewnym przybliżeniu.
2.2.3. Błędy obcięcia. Często rozwiązania jakiegoś zagadnienia matematycznego otrzymujemy w postaci ciągów lub szeregów nieskończonych, ale nigdy numerycznie nie obliczamy sumy nieskończonej ilości składników. Przerwanie obliczeń na pewnej liczbie członów powoduje powstanie błędów obcięcia.
2.2.4. Błędy dyskretyzacji. Przy obliczeniach numerycznych funkcje ciągłe zastępujemy funkcjami dyskretnymi, całki oznaczone aproksymujemy sumami skończonymi, ilorazy różniczkowe - ilorazami różnicowymi itd. Stąd powstają kolejne błędy obliczeń.
2.2.5. Błędy zaokrąglenia. Przy przedstawieniu liczb niewymiernych (na przykład liczba ![]()
), a nawet liczb wymiernych, które są ułamkami okresowymi (na przykład liczba ![]()
), po przecinku występuje nieskończona ilość cyfr. Jednak w obliczeniach numerycznych może być wykorzystana jedynie skończona ilość cyfr. Mówimy wtedy o zaokrągleniu i błędach zaokrąglenia.
Przy zaokrągleniu powstaje błąd, który może sięgać połowy jednostki ostatniej cyfry znaczącej. Aby więc po zaokrągleniu przybliżenia wszystkie cyfry byli pewne, błąd przed zaokrągleniem nie powinien przekraczać połowy jedności ostatniej cyfry pewnej.
Zaznaczmy, dziwną rzecz, że na przykład ułamek dziesętny 0.1 w układzie dwójkowym ma postać 0.0001100110011…
Prykład 2.5. Dotoczymy bardzo charakterny przykład obliczenia sinusa za pomocą szeregu Taylor'a, tzn.

Z analizy matematycznej wiadomo, że ten szereg jest zbieżny dla dowolnych wartości ![]()
z przedziału ![]()
i błąd nie przewyższa pierwszego pominiętego wyrazu.
Aby nie było przepełnienia przy obliczaniu kolejnych wyrazów dla dużych wartości ![]()
stosujemy wzór rekurencyjny

.
Niech teraz

.
Według wzoru dla sinusa w postaci szeregu Taylor'a otrzymamy

.
Wówczas jeśli

,
to po obliczeniach mamy całkowicie błędny wynik

.
Przyczyną takiego wyniku jest błędy zaokrąglenia.
Zły algorytm doprowadzi do złego wyniku. Program standardowy zawsze sprowadza kąt do przedziału
![]()
.
OL. O postaci zmiennopozycyjnej liczby dodatniej.
Każda liczba dodatnia może być zapisana w postaci zmiennopozycyjnej
![]()
gdzie ![]()
jest cyfry liczby ![]()
, ![]()
.
Na przykład, liczbę ![]()
możemy zapisać w postaci
![]()
Ponieważ, w zastosowaniach występuje ograniczenie ciągu, to liczba przybliżona ![]()
dla liczby dokładnej ![]()
ma postać
![]()
,
gdzie ![]()
oraz wszystkie ![]()
są cyfry znaczące (wartościowe).
Przy takim postępowaniu prawie zawsze występują zbędne cyfry zerowe, albo na początku, albo w końcu liczy. Oto przykład
![]()
,
![]()
,
tzn.
![]()
,
![]()
,
ani pierwszy zera w pierwszej liczbie, ani ostatni (cztery) liczby nie są cyfry znaczące (wartościowe).
Definicja 2.5. Cyframi znaczącymi liczby przybliżonej ![]()
nazywa się wszystkie cyfry jej zapisu dziesiętnego, począwszy od pierwszej cyfry różnej od zera.
Definicja 2.6. Cyfra znacząca nazywa się dokładną, jeśli błąd bezwzględny liczby nie przewyższa jedności pozycji dziesiętnej, odpowiadającej tej cyfrze. Ilość cyfr wartościowych w danym przybliżeniu dziesiętnym nazywamy stopniem dokładności tego przybliżenia.
Mówimy, że ![]()
pierwszych cyfr (znaków dziesiętnych) liczby przybliżonej są dokładne, jeśli błąd bezwzględny nie przewyższa połowy ostatniej pozycji, którą oznaczona liczba (licząc zlewa na prawo)
![]()
.
Oto przykład. Jeśli ![]()
, a ![]()
, to przybliżona liczba ![]()
ma trzy cyfry ścisłe, ponieważ ![]()
. Wówczas liczba przybliżona ![]()
dla liczby ![]()
ma pięć cyfr ścisłych, ponieważ ![]()
.
Dla liczby ścisłej ![]()
liczba przybliżona ![]()
ma trzy cyfry ścisłe, ponieważ ![]()
.
Twierdzenie. Jeśli stopień dokładności liczby przybliżonej ![]()
wynosi ![]()
, to względny błąd ![]()
tej liczby spełnia nierówność

.
Dowód. Załóżmy, że
![]()
jest liczba przybliżona liczby dokładnej ![]()
, w której ![]()
cyfr dokładnych. Wtedy
![]()
.
Skąd
![]()
.
Zatem
![]()
,
albo
![]()
.
Prawa strona nierówności przyjmuje wartość najmniejszą przy ![]()
, temu
![]()
.
Ponieważ ![]()
, to
![]()
.
Zgodnie z definicją

,
albo

.
Skutek 1. Za oceną ![]()
błędu względnego ![]()
liczby przybliżonej ![]()
ze stopniem dokładności ![]()
może być przyjęta

,
gdzie ![]()
jest pierwszą liczbą dokładną.
Skutek 2. Za oceną ![]()
błędu względnego ![]()
liczby przybliżonej ![]()
ze stopniem dokładności ![]()
może być przyjęta

.
Dowód. Jeżeli ![]()
, to w wyrażeniu
![]()
wyraz ![]()
może być zaniedbany. Wówczas
![]()
.
Zatem

.
Przykład 1. Zapisać oceną ![]()
błędu względnego ![]()
liczby przybliżonej ![]()
liczby ![]()
.
Ponieważ ![]()
i ![]()
, to

.
Przykład 2. Ile cyfr dokładnych powinno być w liczbie przybliżonej ![]()
liczby ![]()
, jeśli ![]()
?
Ponieważ ![]()
i ![]()
, to ze wzoru

mamy 
.
Skąd ![]()
i ![]()
.
OL. O różnym …
W układzie dziesiętnym i dwójkowym każdą liczbę rzeczywistą ![]()
można wyrazić w postaci
![]()
, ![]()
lub ![]()
, ![]()
,
gdzie ![]()
i ![]()
są liczbę całkowite.
W standardzie IEEE (Nr 754 z 1985) pierwszy bit określa znak (+ lub -), 8 następnych bitów - cechę mantysy ![]()
zwiększoną o 127, a pozostałe 23 bity przeznaczone na część ułamkową mantysy ![]()
.
Cecha jest liczba całkowita z przedziału ![]()
oraz ![]()
. Na ośmiu bitach można zapamiętać liczbę całkowite od ![]()
czyli ![]()
do ![]()
czyli ![]()
. Tych skrajnych wartości nie wykorzystuje się.
Podobnie, mantysa liczby różnej od zera, ma z założenia część całkowitą 1, więc dla niej nie rezerwuje się miejsca. Dla najmniejszej mantysy, równej 1, wszystkie 23 bity są zerami, największa jest ![]()
i wtedy te bity są jedynkami.
W komputerze można operować z liczbami od ![]()
do ![]()
. Oddzielne wyróżniamy liczbę ![]()
. Prócz tego, część ułamkowa mantysy ma co najwyżej 23 bity. Każda liczba spełniająca te ograniczenia zwana liczbą maszynową.
Zaznaczmy, że nawet liczba ![]()
nie mogę być dokładnie określona przez liczbie maszynową.
W standardzie IEEE (Nr 754 z 1985) omówione również zero w postaci +0 lub -0, a także symbole ![]()
i ![]()
oraz symbol specjalny ![]()
, który sygnalizuje, że działania rodzaju ![]()
, ![]()
, … lub ![]()
, są niewykonalnie.
Stosując pewien język programowania należę uwzględniać informację:
jakie są dopuszczalne wartości cechy ![]()
(ocenia to zakres liczb maszynowych);
jaka długość części słowa przeznaczonego na mantysę ![]()
bez jej znaku (o tym decyduje liczba bitów ![]()
).
Liczbę
![]()
nazywamy precyzją arytmetyki dla danego komputera.
Jeśli taka precyzja jest niewystarczająca, to programowo dokonuje się obliczeń z podwójną precyzją. Wtedy na każdą liczbę rezerwuje się dwa słowa 32-bitowe.
Oprócz tego rozkład liczb zmiennopozycyjnych jest nierównomierny. Mamy zagęszczenie w pobliżu zera, ale w otoczeniu samego zera występuje luka.
Zastąpienie liczb rzeczywistych liczbami maszynowymi realizujemy następująco. Niech ![]()
i ![]()
, gdzie ![]()
. Stąd
![]()
,
gdzie ![]()
są równe ![]()
lub ![]()
. Jeśli mantysy liczb maszynowych mają ![]()
bitów po kropce, to dokonujemy obcięcia i zastępujemy liczbę przez liczbę maszynową
![]()
.
Otrzymana liczba jest mniejsza od wyjściowej, tzn. ![]()
, a najbliższa liczba maszynowa, która większa tej liczby, to
![]()
.
Jest oczywiste, że ![]()
.
Najbliższą do ![]()
liczbę maszynową oznaczamy symbolem ![]()
. Jeśli ![]()
, to
![]()
inaczej ![]()
i
![]()
Błąd względny reprezentacji będzie

.
Określimy wielkość ![]()
i zapiszemy
![]()
.
Np. Jaka postać dwójkowa liczby ![]()
w przykładowej arytmetyce, w której ![]()
? Jaki są dwie liczby maszynowe ![]()
i ![]()
? Która z tych liczb jest ![]()
? Jaki błąd zaokrąglenia wywołany zamianą ![]()
na ![]()
?
Zapiszemy
![]()
.
Mnożenie przez 2 daje
![]()
.
Część całkowita obu stron jest równa ![]()
i po jej odjęciu mamy
![]()
.
Powtarzając te działania znajdziemy
![]()
.
Dwie bliskie liczby maszynowe są równe
![]()
,
![]()
,
gdzie po przecinku mamy 23 bity. Pierwsza liczba daje obcięcie, a druga zaokrąglenie w górę.
Obliczamy różnice
![]()
,
![]()
.
Dla tego ![]()
oraz
![]()
i 
Działania arytmetyczne na liczbach zmiennopozycyjnych.
Przyjmujemy, że komputer działa tak, że po wykonaniu działania arytmetycznego mantysa wyniku jest normalizowana, tzn. sprowadzana do właściwego przedziału, np. ![]()
, a cecha odpowiednio korygowana. Wówczas wynikiem działania nad liczbami maszynowymi ![]()
i ![]()
jest ![]()
, gdzie przez symbol ![]()
oznaczono jedno z czterech działań arytmetycznych.
W dobrze zaprojektowanym komputerze mamy
![]()
,
gdzie ![]()
jest precyzją arytmetyki.
Jeżeli liczby ![]()
i ![]()
są liczbami zmiennopozycyjnymi (nie maszynowymi), to wtedy
![]()
.
Zaznaczmy, że działania arytmetyczne wykonują się w specjalnych rejestrach, które są dłuższe od słów przeznaczonych na liczby maszynowe (dodatkowe bity chroniące).
2.3. Błędy działań arytmetycznych.
Prawdziwym błędem jest błąd
popełnić i nie naprawić go.
Konfucjusz
2.3.1. Błąd sumy. Załóżmy, że mamy dwie liczby
![]()
oraz ![]()
.
Wtedy ich suma będzie
![]()
a więc
![]()
i
![]()
lub 
.
2.3.2. Błąd różnicy. Podobnie
![]()
a więc
![]()
i
![]()
lub 
.
Jeśli liczby przybliżone ![]()
i ![]()
różnią się nieznacznie, to ich różnica ![]()
jest wielkością małą. Tak, że błędy względne mogą być duże i mamy utraty dokładności przy takich obliczeniach. Należę unikać takich sytuacji przy napisaniu algorytmu.
Twierdzenie. Jeśli liczby maszynowe ![]()
i ![]()
są takie, że ![]()
i
![]()
,
to liczba bitów znaczących straconych przy odejmowaniu ![]()
jest równa co najmniej ![]()
i co najwyżej ![]()
.
Przykład. Przeanalizować odejmowanie dla wyrazów
![]()
oraz ![]()
.
2.3.3. Błąd iloczynu. Mnożąc mamy
![]()
Ponieważ ![]()
, to
![]()
i

.
2.3.4. Błąd ilorazu. Analogicznie można udowodnić, że

i
![]()
.
Zaznaczmy, że błąd względny n-tej potęgi liczby przybliżonej
![]()
wówczas pierwiastka stopnia n

Przykłady 2.6. Kombinację działań na liczbach przybliżonych.
1. Mamy wyrażenie
![]()
.
Obliczamy kolejno
![]()
.
Ponieważ ![]()
, to

.
2. Mamy wyrażenie

.
Dokonujemy obliczeń
![]()
.
Wtedy

.
2.3.5. Błąd funkcji jednej zmiennej. Jeśli funkcja
![]()
jest różniczkowalna, to dla dostatecznie małego przyrostu argumentu ![]()
przyrost funkcji ![]()
równia się w przybliżeniu jej różniczce
![]()
,
a więc
![]()
,

lub

.
Uwarunkowanie
Sformułujemy odpowiedź na pytanie jak małe zmiany argumentu funkcji wpływają na jej wartość. Korzystając z definicji pochodnej notujemy

.
Na tej podstawie wielkość

nazywamy współczynnikiem uwarunkowania.
Funkcja ![]()
ma pojedynczy pierwiastek (![]()
) dla ![]()
. Jak zmienia się pierwiastek jeśli funkcję ![]()
zamieniamy na ![]()
, gdzie ![]()
jest dowolna funkcja z klasy ![]()
, jak i funkcja ![]()
. Załóżmy, że nowy pierwiastek ![]()
i wtedy
![]()
.
Dokonamy rozwinięcia w wzór Taylora

.
Ponieważ ![]()
, a wyrażenia w których występuje ![]()
są małe, to możemy zapisać

.
Przykład (Wilkinson). Rozważmy wielomiany

i ![]()
.
Pierwiastki równania ![]()
będą ![]()
![]()
. Funkcja ![]()
jest wielomianem w którym przy wyrażeniu ![]()
występuje współczynnik ![]()
. Zgodnie z powyższym wzorem

.
Stąd wynika czułość pierwiastków na małe zaburzenia współczynników wielomianu Wilkinsona.
Rozważmy aproksymacje średniokwadratową wielomianem dla dowolnej funkcji ![]()
. Szukamy minimum całki

.
Różniczkujemy względem poszukiwanych współczynników ![]()
i wynik przyrównujemy do zera. Otrzymujemy układ równań normalnych

, ![]()
.
Całkujemy

(![]()
),
i oznaczamy

, 
, ![]()
.
Zaznaczmy, że macierz

zwana jest macierzą Hilberta ![]()
tego stopnia.
Wtedy układ normalny dla określenia współczynników ![]()
zapiszemy w postaci

(![]()
) lub ![]()
,
gdzie ![]()
i ![]()
.
Wskaźnik uwarunkowania takich równań liniowych określa się przez wzór
![]()
.
W rozważanym przypadku wskaźnik uwarunkowania
![]()
szybko rośnie. Więc dla dużych ![]()
zagadnienie jest źle uwarunkowane, a wielomiany względem ![]()
tworzą źle uwarunkowaną bazę dla rozwinięcia funkcji z taką normą.
Na podsumowanie, zaznaczymy, że w skomplikowanych obliczeniach komputerowych popularne są dwie metody kontroli błędów:
ponownie rozwiązanie tego samego zagadnienia inną metodą lub tą samą metodą, ale z inną kolejnością operacji;
ponownie rozwiązanie zagadnienia przy nie znacznej zmianie danych wejściowych.
T
Fop
φ
mg
mgsinφ
l