MN03LAB: Różnice pomiędzy wersjami
m Zastępowanie tekstu – „.↵</math>” na „</math>” |
m Zastępowanie tekstu – „,↵</math>” na „</math>,” |
||
Linia 72: | Linia 72: | ||
Dla kolejnych <math>N</math>, wyznacz <math>N</math>-tą sumę częściową szeregu Taylora dla funkcji wykładniczej, gdy <math>x=-90</math>: | Dla kolejnych <math>N</math>, wyznacz <math>N</math>-tą sumę częściową szeregu Taylora dla funkcji wykładniczej, gdy <math>x=-90</math>: | ||
<center><math> | <center><math> | ||
e^x \approx \sum_{n=0}^N \frac{x^n}{n!} | e^x \approx \sum_{n=0}^N \frac{x^n}{n!}</math>,</center> | ||
</math></center> | |||
korzystając z algorytmu podanego w poprzednim zadaniu. Oblicz błąd względny | korzystając z algorytmu podanego w poprzednim zadaniu. Oblicz błąd względny | ||
Linia 165: | Linia 164: | ||
<center><math> | <center><math> | ||
\sqrt{a} = \sqrt{\widetilde{f}}2^{(p+1)/2} = \sqrt{g} 2^k | \sqrt{a} = \sqrt{\widetilde{f}}2^{(p+1)/2} = \sqrt{g} 2^k</math>,</center> | ||
</math></center> | |||
dla pewnego (znanego) <math>k \in N</math>, przy czym <math>\frac{1}{2} \leq \sqrt{g} \leq 1</math>. | dla pewnego (znanego) <math>k \in N</math>, przy czym <math>\frac{1}{2} \leq \sqrt{g} \leq 1</math>. | ||
Linia 194: | Linia 192: | ||
Wystarczy więc przybliżyć <math>\frac{1}{1+f}</math>. Ponieważ dla <math>0 \leq f < 1</math>, | Wystarczy więc przybliżyć <math>\frac{1}{1+f}</math>. Ponieważ dla <math>0 \leq f < 1</math>, | ||
<center><math>\frac{1}{2} \leq \frac{1}{1+f} \leq 1 | <center><math>\frac{1}{2} \leq \frac{1}{1+f} \leq 1</math>,</center> | ||
</math></center> | |||
to możemy jako pierwsze przybliżenie wybrać <math>x_0 = \frac{3}{4}2^{-p}</math> (jak | to możemy jako pierwsze przybliżenie wybrać <math>x_0 = \frac{3}{4}2^{-p}</math> (jak | ||
Linia 207: | Linia 204: | ||
Ponieważ iteracja Newtona spełnia | Ponieważ iteracja Newtona spełnia | ||
<center><math>|x_{k+1}a - 1| = |x_ka-1|^2 = |x_0a-1|^{2^k} | <center><math>|x_{k+1}a - 1| = |x_ka-1|^2 = |x_0a-1|^{2^k}</math>,</center> | ||
</math></center> | |||
to, jeśli chcemy, by błąd względny przybliżenia <math>x_{k+1}</math> spełniał <math>\frac{|x_{k+1} - | to, jeśli chcemy, by błąd względny przybliżenia <math>x_{k+1}</math> spełniał <math>\frac{|x_{k+1} - |
Aktualna wersja na dzień 21:44, 11 wrz 2023
Własności arytmetyki zmiennoprzecinkowej
<<< Powrót do strony głównej przedmiotu Metody numeryczne
Oglądaj wskazówki i rozwiązania __SHOWALL__
Ukryj wskazówki i rozwiązania __HIDEALL__
Ćwiczenie: Równe i równiejsze
Wyjaśnij, dlaczego w arytmetyce podwójnej precyzji IEEE 754 mamy
Oczywiście, "teoretycznie" wszystkie trzy liczby powinny być sobie równe (i niezerowe).
Ćwiczenie: Szeregi zbieżne(?)
Podaj przykłady zbieżnych szeregów postaci , których -te sumy częściowe obliczone w arytmetyce pojedynczej precyzji algorytmem
suma = 0.0; for n = 1..N suma += <math>a_n</math>;
będą
- ograniczone niezależnie od , albo
- numerycznie rozbieżne, to znaczy takie, że dla bardzo dużych zachodzi
suma == Inf
.
Wykonaj to samo zadanie, ale podając przykłady szeregów rozbieżnych (w arytmetyce dokładnej).
Ćwiczenie
Dla kolejnych , wyznacz -tą sumę częściową szeregu Taylora dla funkcji wykładniczej, gdy :
korzystając z algorytmu podanego w poprzednim zadaniu. Oblicz błąd względny
i bezwzględny wyznaczonego przybliżenia, w porównaniu
do wartości wyznaczonej z wykorzystaniem funkcji bibliotecznej exp()
. Powtórz następnie dla .
Czy --- zgodnie z teorią matematyczną --- sumy te dążą do wartości . Objaśnij dokładnie, co się stało.
Ćwiczenie
Już wcześniej stwierdziliśmy, że wyznaczanie dla dużego nie jest dobrym pomysłem. Przeprowadź eksperyment numeryczny potwierdzający to stwierdzenie i objaśnij jego wyniki.
Ćwiczenie
Jak wiadomo, szereg harmoniczny jest rozbieżny. Spróbuj przewidzieć, jaki będzie efekt numerycznego wyznaczenia tej sumy w arytmetyce podwójnej precyzji przy użyciu poniższego kodu.
int dlicznik; double dsuma, dstarasuma; double dskladnik; dstarasuma = 0.0; dsuma = 1.0; dlicznik = 1; while(dstarasuma != dsuma) { dskladnik = 1.0/dlicznik; dstarasuma = dsuma; dsuma += dskladnik; dlicznik++; } printf("Suma = %e. Liczba składników = %d, składnik = %e\n", dsuma, dlicznik-1, dskladnik);
Ćwiczenie: Zadanie o wyznaczaniu odwrotności bez dzielenia metodą Newtona
Należy wyznaczyć przybliżenie stosując metodę Newtona do równania
. Zaproponuj
dobre przybliżenie początkowe wiedząc, że jest liczbą maszynową typu
double
. Ile iteracji wystarczy, by osiągnąć -zadowalające przybliżenie?
Ćwiczenie
Niech . Czy z punktu widzenia błędów w lepiej jest policzyć sumę tych liczb w kolejności od najmniejszej do największej, czy odwrotnie?
Ćwiczenie
Dlaczego w algorytmie bisekcji rozwiązywania równania , sprawdzając warunek różnych znaków w krańcach przedziału , używamy kryterium
if ( sign(f(x)) != sign(f(xl)) ) ...
a nie, matematycznie równoważnego, wyrażenia
if ( f(x)*f(lewy) < 0 ) ...