MN01LAB: Różnice pomiędzy wersjami
m MN Ćwiczenia 1 moved to MN01LAB |
Nie podano opisu zmian |
||
Linia 1: | Linia 1: | ||
<!-- | <!-- | ||
Konwertowane z pliku LaTeX przez latex2mediawiki, zob. http://www.ii.uj.edu.pl/ pawlik1/latex2mediawiki.php | Konwertowane z pliku LaTeX przez latex2mediawiki, zob. http://www.ii.uj.edu.pl/ pawlik1/latex2mediawiki.php | ||
Linia 6: | Linia 5: | ||
=Ćwiczenia. Eksperymenty ze środowiskiem obliczeń numerycznych= | =Ćwiczenia. Eksperymenty ze środowiskiem obliczeń numerycznych= | ||
W Linuxie | W Linuxie czas działania programu można zbadać poleceniem <code>time</code>. | ||
<div style="margin-top:1em; padding-top,padding-bottom:1em;"> | <div style="margin-top:1em; padding-top,padding-bottom:1em;"> | ||
Linia 12: | Linia 11: | ||
<div class="exercise"> | <div class="exercise"> | ||
Który | Który z następujących programów wykona się szybciej? | ||
<div class="code" style="background-color:#e8e8e8; padding:1em"><pre> | <div class="code" style="background-color:#e8e8e8; padding:1em"><pre> | ||
Linia 70: | Linia 69: | ||
Różnice są skutkiem konwersji liczb zmiennoprzecinkowych do formatu | Różnice są skutkiem konwersji liczb zmiennoprzecinkowych do formatu | ||
dziesiętnego. Oczywiście, zapis w formacie binarnym daje dokładną kopię | dziesiętnego. Oczywiście, zapis w formacie binarnym daje dokładną kopię | ||
zawartości pamięci, | zawartości pamięci, nie ma więc żadnych strat. | ||
</div></div></div> | </div></div></div> | ||
Linia 77: | Linia 76: | ||
<div class="exercise"> | <div class="exercise"> | ||
Pomyśl | Pomyśl jak obliczać, korzystając jedynie z czterech działań podstawowych: <math>\displaystyle +,\, | ||
-, \, \times, \, \div</math>, wartość funkcji <code>exp(</code><math>\displaystyle x</math><code>)</code> = <math>\displaystyle e^x</math> dla | -, \, \times, \, \div</math>, wartość funkcji <code>exp(</code><math>\displaystyle x</math><code>)</code> = <math>\displaystyle e^x</math> dla | ||
dowolnych <math>\displaystyle x</math> rzeczywistych. Naszym kryterium jest, by <math>\displaystyle |e^x - \exp(x)| \leq | dowolnych <math>\displaystyle x</math> rzeczywistych. Naszym kryterium jest, by <math>\displaystyle |e^x - \exp(x)| \leq | ||
Linia 83: | Linia 82: | ||
<math>\displaystyle \epsilon</math>. | <math>\displaystyle \epsilon</math>. | ||
Wykonaj eksperymenty w C lub w Octave | Wykonaj eksperymenty w C lub w Octave pokazujące koszt metody w zależności od | ||
<math>\displaystyle x</math> oraz w zależności od <math>\displaystyle \epsilon</math>. Przeprowadź też sekwencję testów | <math>\displaystyle x</math> oraz w zależności od <math>\displaystyle \epsilon</math>. Przeprowadź też sekwencję testów | ||
potwierdzających | potwierdzających twoje rachunki co do oczekiwanej dokładności (porównując się z | ||
funkcją biblioteczną). W C możesz korzystać ze stałej <code>M_E</code> <math>\displaystyle \approx e = | funkcją biblioteczną). W C możesz korzystać ze stałej <code>M_E</code> <math>\displaystyle \approx e = | ||
\exp(1)</math> | \exp(1)</math> zdefiniowanej w pliku nagłówkowym <code>math.h</code>. | ||
</div></div> | </div></div> | ||
Linia 104: | Linia 103: | ||
</math></center> | </math></center> | ||
Drugi pomysł okazuje się niewypałem | Drugi pomysł okazuje się niewypałem między innymi dlatego, że musi korzystać z operacji | ||
potęgowania z wykładnikiem rzeczywistym (którą skądinąd najprościej | potęgowania z wykładnikiem rzeczywistym (którą skądinąd najprościej | ||
implementować korzystając m.in. z funkcji <math>\displaystyle \exp</math>, jako <math>\displaystyle x^y = \exp(y\cdot \log(x))</math>). | implementować korzystając m.in. z funkcji <math>\displaystyle \exp</math>, jako <math>\displaystyle x^y = \exp(y\cdot \log(x))</math>). | ||
Linia 221: | Linia 220: | ||
Tak więc zadanie redukuje się do wyznaczenia <math>\displaystyle \exp(t)</math> dla <strong>małego</strong> <math>\displaystyle t</math> oraz | Tak więc zadanie redukuje się do wyznaczenia <math>\displaystyle \exp(t)</math> dla <strong>małego</strong> <math>\displaystyle t</math> oraz | ||
do co najwyżej <math>\displaystyle k</math> dodatkowych mnożeń potrzebnych do wyznaczenia całkowitej | do co najwyżej <math>\displaystyle k</math> dodatkowych mnożeń potrzebnych do wyznaczenia całkowitej | ||
potęgi <math>\displaystyle e^k</math> (ile mnożeń <strong>naprawdę</strong> wystarczy?). Pamiętaj, przyjęliśmy, że | potęgi <math>\displaystyle e^k</math> (ile mnożeń <strong>naprawdę</strong> wystarczy?). Pamiętaj, że przyjęliśmy, że | ||
znamy reprezentację numeryczną liczby <math>\displaystyle e</math>. | znamy reprezentację numeryczną liczby <math>\displaystyle e</math>. | ||
Wersja z 16:51, 19 wrz 2006
Ćwiczenia. Eksperymenty ze środowiskiem obliczeń numerycznych
W Linuxie czas działania programu można zbadać poleceniem time
.
Ćwiczenie
Który z następujących programów wykona się szybciej?
x = 1.0; for( i = 0; i < N; i++) x = x/3.0;
czy
x = 1.0; f = 1.0/3.0; for( i = 0; i < N; i++) x = x*f;
Ćwiczenie
Napisz program w C, który zapisuje do pliku
- tekstowego
- binarnego
kolejne wartości , gdzie . Następnie porównaj rozmiary plików i możliwości ich odczytania zewnętrznymi narzędziami. Wreszcie, wczytaj liczby z pliku i porównaj je z oryginalnymi wartościami sinusa. Czy możesz wyjaśnić przyczyny różnic?
Powtórz to samo w Octave.
Ćwiczenie: Implementacja funkcji matematycznych
Pomyśl jak obliczać, korzystając jedynie z czterech działań podstawowych: , wartość funkcji exp(
)
= dla
dowolnych rzeczywistych. Naszym kryterium jest, by , czyli by błąd bezwzględny aproksymacji nie przekroczył zadanego
.
Wykonaj eksperymenty w C lub w Octave pokazujące koszt metody w zależności od
oraz w zależności od . Przeprowadź też sekwencję testów
potwierdzających twoje rachunki co do oczekiwanej dokładności (porównując się z
funkcją biblioteczną). W C możesz korzystać ze stałej M_E
zdefiniowanej w pliku nagłówkowym math.h
.
Ćwiczenie: Ciag dalszy
Spróbuj obniżyć koszt wyznaczania dla dużych !