MN01LAB: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przykry (dyskusja | edycje)
Dorota (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
<!--  
<!--  
Konwertowane  z pliku LaTeX przez latex2mediawiki, zob. http://www.ii.uj.edu.pl/&nbsp;pawlik1/latex2mediawiki.php
Konwertowane  z pliku LaTeX przez latex2mediawiki, zob. http://www.ii.uj.edu.pl/&nbsp;pawlik1/latex2mediawiki.php
Linia 6: Linia 5:
=Ćwiczenia. Eksperymenty ze środowiskiem obliczeń numerycznych=
=Ćwiczenia. Eksperymenty ze środowiskiem obliczeń numerycznych=


W Linuxie, czas działania programu można zbadać poleceniem <code>time</code>.
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 program wykona się szybciej:
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, więc nie ma żadnych strat.
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, jak obliczać, korzystając jedynie z czterech działań podstawowych: <math>\displaystyle +,\,
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, pokazujące koszt metody w zależności od
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 Twoje rachunki co do oczekiwanej dokładności (porównując się z
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>, zdefiniowanej w pliku nagłówkowym <code>math.h</code>.
\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, między innymi dlatego, że musi korzystać z operacji
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; 
Rozwiązanie

Ćwiczenie

Napisz program w C, który zapisuje do pliku

  • tekstowego
  • binarnego

kolejne wartości sin(πi0.4), gdzie i=0,,1024. 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.

Rozwiązanie

Ćwiczenie: Implementacja funkcji matematycznych

Pomyśl jak obliczać, korzystając jedynie z czterech działań podstawowych: +,,×,÷, wartość funkcji exp(x) = ex dla dowolnych x rzeczywistych. Naszym kryterium jest, by |exexp(x)|ϵ, 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 x 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 e=exp(1) zdefiniowanej w pliku nagłówkowym math.h.

Rozwiązanie

Ćwiczenie: Ciag dalszy

Spróbuj obniżyć koszt wyznaczania exp(x) dla dużych x!

Wskazówka
Rozwiązanie