Lista 3 - Arsenic Rose

Transkrypt

Lista 3 - Arsenic Rose
Lista 3
Kamil Matuszewski
27 października 2015
1
2
3
4
5
6
7
Zadanie 1
Znajdź wartości dla których obliczanie funkcji może wiązać się z utratą cyfr znaczących wyniku i
zaproponuj sposób dokładniejszego obliczania funkcji.
2
• e−x − e2x
2
2
2
2
2
e−x − e2x = e−x (1 − e3x )
Kiedy 3x2 jest bliskie 0 wtedy w nawiasie mamy odejmowanie dwóch bliskich sobie liczb.
Żeby to naprawić, rozwińmy ex w szereg Maclaurina:
ex =
∞
∞
X
X
xn
xn
=1+
n!
n!
n=0
n=1
2
e3x = 1 +
2
2
2
2
2
∞
X
(3x2 )n
n!
n=1
e−x − e2x = e−x (1 − e3x ) = e−x (1 − (1 +
∞
∞
2 n
X
2 X (3x )
(3x2 )n
)) = −e−x (
)
n!
n!
n=1
n=1
• 1 − sin (2x) Oczywiście, kiedy sin (2x) jest bliskie 1 to może nastąpić utrata cyfr znaczących
wyniku. Jak to naprawić?
sin x = cos (x − π/2)
sin x = sin (x + 2π)
1 − cos x = 2sin2 (x/2)
1 − sin (2x) = 1 − cos (2x − π/2) = 2 sin2 (x − π/4) = 2 sin2 (x + 7π/4)
Zadanie 2
Podaj bezpieczny numerycznie algorytm obliczania zer równania kwadratowego ax2 + bx + c = 0.
Przeprowadź testy dla odpowiednio dobranych wartości a, b i c pokazujące, że Twój algorytm jest
lepszy od metody
√ szkolnej bazującej jedynie na dobrze znanych wzorach
x1,2 = (−b ± b2 − 4ac)/(2a)
Jeśli ac jest bardzo, bardzo, bardzo małe a b bardzo duże (co do modułu), wtedy mamy odejmowanie bliskich sobie liczb (w zależności od tego jaki znak ma b to inny wzór będzie nieprawidłowy).
Żeby to naprawić użyjemy wzorów Vietta. Mając a, b i x1 możemy obliczyć x2 = − ab − x1 czy coś.
Zrobienie testów w swoim ulubionym języku pozostawiam jako proste ćwiczenie.
1
Zadanie 4
Wyprowadź wzór na wskaźnik uwarunkowania zadania obliczania wartości funkcji f w punkcie x.
Względna zmiana danych:
(x + h) − x h = x
x
Względna zmiana wyniku:
f (x + h) − f (x) f (x)
Względna zmiana wyniku/Względna zmiana danych:
0
f (x + h) − f (x) x f (x + h) − f (x) h x f (x + h) − f (x) x · = = = |f 0 (x)| x = f (x)x f (x)
h
h
f (x) h
h
f (x)
f (x)
f (x) Zadanie 5
Sprawdź dla jakich wartości x zadania obliczania funkcji f jest źle uwarunkowane.
Korzystamy z zadania 2, a dokładniej ze wskaźnika uwarunkowania.
• f (x) =
√
1 − x2
0
x
x −x2 x −x3 f (x)x − √1−x
2
= √
f (x) 1 − x2 = (√1 − x2 )2 = 1 − x2 −x3 =∞
lim x→1 1 − x2 • f (x) = x ln x
0
f (x)x (1 + ln x)x 1 + ln x =
=
f (x) x ln x ln x 1 + ln x =∞
lim x→1
ln x √
x4 + 1 − x2
3
0
√2x4
2 2
−
2x)x
−
2x
f (x)x ( √2x
wolf ram 2x2 − √ 2x
= √
= √ x4 +1
= √ x4 +1
=
f (x) x4 + 1 − x2 x4 + 1 − x2 x4 + 1 x4 + 1 • f (x) =
Zadanie dobrze uwarunkowane
• f (x) = sin(x)
0
f (x)x x cos x f (x) = sin x = |x ctg x|
lim |x ctg x| = 0
x→kπ
2
Zadanie 6
Musimy sprawdzić, czy algorytm jest numerycznie poprawny. To jest dosyć łatwe, choć akurat dla mnie nigdy nie było intuicyjne, ale robi się to jakoś tak:
Niech ei = (1 + εi ) a wi = (1 + αi )
S := (de1 + 1)w1 = de1 w1 + w1
ce2
S :=
w2
de1 w1 + w1
ce2
ce2 w2 w3
S := (be3 +
w2 )w3 = be3 w3 +
de1 w1 + w1
de1 w1 + w1
ae4 w4
ae4
S :=
w3 w4 =
w3
be3 w3 + dece12ww12+w
be3 w3 + dece12ww12+w
1
1
S :=
1
ae4 w4
ce w w
be3 w3 + de 2w 2+w3
1
=
1
w5 = w5 ·
be3 w3 +
ce2 w2 w3
de1 w1 +w1
ae4 w4
= w5 ·
be3 w3 (de1 w1 +w1 )+ce2 w2 w3
de1 w1 +w1
ae4 w4
=
1
be3 w3 (de1 w1 + w1 )w5 + ce2 w2 w3 w5
be3 w3 de1 w1 w5 + be3 w3 w1 w5 + ce2 w2 w3 w5
=
=
ae4 w4 (de1 w1 + w1 )
ae4 w4 (de1 w1 + w1 )
=
be3 w3 w1 w5 + ce2 w2 w3 w5 + bde3 w3 e1 w1 w5
ae4 w4 (de1 w1 + w1 )
Niech E = max {w1 , w2 , w3 , w4 , w5 , e1 , e2 , e3 , e4 }. Wtedy:
S¬
e
E 4 (b + c + bdE)
(b + c + bd)
bE 4 + cE 4 + bdE 5
E
=
=
aE 2 (dE 2 + E)
E 3 (a(dE + 1))
a(de + 1)
e
e b, c, d) = S(a, b, c, d)(1+),
Mamy więc, że wynik to S(a,
czyli lekkie zakłócenie danych i lekkie
zakłócenie wyniku. Algorytm jest więc numerycznie poprawny, bo błędy zarówno danych jak
i wyniku są na poziomie błędu reprezentacji (bo E było na poziomie błędu reprezentacji).
DYGRESJA
Na wykładzie było coś takiego jak twierdzenie o kumulacji błędów. To chyba leciało jakoś
n
Q
tak, że jeśli mamy jakieś |αi | ¬ 2−t dla i = 1, 2, . . . , n to zachodzi
(1 + αi ) = (1 + γi ),
i=1
gdzie |γi | ¬ n2−t
W praktyce to oznacza, że możemy jakoś sobie pozwijać błędy. Musimy tylko określić, czy
ten skumulowany błąd jest duży, a to jest jakieś machanie rękami. Zazwyczaj jak te błędy
się tak skumulują to algorytm jest dobrze uwarunkowany.
To była jednak jakaś dygresja, i nie jest zupełnie potrzebna przy tym zadaniu.
Zadanie 7
To robimy podobnie jak poprzednie, i korzystamy z tej śmiesznej kumulacji błędów. To nie jest
trudne zadanie. Kiedy liczby nie są maszynowe będzie dwa razy więcej błędów, ale to wciąż
będzie numerycznie poprawne. Jeśli zapiszecie wzór i skorzystacie z twierdzenia o kumulacji
błędów, oraz trochę pomachacie, że ten skumulowany błąd to w sumie nie jest duży, to raczej
grzyba nie dostaniecie (ja tak robiłem i nie dostałem). Te zadanka z numeryczną poprawnością
polegają właśnie na takim machaniu, i u nas to przechodziło. Ciężko jest pokazać przykład
algorytmu numerycznie niepoprawnego, i raczej nie będzie takich na L.
3