Przeczytaj
Wiemy już, że istnieją błędy przybliżeń, wśród których wyróżniamy błąd bezwzględnybłąd bezwzględny oraz błąd względnybłąd względny. W tym e‑materiale użyjemy języka Python do obliczenia i wizualizacji tych błędów.
Znając definicje błędów bezwzględnego oraz względnego, możemy napisać funkcje obliczające odpowiednie wartości. Przetestujemy je dla wartości zmierzonych: 225 i 250 oraz wartości dokładnej 242.
Wynikiem wykonania kodu dla wartości zmierzonych 225 i 250 oraz wartości dokładnej 242 jest:
Przeanalizujmy teraz sytuację, w której symulujemy „ręczne” obliczenie wartości za pomocą zaokrąglenia. Prześledźmy błąd bezwzględny oraz względny dla kolejnych zaokrągleń liczby pi.
W przykładzie mamy podaną wartość liczby pi z dokładnością do 42 miejsc po przecinku. W języku Python w module math
wartość liczby pi jest zapisana jako math.pi
z dostępną precyzją – w tym przypadku 3.141592653589793
. Będziemy obliczali błąd bezwzględny i względny oraz błąd względny wyrażony w procentach dla kolejnych przybliżeń: od dwóch miejsc po przecinku, czyli wartości 3.14
, do 15 miejsc po przecinku, a więc dokładnej wartości, kiedy błąd będzie wynosił 0. Sprawdzimy kilka obliczonych wartości.
Wartość dokładna to 3.141592653589793
Wartość zmierzona | Błąd względny | Błąd względny w procentach |
| 0.0005069573828972128 | 0.05069573828972128 |
| 2.0804409260601893e‑07 | 2.0804409260601892e‑05 |
| 3.1172263038059322e‑12 | 3.117226303805932e‑10 |
| 0.0 | 0.0 |
Napiszmy kod, który pozwoli zobrazować błąd w zależności od kolejnych zaokrągleń. Przygotujemy dwa wykresy w celu odpowiedniego doboru skali.
Bibliotekę matplotlib
omawialiśmy również w e‑materiale Modelowanie ruchów Browna w języku PythonModelowanie ruchów Browna w języku Python.
Wykres pierwszy – błąd względny oraz bezwzględny wartościowo:
![Ilustracja przedstawia wykres błędu bezwzględnego i względnego zatytułowany "Wartość bazowa pi = 3,141592653589793". Pozioma oś jest przedstawiona od minus jednej drugiej do dwunastu z podziałką co dwa. Oś pionowa przedstawiona jest od minus jednej dziesięciotysięcznej do szesnastu dziesięciotysięcznych z podziałką co dwie dziesięciotysięczne. Oba wykresy błędu bezwzględnego i względnego zaczynają się w punkcie (0,0). Wykres względny biegnie poziomo od punktu (0,0) do punktu (10,0), od którego zaczyna linowo rosnąć do punktu (11;0,00016) i stąd zaczyna rosnąć liniowo szybciej, czyli jest bardziej pochyły do punktu (12;0,0005). Wykres błędu bezwzględnego biegnie poziomo od punktu (0,0) do punktu (8,0) i rośnie łagodnie liniowo do punktu około (10;0,00001). Następnie rośnie szybko i liniowo do punktu (11;0,0004). Stąd rośnie liniowo jeszcze szybciej do punktu (12;0,0016).](https://static.zpe.gov.pl/portal/f/res-minimized/R1LARMAAiuuZb/1677592982/gqdBVVr0JXe5irVqUay1tcBXYP5fZGme.png)
Wykres drugi – błąd względny procentowo:
![Ilustracja przedstawia wykres błędu względnego procentowo zatytułowany "Wartość bazowa pi = 3,141592653589793". Pozioma oś jest przedstawiona od minus jednej drugiej do dwunastu z podziałką co dwa. Oś pionowa przedstawiona jest od minus jednej setnej do pięciu setnych z podziałką co jedną setną. Wykres błędu względnego zaczyna się w punkcie (0,0) i biegnie poziomo od punktu (0,0) do punktu (8,0), od którego zaczyna linowo rosnąć do punktu około (10;0,001). Stąd zaczyna rosnąć liniowo szybciej, czyli jest bardziej pochyły do punktu (1023;0,013). Stąd wykres rośnie liniowo szybciej do punktu (12;0,05).](https://static.zpe.gov.pl/portal/f/res-minimized/RWWi7RM8MjNXI/1677592982/2TXq39CEAGkT0y2v07kjGQ3ahwvTm1yy.png)
Możemy zauważyć, że błąd przybliżenia (zarówno względny, jak i bezwzględny) zmienia się – maleje wraz ze wzrostem dokładności obserwowanej liczby.
Napiszmy kod, który pozwoli zaokrąglić liczbę pi do takiego momentu, dla którego błąd względny przekroczy 0,01 procenta – wówczas zatrzymamy kolejne zaokrąglenia.
Wykres pierwszy – błąd względny oraz bezwzględny wartościowo:
![Ilustracja przedstawia wykres błędu bezwzględnego i względnego zatytułowany "Wartość bazowa pi = 3,141592653589793. Ostatni wynik w założonym błędzie = 3,1416". Pozioma oś jest przedstawiona od minus jednej drugiej do dziesięciu z podziałką co dwa. Oś pionowa przedstawiona jest od minus jednej milionowej do ośmiu milionowych z podziałką co jedną milionową. Oba wykresy błędu bezwzględnego i względnego zaczynają się w punkcie (0,0). Wykres względny biegnie poziomo od punktu (0,0) do punktu (6,0), od którego zaczyna linowo rosnąć do punktu (8;0,0000002) i stąd zaczyna rosnąć liniowo szybciej, czyli jest bardziej pochyły do punktu (9;0,0000008). Wykres błędu bezwzględnego biegnie poziomo od punktu (0,0) do punktu (6,0) i rośnie łagodnie liniowo do punktu około (7;0,0000001). Następnie rośnie liniowo do punktu (8;0,0000004). Stąd rośnie liniowo jeszcze szybciej do punktu (9;0,0000027). Stąd dalej rośnie liniowo do punktu (10;0,0000074).](https://static.zpe.gov.pl/portal/f/res-minimized/R1RxgzoStsP14/1677592982/PWQQVEQTJwivbkJqis967xluY1eQFCsz.png)
Wykres drugi – błąd względny procentowo:
![Ilustracja przedstawia wykres błędu względnego procentowo zatytułowany "Wartość bazowa pi = 3,141592653589793. Ostatni wynik w założonym błędzie = 3,1416". Pozioma oś jest przedstawiona od minus jednej drugiej do dziesięciu z podziałką co dwa. Oś pionowa przedstawiona jest od minus jednej stutysięcznej do trzydziestu stutysięcznych z podziałką co pięć stutysięcznych. Wykres błędu względnego procentowo zaczyna się w punkcie (0,0) i biegnie poziomo od punktu (0,0) do punktu (6,0), od którego zaczyna linowo rosnąć do punktu około (7;0,0000001). Stąd zaczyna rosnąć liniowo szybciej do punktu (8;0,000015). Stąd wykres rośnie liniowo szybciej do punktu (9;0,00008). Stąd wykres biegnie do punktu (10;0,00023).](https://static.zpe.gov.pl/portal/f/res-minimized/RI2tyAzM4gIXN/1677592983/1OHGsDpzxbRrxNOvulZYyAVRBRfMYZGx.png)
W języku Python istnieje moduł o nazwie Decimal
. Zapewnia on obsługę arytmetyki zmiennoprzecinkowej i podaje dokładniejsze wyniki. Prześledźmy to na przykładzie dodawania do siebie dwóch wartości rzeczywistych: 0.1 + 0.2
. Z lekcji matematyki wiemy, że wynik powinien wynosić 0.3,
a jednak program w języku Python wyświetla następującą wartość:
Wynik jest większy niż 0.3
- niewiele, ale jednak większy. Jest to związane ze sposobem, w jaki język Python przechowuje w pamięci liczby. Zobaczymy, jak wygląda ta sama sytuacja, kiedy użyjemy modułu Decimal
. Pamiętajmy, że liczby podajemy jako parametr typu str
.
Zauważmy, że wartości podane po wykorzystaniu modułu Decimal
są dokładniejsze.
Dla komputera obliczenie 3 * 0.1 - 0.3
daje wynik 5.551115123125783e‑17
. Jest on bardzo bliski zeru, jednak nie jest to dokładnie zero. Natomiast zastosowanie do tego obliczenia modułu i typu danych Decimal
daje oczekiwany wynik.
Słownik
wyraża bezwzględną różnicę pomiędzy wartością zmierzoną a dokładną; obliczamy go zgodnie ze wzorem:
gdzie to wartość dokładna, – wartość zmierzona, a – błąd bezwzględny
informuje, o ile procent różni się wartość zmierzona od dokładnej; obliczamy go zgodnie ze wzorem:
gdzie to wartość dokładna, – wartość zmierzona, – błąd bezwzględny, zaś to błąd względny