559 lines
22 KiB
TeX
559 lines
22 KiB
TeX
\documentclass[a4paper]{article}
|
||
\usepackage[T1]{fontenc}
|
||
\usepackage[polish]{babel}
|
||
\usepackage[utf8]{inputenc}
|
||
\usepackage{amsmath}
|
||
\usepackage{amssymb}
|
||
\usepackage{adjustbox}
|
||
\usepackage{longtable}
|
||
\usepackage{siunitx}
|
||
\usepackage{graphicx}
|
||
\graphicspath{ {./} }
|
||
|
||
\title{Obliczenia naukowe – Lista 2}
|
||
\author{Jacek Poziemski 272389}
|
||
\date{10.11.2024}
|
||
\begin{document}
|
||
\maketitle
|
||
|
||
\textbf{Zad. 1}
|
||
|
||
Zadanie polega na powtórzeniu zadania 5. z listy 1.
|
||
wprowadzając niewielkie zmiany danych, czyli na
|
||
eksperymentalnym obliczaniu iloczynu skalarnego
|
||
dwóch wektorów na 4 różne sposoby:
|
||
|
||
\vspace{0.25cm}
|
||
|
||
(a) w przód – od pierwszego do ostatniego elementu
|
||
|
||
\vspace{0.25cm}
|
||
|
||
(b) w tył – od ostatniego do pierwszego elementu
|
||
|
||
\vspace{0.25cm}
|
||
|
||
(c) od największego do najmniejszego – liczenie częściowych
|
||
sum elementów dodatnich i ujemnych w porządku malejącym względem
|
||
wartości absolutnej liczb, następnie dodanie do siebie sum częściowych
|
||
|
||
\vspace{0.25cm}
|
||
|
||
(d) od największego do najmniejszego – liczenie częściowych
|
||
sum elementów dodatnich i ujemnych w porządku rosnącym względem
|
||
wartości absolutnej liczb, następnie dodanie do siebie sum częściowych
|
||
|
||
\vspace{0.25cm}
|
||
|
||
używając typów zmiennopozycyjnych $Float32$ i $Float64$.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Poniżej przedstawiam dane i wyniki dla obu zadań:
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Z5/L1:
|
||
|
||
\begin{gather*}
|
||
x = [2.718281828, -3.141592654, 1.414213562, \boldsymbol{0.5772156649}, \boldsymbol{0.3010299957}] \\
|
||
y = [1486.2497, 878366.9879, -22.37492, 4773714.647, 0.000185049]
|
||
\end{gather*}
|
||
|
||
Poprawna wartość iloczynu skalarnego: $-1.00657107000000 \cdot 10^{-11}$
|
||
|
||
\begin{table}[h]
|
||
\begin{adjustbox}{max width=\textwidth}
|
||
\begin{tabular}{|c|c|c|}
|
||
\hline
|
||
Sposób & Wynik dla $Float32$ & Wynik dla $Float64$ \\ \hline
|
||
(a) & -0.4999442994594574 & 1.0251881368296672e-10 \\
|
||
(b) & -0.454345703125 & -1.5643308870494366e-10 \\
|
||
(c) & -0.5 & 0.0 \\
|
||
(d) & -0.5 & 0.0 \\
|
||
\hline
|
||
\end{tabular}
|
||
\end{adjustbox}
|
||
\end{table}
|
||
|
||
Z1/L2:
|
||
|
||
\begin{gather*}
|
||
x = [2.718281828, -3.141592654, 1.414213562, \boldsymbol{0.577215664}, \boldsymbol{0.301029995}] \\
|
||
y = [1486.2497, 878366.9879, -22.37492, 4773714.647, 0.000185049]
|
||
\end{gather*}
|
||
|
||
Poprawna wartość iloczynu skalarnego: $-0.004296343192495245$
|
||
|
||
\begin{table}[h]
|
||
\begin{adjustbox}{max width=\textwidth}
|
||
\begin{tabular}{|c|c|c|}
|
||
\hline
|
||
Sposób & Wynik dla $Float32$ & Wynik dla $Float64$ \\ \hline
|
||
(a) & -0.4999442994594574 & -0.004296342739891585 \\
|
||
(b) & -0.454345703125 & -0.004296342998713953 \\
|
||
(c) & -0.5 & -0.004296342842280865 \\
|
||
(d) & -0.5 & -0.004296342842280865 \\
|
||
\hline
|
||
\end{tabular}
|
||
\end{adjustbox}
|
||
\end{table}
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Wartości dla typu $Float32$ są identyczne do zadania 5. z listy 1.,
|
||
ponieważ zmiany w wartościach są zbyt małe, $Float32$ przez zbyt
|
||
małą precyzję traci cyfry które usunęliśmy z oryginalnych wartości.
|
||
Z kolei zmiana wartości dla typu $Float64$ jest znaczna – wartości
|
||
dla wszystkich sposobów są znacznie bliższe wartości poprawnej.
|
||
Jest tak dlatego, że zadanie jest źle uwarunkowane – przy
|
||
pisaniu go nie wzięto pod uwagę błędów spowodowanych
|
||
przez zbyt małą precyzję typów zmiennopozycyjnych.
|
||
|
||
\vspace{0.5cm}
|
||
|
||
\textbf{Zad. 2}
|
||
|
||
Narysowanie wykresu funkcji $f(x) = e^x\ln(1 + e^{-x})$
|
||
w dwóch programach do wizualizacji, obliczenie granicy funkcji
|
||
$\lim_{x \to \infty} f(x)$, porównanie wykresu z obliczoną granicą.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Do rysowania wykresów wybrałem pakiet $Plots$ z języka Julia i silnik Wolfram Alpha.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Pakiet $Plots$ z języka Julia:
|
||
|
||
\includegraphics[scale=0.5]{2-julia-plots}
|
||
|
||
\newpage
|
||
|
||
Wolfram Alpha:
|
||
|
||
\includegraphics{2-wolfram}
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Granica funkcji dla x dążącego do $\infty$ wynosi $1$.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Algorytm jest niestabilny numerycznie – dla $x \geq 32$
|
||
wykres zaczyna odbiegać coraz bardziej od rzeczywistej
|
||
granicy funkcji, po czym przy wartości około $37$ spada
|
||
do $0$ i tam zostaje. Pierwsze zjawisko występuje z powodu
|
||
eksponencjalnego wzrostu $e^x$ – mnożenie tej wartości z
|
||
$ln(1 + e^{-x})$ powoduje utratę precyzji. $1 + e^{-x}$ wraz
|
||
ze wzrostem $x$ dąży do $1$, przez co logarytm naturalny
|
||
tej wartości dąży do $0$. Przez to najpierw funkcja oscyluje
|
||
wokół $1$, następnie spada do $0$.
|
||
|
||
\vspace{0.5cm}
|
||
|
||
\textbf{Zad. 3}
|
||
|
||
Rozwiązywanie układu równań liniowych $Ax = b$ dla
|
||
macierzy współczynników $A \in \mathbb{R}^{n \times n}$
|
||
i wektora prawych stron $b \in \mathbb{R}^n$.
|
||
Macierze są generowane za pomocą funkcji $hilb(n)$
|
||
(macierz Hilberta stopnia $n$) oraz $matcond(n, c)$
|
||
(macierz losowa stopnia $n$ z zadanym wskaźnikiem
|
||
uwarunkowania $c$). Równanie jest rozwiązywane za
|
||
pomocą eliminacji Gaussa ($x = A \setminus b$)
|
||
oraz macierzy odwrotnej ($x = A^{-1}b$), porównywane
|
||
są wyniki obu sposobów z dokładnym rozwiązaniem, czyli
|
||
$x = (1, ..., 1)^T$, aby uzyskać błędy względne.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Poniżej przedstawiam tabele z wynikami opisanymi powyżej dla macierzy
|
||
Hilberta i losowych. Uwarunkowanie jest liczone za pomocą funkcji
|
||
$cond()$ z pakietu $LinearAlgebra$ języka Julia, rząd jest
|
||
liczony funkcją $rank()$ z tego samego pakietu.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
\newpage
|
||
|
||
Macierze Hilberta:
|
||
|
||
\begin{table}[h]
|
||
\begin{adjustbox}{max width=\textwidth}
|
||
\begin{tabular}{|c|c|c|c|c|}
|
||
\hline
|
||
n & Uwarunkowanie & Rząd & Błąd metody Gaussa & Błąd metody macierzy odwrotnej \\ \hline
|
||
1 & 1.0 & 1 & 0.0 & 0.0 \\
|
||
2 & 19.281470067903967 & 2 & 5.661048867003676e-16 & 1.1240151438116956e-15 \\
|
||
3 & 524.0567775860627 & 3 & 8.351061872731819e-15 & 9.825526038180824e-15 \\
|
||
4 & 15513.738738929662 & 4 & 4.2267316576255873e-13 & 3.9600008750140806e-13 \\
|
||
5 & 476607.2502419338 & 5 & 1.256825919192874e-12 & 8.128168770215688e-12 \\
|
||
6 & 1.495105864177819e7 & 6 & 1.5435074657413347e-10 & 1.0423794065751672e-10 \\
|
||
7 & 4.753673568766496e8 & 7 & 6.520804933066021e-9 & 4.3299229851434615e-9 \\
|
||
8 & 1.5257575563722723e10 & 8 & 3.6010489197068436e-7 & 4.0236799996435915e-7 \\
|
||
9 & 4.9315332284138226e11 & 9 & 1.3216991540025553e-5 & 1.4626798972086921e-5 \\
|
||
10 & 1.6024980732174455e13 & 10 & 0.0004194170177181955 & 0.00040714905218460087 \\
|
||
11 & 5.224780779168285e14 & 10 & 0.01004906783345069 & 0.010645959401385671 \\
|
||
12 & 1.6425917529444498e16 & 11 & 0.5502106922296848 & 0.6697890564301745 \\
|
||
13 & 4.4936679531246986e18 & 11 & 70.1556197115221 & 82.66675811171989 \\
|
||
14 & 3.2198422552156205e17 & 11 & 9.649642437452474 & 10.094732062453225 \\
|
||
15 & 3.3660126672602944e17 & 12 & 692.4295360390742 & 715.740988667373 \\
|
||
16 & 2.249940193352714e18 & 12 & 10.414656083840297 & 8.442143351389534 \\
|
||
17 & 6.26204622473199e17 & 12 & 18.67581817300634 & 17.157982115668773 \\
|
||
18 & 3.266632306940269e18 & 12 & 5.40548300394664 & 3.742412802776696 \\
|
||
19 & 3.462302955915255e18 & 13 & 15.073941146224387 & 16.84769281513296 \\
|
||
20 & 6.806966421072721e18 & 13 & 28.79267493699834 & 30.751202239608727 \\
|
||
\hline
|
||
\end{tabular}
|
||
\end{adjustbox}
|
||
\end{table}
|
||
|
||
Macierze losowe:
|
||
|
||
\begin{table}[h]
|
||
\begin{adjustbox}{max width=\textwidth}
|
||
\begin{tabular}{|c|c|c|c|c|c|}
|
||
\hline
|
||
n & c & Uwarunkowanie & Rząd & Błąd metody Gaussa & Błąd metody macierzy odwrotnej \\ \hline
|
||
5 & $10^0$ & 1.0000000000000007 & 5 & 1.2161883888976234e-16 & 9.930136612989092e-17 \\
|
||
5 & $10^1$ & 10.000000000000009 & 5 & 1.9229626863835638e-16 & 1.4043333874306804e-16 \\
|
||
5 & $10^3$ & 999.9999999999479 & 5 & 1.2158944411806644e-14 & 1.7034743437620337e-14 \\
|
||
5 & $10^7$ & 9.999999998942768e6 & 5 & 3.779858573658035e-11 & 7.001100940383748e-11 \\
|
||
5 & $10^{12}$ & 1.0000358548219889e12 & 5 & 8.318028330255335e-6 & 2.412626388678268e-6 \\
|
||
5 & $10^{16}$ & 6.7112223576348e15 & 4 & 0.1468248218117339 & 0.19241602267287927 \\
|
||
10 & $10^0$ & 1.0000000000000007 & 10 & 3.293453726225543e-16 & 2.248030287623391e-16 \\
|
||
10 & $10^1$ & 10.000000000000004 & 10 & 2.8737410463596867e-16 & 2.696722356863272e-16 \\
|
||
10 & $10^3$ & 1000.0000000000464 & 10 & 2.804142933558009e-14 & 3.225353619740909e-14 \\
|
||
10 & $10^7$ & 1.000000000299259e7 & 10 & 3.9859081581065853e-10 & 4.391207697689116e-10 \\
|
||
10 & $10^{12}$ & 9.999295565588569e11 & 10 & 3.3540852774047696e-6 & 1.0634644618672672e-5 \\
|
||
10 & $10^{16}$ & 1.3146979480124638e16 & 9 & 0.009734949899136553 & 0.07859235212474557 \\
|
||
20 & $10^0$ & 1.0000000000000016 & 20 & 5.438959822042073e-16 & 4.3568297570458958e-16 \\
|
||
20 & $10^1$ & 9.999999999999996 & 20 & 6.843874359417885e-16 & 6.995286129029383e-16 \\
|
||
20 & $10^3$ & 1000.0000000000807 & 20 & 9.187657331404228e-15 & 3.275440170573378e-15 \\
|
||
20 & $10^7$ & 9.99999999397263e6 & 20 & 2.1966900086249582e-10 & 1.7889092637261268e-10 \\
|
||
20 & $10^{12}$ & 9.999571219238594e11 & 20 & 1.4222130831564009e-5 & 1.374375061162218e-5 \\
|
||
20 & $10^{16}$ & 2.508476826100777e16 & 19 & 0.06010750951624971 & 0.10225127023966499 \\
|
||
\hline
|
||
\end{tabular}
|
||
\end{adjustbox}
|
||
\end{table}
|
||
|
||
Dla macierzy Hilberta oraz losowych wraz ze wzrostem uwarunkowania
|
||
wzrasta również błąd dla obu metod. Z tabeli dla macierzy losowych widać
|
||
również, że funkcja $cond()$ nie oblicza dokładnej wartości uwarunkowania,
|
||
lecz jedynie ją przybliża. Dodatkowo wartości przez nią zwracane
|
||
jak i wartości błędów dla obu metod zależą od mikroarchitektury procesora,
|
||
prawdopodobnie ponieważ różne procesory inaczej aproksymują niektóre
|
||
instrukcje assembly x86\_64.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Zadanie ma wysoki wskaźnik uwarunkowania, dla macierzy Hilberta wzrost
|
||
stopnia macierzy mocno wpływa na wskaźnik uwarunkowania i co za tym
|
||
idzie błędy dla obu metod. W macierzach losowych zachodzi to samo
|
||
zjawisko, jednak wzrost błędów jest o wiele wolniejszy i nie monotoniczny.
|
||
|
||
\vspace{0.5cm}
|
||
|
||
\textbf{Zad. 4}
|
||
|
||
Obliczenie pierwiastków $z_k$ ($1 \leq k \leq 20$)
|
||
wielomianu Wilkinsona w postaci naturalnej
|
||
($P(x)$, podana na stronie) i iloczynowej
|
||
($p(x)$, stworzona za pomocą funkcji $fromroots()$)
|
||
oraz obliczenie $|P(z_k)|$, $|p(z_k)|$ i $|z_k - k|$.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Następnie powtórzenie tego eksperymentu, z
|
||
współczynnikiem $-210$ zmienionym na $-210 - 2^{-23}$.
|
||
|
||
Pierwiastki zostały obliczone za pomocą funkcji $roots()$.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Wyniki dla oryginalnego wielomianu Wilkinsona:
|
||
|
||
\begin{table}[h]
|
||
\begin{adjustbox}{max width=\textwidth}
|
||
\begin{tabular}{|c|c|c|c|c|}
|
||
\hline
|
||
$k$ & $z_k$ & $|P(z_k)|$ & $|p(z_k)|$ & $|z_k - k|$ \\ \hline
|
||
1 & 0.9999999999996989 & 35696.50964788257 & 368.50964789367345 & 3.0109248427834245e-13 \\
|
||
2 & 2.0000000000283182 & 176252.60026668405 & 15996.60026439321 & 2.8318236644508943e-11 \\
|
||
3 & 2.9999999995920965 & 279157.6968824087 & 100981.69690684375 & 4.0790348876384996e-10 \\
|
||
4 & 3.9999999837375317 & 3.0271092988991085e6 & 252581.31017303217 & 1.626246826091915e-8 \\
|
||
5 & 5.000000665769791 & 2.2917473756567076e7 & 152225.31504973918 & 6.657697912970661e-7 \\
|
||
6 & 5.999989245824773 & 1.2902417284205095e8 & 4.441356137271629e6 & 1.0754175226779239e-5 \\
|
||
7 & 7.000102002793008 & 4.805112754602064e8 & 4.510025884078405e7 & 0.00010200279300764947 \\
|
||
8 & 7.999355829607762 & 1.6379520218961136e9 & 2.309311180467704e8 & 0.0006441703922384079 \\
|
||
9 & 9.002915294362053 & 4.877071372550003e9 & 5.2519713947457147e8 & 0.002915294362052734 \\
|
||
10 & 9.990413042481725 & 1.3638638195458128e10 & 1.4705597374927537e9 & 0.009586957518274986 \\
|
||
11 & 11.025022932909318 & 3.585631295130865e10 & 2.257814747009822e9 & 0.025022932909317674 \\
|
||
12 & 11.953283253846857 & 7.533332360358197e10 & 5.776283226748977e9 & 0.04671674615314281 \\
|
||
13 & 13.07431403244734 & 1.9605988124330817e11 & 8.720084582957656e8 & 0.07431403244734014 \\
|
||
14 & 13.914755591802127 & 3.5751347823104315e11 & 2.100530498133618e10 & 0.08524440819787316 \\
|
||
15 & 15.075493799699476 & 8.21627123645597e11 & 9.0205643837176e10 & 0.07549379969947623 \\
|
||
16 & 15.946286716607972 & 1.5514978880494067e12 & 1.1093925108150577e11 & 0.05371328339202819 \\
|
||
17 & 17.025427146237412 & 3.694735918486229e12 & 5.420826950832621e11 & 0.025427146237412046 \\
|
||
18 & 17.99092135271648 & 7.650109016515867e12 & 2.0817615965429592e12 & 0.009078647283519814 \\
|
||
19 & 19.00190981829944 & 1.1435273749721195e13 & 4.420887520697798e12 & 0.0019098182994383706 \\
|
||
20 & 19.999809291236637 & 2.7924106393680727e13 & 3.2780945625202856e12 & 0.00019070876336257925 \\
|
||
\hline
|
||
\end{tabular}
|
||
\end{adjustbox}
|
||
\end{table}
|
||
|
||
Wyniki dla wielomianu Wilkinsona ze zmienionym współczynnikiem:
|
||
|
||
\begin{table}[h]
|
||
\begin{adjustbox}{max width=\textwidth}
|
||
\begin{tabular}{|c|c|c|c|c|}
|
||
\hline
|
||
$k$ & $z_k$ & $|P(z_k)|$ & $|p(z_k)|$ & $|z_k - k|$ \\ \hline
|
||
1 & 0.9999999999998357 + 0.0i & 20259.872313418207 & 5411.872313429985 & 1.6431300764452317e-13 \\
|
||
2 & 2.0000000000550373 + 0.0i & 346541.4137593836 & 65453.413724836006 & 5.503730804434781e-11 \\
|
||
3 & 2.99999999660342 + 0.0i & 2.2580597001197007e6 & 447115.71016096906 & 3.3965799062229962e-9 \\
|
||
4 & 4.000000089724362 + 0.0i & 1.0542631790395478e7 & 2.0101490631149793e6 & 8.972436216225788e-8 \\
|
||
5 & 4.99999857388791 + 0.0i & 3.757830916585153e7 & 1.0452670578285774e7 & 1.4261120897529622e-6 \\
|
||
6 & 6.000020476673031 + 0.0i & 1.3140943325569446e8 & 5.2837387075878106e7 & 2.0476673030955794e-5 \\
|
||
7 & 6.99960207042242 + 0.0i & 3.939355874647618e8 & 1.3630697385185716e8 & 0.00039792957757978087 \\
|
||
8 & 8.007772029099446 + 0.0i & 1.184986961371896e9 & 5.478192020926859e8 & 0.007772029099445632 \\
|
||
9 & 8.915816367932559 + 0.0i & 2.2255221233077707e9 & 1.2795423874534175e9 & 0.0841836320674414 \\
|
||
10 & 10.095455630535774 - 0.6449328236240688i & 1.0677921232930157e10 & 1.8009361907024696e9 & 0.6519586830380407 \\
|
||
11 & 10.095455630535774 + 0.6449328236240688i & 1.0677921232930157e10 & 1.8009361907024696e9 & 1.1109180272716561 \\
|
||
12 & 11.793890586174369 - 1.6524771364075785i & 3.1401962344429485e10 & 8.297365882456215e9 & 1.665281290598479 \\
|
||
13 & 11.793890586174369 + 1.6524771364075785i & 3.1401962344429485e10 & 8.297365882456215e9 & 2.0458202766784277 \\
|
||
14 & 13.992406684487216 - 2.5188244257108443i & 2.157665405951858e11 & 6.221054312666306e10 & 2.518835871190904 \\
|
||
15 & 13.992406684487216 + 2.5188244257108443i & 2.157665405951858e11 & 6.221054312666306e10 & 2.7128805312847097 \\
|
||
16 & 16.73074487979267 - 2.812624896721978i & 4.850110893921027e11 & 5.844684792788262e11 & 2.9060018735375106 \\
|
||
17 & 16.73074487979267 + 2.812624896721978i & 4.850110893921027e11 & 5.844684792788262e11 & 2.825483521349608 \\
|
||
18 & 19.5024423688181 - 1.940331978642903i & 4.557199223869993e12 & 2.209747866910055e12 & 2.4540214463129764 \\
|
||
19 & 19.5024423688181 + 1.940331978642903i & 4.557199223869993e12 & 2.209747866910055e12 & 2.0043294443099486 \\
|
||
20 & 20.84691021519479 + 0.0i & 8.756386551865696e12 & 2.2517830621461324e13 & 0.8469102151947894 \\
|
||
\hline
|
||
\end{tabular}
|
||
\end{adjustbox}
|
||
\end{table}
|
||
|
||
Dla wielomianu bez modyfikacji pierwiastki mają wartości zbliżone
|
||
rzeczywistym, jednak nie dokładne. Te błędne wartości oczywiście
|
||
powodują błędy w wartościach obu wielomianów
|
||
dla tych pierwiastków – $P(z_k)$ i $p(z_k)$.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Zmiana współczynnika $-210$ na $-210 - 2^{-23}$ powoduje przejście
|
||
pierwiastków od 10 do 19 z $\mathbb{R}$ do $\mathbb{C}$. Wszystkie
|
||
pierwiastki w zmodyfikowanym wielomianie odbiegają o wiele mocniej
|
||
od ich rzeczywistych wartości, szczególnie te, które są zespolone.
|
||
Na nich widać również, że nie są rozmieszczone równomiernie, tak
|
||
jak dla oryginalnego wielomianu. Tak jak w poprzednich zadaniach,
|
||
to jest źle uwarunkowane.
|
||
|
||
\vspace{0.5cm}
|
||
|
||
\textbf{Zad. 5}
|
||
|
||
Rozważamy równanie rekurencyjne
|
||
$p_{n + 1} := p_n + rp_n(1 - p_n)$ dla $n = 0, 1, ...$.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Dla $p_0 = 0.01$ i $r = 3$ przeprowadzamy następujące eksperymenty:
|
||
|
||
\vspace{0.25cm}
|
||
|
||
1. Dla arytmetyki $Float32$ wykonujemy 40 iteracji
|
||
równania, następnie wykonujemy 10 iteracji,
|
||
obcinamy liczbę w tej iteracji do 3 miejsca po
|
||
przecinku po czym wykonujemy kolejne 30 iteracji.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
2. Tak jak wyżej wykonujemy 40 iteracji, porównujemy
|
||
wyniki dla arytmetyki $Float32$ i $Float64$.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Eksperyment 1:
|
||
|
||
\begin{longtable}{|c|c|c|}
|
||
\hline
|
||
$n$ & 40 iteracji & trunc \\ \hline
|
||
0 & 0.01 & 0.01 \\
|
||
1 & 0.0397 & 0.0397 \\
|
||
2 & 0.15407173 & 0.15407173 \\
|
||
3 & 0.5450726 & 0.5450726 \\
|
||
4 & 1.2889781 & 1.2889781 \\
|
||
5 & 0.1715188 & 0.1715188 \\
|
||
6 & 0.5978191 & 0.5978191 \\
|
||
7 & 1.3191134 & 1.3191134 \\
|
||
8 & 0.056273222 & 0.056273222 \\
|
||
9 & 0.21559286 & 0.21559286 \\
|
||
10 & 0.7229306 & 0.7229306 \\
|
||
11 & 1.3238364 & 1.3241479 \\
|
||
12 & 0.037716985 & 0.036488414 \\
|
||
13 & 0.14660022 & 0.14195944 \\
|
||
14 & 0.521926 & 0.50738037 \\
|
||
15 & 1.2704837 & 1.2572169 \\
|
||
16 & 0.2395482 & 0.28708452 \\
|
||
17 & 0.7860428 & 0.9010855 \\
|
||
18 & 1.2905813 & 1.1684768 \\
|
||
19 & 0.16552472 & 0.577893 \\
|
||
20 & 0.5799036 & 1.3096911 \\
|
||
21 & 1.3107498 & 0.09289217 \\
|
||
22 & 0.088804245 & 0.34568182 \\
|
||
23 & 0.3315584 & 1.0242395 \\
|
||
24 & 0.9964407 & 0.94975823 \\
|
||
25 & 1.0070806 & 1.0929108 \\
|
||
26 & 0.9856885 & 0.7882812 \\
|
||
27 & 1.0280086 & 1.2889631 \\
|
||
28 & 0.9416294 & 0.17157483 \\
|
||
29 & 1.1065198 & 0.59798557 \\
|
||
30 & 0.7529209 & 1.3191822 \\
|
||
31 & 1.3110139 & 0.05600393 \\
|
||
32 & 0.0877831 & 0.21460639 \\
|
||
33 & 0.3280148 & 0.7202578 \\
|
||
34 & 0.9892781 & 1.3247173 \\
|
||
35 & 1.021099 & 0.034241438 \\
|
||
36 & 0.95646656 & 0.13344833 \\
|
||
37 & 1.0813814 & 0.48036796 \\
|
||
38 & 0.81736827 & 1.2292118 \\
|
||
39 & 1.2652004 & 0.3839622 \\
|
||
40 & 0.25860548 & 1.093568 \\
|
||
\hline
|
||
\end{longtable}
|
||
|
||
Eksperyment 2:
|
||
|
||
\begin{longtable}{|c|c|c|}
|
||
\hline
|
||
$n$ & $Float32$ & $Float64$ \\ \hline
|
||
0 & 0.01 & 0.01 \\
|
||
1 & 0.0397 & 0.0397 \\
|
||
2 & 0.15407173 & 0.15407173000000002 \\
|
||
3 & 0.5450726 & 0.5450726260444213 \\
|
||
4 & 1.2889781 & 1.2889780011888006 \\
|
||
5 & 0.1715188 & 0.17151914210917552 \\
|
||
6 & 0.5978191 & 0.5978201201070994 \\
|
||
7 & 1.3191134 & 1.3191137924137974 \\
|
||
8 & 0.056273222 & 0.056271577646256565 \\
|
||
9 & 0.21559286 & 0.21558683923263022 \\
|
||
10 & 0.7229306 & 0.722914301179573 \\
|
||
11 & 1.3238364 & 1.3238419441684408 \\
|
||
12 & 0.037716985 & 0.03769529725473175 \\
|
||
13 & 0.14660022 & 0.14651838271355924 \\
|
||
14 & 0.521926 & 0.521670621435246 \\
|
||
15 & 1.2704837 & 1.2702617739350768 \\
|
||
16 & 0.2395482 & 0.24035217277824272 \\
|
||
17 & 0.7860428 & 0.7881011902353041 \\
|
||
18 & 1.2905813 & 1.2890943027903075 \\
|
||
19 & 0.16552472 & 0.17108484670194324 \\
|
||
20 & 0.5799036 & 0.5965293124946907 \\
|
||
21 & 1.3107498 & 1.3185755879825978 \\
|
||
22 & 0.088804245 & 0.058377608259430724 \\
|
||
23 & 0.3315584 & 0.22328659759944824 \\
|
||
24 & 0.9964407 & 0.7435756763951792 \\
|
||
25 & 1.0070806 & 1.315588346001072 \\
|
||
26 & 0.9856885 & 0.07003529560277899 \\
|
||
27 & 1.0280086 & 0.26542635452061003 \\
|
||
28 & 0.9416294 & 0.8503519690601384 \\
|
||
29 & 1.1065198 & 1.2321124623871897 \\
|
||
30 & 0.7529209 & 0.37414648963928676 \\
|
||
31 & 1.3110139 & 1.0766291714289444 \\
|
||
32 & 0.0877831 & 0.8291255674004515 \\
|
||
33 & 0.3280148 & 1.2541546500504441 \\
|
||
34 & 0.9892781 & 0.29790694147232066 \\
|
||
35 & 1.021099 & 0.9253821285571046 \\
|
||
36 & 0.95646656 & 1.1325322626697856 \\
|
||
37 & 1.0813814 & 0.6822410727153098 \\
|
||
38 & 0.81736827 & 1.3326056469620293 \\
|
||
39 & 1.2652004 & 0.0029091569028512065 \\
|
||
40 & 0.25860548 & 0.011611238029748606 \\
|
||
\hline
|
||
\end{longtable}
|
||
|
||
W pierwszym eksperymencie ostateczna wartość po obcięciu
|
||
wyniku po 10 iteracji jest około 4 razy większa od
|
||
wartości otrzymanej po wykonaniu 40 iteracji bez zmian.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
W drugim eksperymencie wykorzystanie arytmetyki $Float64$
|
||
po 40 iteracjach dało nam wartość około 25 razy
|
||
mniejszą od tej uzyskanej w arytmetyce $Float32$.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Oba eksperymenty wskazują na złe uwarunkowanie
|
||
zadania, wyniki są bardzo czułe na utratę precyzji.
|
||
|
||
\vspace{0.5cm}
|
||
|
||
\textbf{Zad. 6}
|
||
|
||
Rozważamy równanie rekurencyjne
|
||
$x_{n + 1} := x_n^2 + c$ dla $n = 0, 1, ...$,
|
||
gdzie $c$ jest stałą.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Wykonujemy 40 iteracji równania dla następujących danych:
|
||
|
||
\vspace{0.25cm}
|
||
|
||
1. $c = -2$ i $x_0 = 1$
|
||
|
||
\includegraphics[scale=0.3]{6.1}
|
||
|
||
2. $c = -2$ i $x_0 = 2$
|
||
|
||
\includegraphics[scale=0.3]{6.2}
|
||
|
||
3. $c = -2$ i $x_0 = 1.99999999999999$
|
||
|
||
\includegraphics[scale=0.3]{6.3}
|
||
|
||
4. $c = -1$ i $x_0 = 1$
|
||
|
||
\includegraphics[scale=0.3]{6.4}
|
||
|
||
5. $c = -1$ i $x_0 = -1$
|
||
|
||
\includegraphics[scale=0.3]{6.5}
|
||
|
||
6. $c = -1$ i $x_0 = 0.75$
|
||
|
||
\includegraphics[scale=0.3]{6.6}
|
||
|
||
7. $c = -1$ i $x_0 = 0.25$
|
||
|
||
\includegraphics[scale=0.3]{6.7}
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Wykresy 1. i 2. są stałe, na 3. wykresie początkowo otrzymujemy
|
||
2, ale koło wartości 21 zaczynają się pojawiać dość duże błędy.
|
||
Wartość kilkukrotnie zbliża się, lecz nigdy nie osiąga 2.
|
||
Przez $x_0$ bardzo bliski 2, lecz nie równy błąd staje się
|
||
coraz większy aż w końcu powoduje spadek wartości. Gdy $x_0$ jest
|
||
liczbą całkowitą wyniki są zgodne z oczekiwaniami.
|
||
|
||
\vspace{0.25cm}
|
||
|
||
Na wykresach 4. i 5. wyniki oscylują wokół oczekiwanych wartości.
|
||
Wykresy 6. i 7. po krótkim czasie zaczynają na zmianę przyjmować wartości -1 i 0.
|
||
|
||
\vspace{0.5cm}
|
||
|
||
\textbf{Wnioski z listy}
|
||
|
||
Zadania były źle uwarunkowane, czyli bardzo czułe na
|
||
utratę precyzji z powodu nieuwzględnienia rzędu wielkości
|
||
wyników. Przy pracy z liczbami zmiennoprzecinkowymi należy
|
||
pamiętać, aby dobrać odpowiedni typ do rozmiaru danych, z którymi
|
||
pracujemy oraz o błędach wynikających z operacji na tych liczbach.
|
||
|
||
\end{document}
|