MN01LAB: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przykry (dyskusja | edycje)
mNie podano opisu zmian
Przykry (dyskusja | edycje)
mNie podano opisu zmian
Linia 1: Linia 1:
==Eksperymenty ze środowiskiem obliczeń numerycznych==
==Eksperymenty ze środowiskiem obliczeń numerycznych==


W Linuxie, czas działania programu można zbadać poleceniem \lstux!time!.
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 27: Linia 28:
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em">   
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em">   
Oczywiście, szybszy będzie program nie wykorzystujący dzielenia. Optymalizujący
Oczywiście, szybszy będzie program nie wykorzystujący dzielenia. Optymalizujący
kompilator (\lstux!gcc -O3!) strawi, a nawet będzie jeszcze bardziej zadowolony z pozornie
kompilator (<code>gcc -O3</code>) strawi, a nawet będzie jeszcze bardziej zadowolony z pozornie
rozrzutnego kodu  
rozrzutnego kodu  
<div class="code" style="background-color:#e8e8e8; padding:1em"><pre>
<div class="code" style="background-color:#e8e8e8; padding:1em"><pre>
Linia 82: Linia 83:
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 \lstux!math.h!.
\exp(1)</math>, zdefiniowanej w pliku nagłówkowym <code>math.h</code>.


</div></div>
</div></div>
Linia 171: Linia 172:
Zgodnie z oczekiwaniami, błąd jest poniżej zadanej tolerancji, tutaj: <math>\displaystyle 10^{-8}</math>.
Zgodnie z oczekiwaniami, błąd jest poniżej zadanej tolerancji, tutaj: <math>\displaystyle 10^{-8}</math>.


[[Image:MNbladbezwzglednyexpa.png|thumb|300px|Błąd aproksymacji wielomianem Taylora.]]
[[Image:MNbladwzglednyexpa.png|thumb|300px|Błąd względny aproksymacji wielomianem Taylora.]]
[[Image:MNbladwzglednyexpa.png|thumb|300px|Błąd względny aproksymacji wielomianem Taylora.
Czy zawsze musi być mniejszy od bezwzględnego?]]


Jednak koszt aproksymacji rośnie wraz z <math>\displaystyle x</math>:
Jednak koszt aproksymacji rośnie wraz z <math>\displaystyle x</math>:

Wersja z 14:15, 29 sie 2006

Eksperymenty ze środowiskiem obliczeń numerycznych

W Linuxie, czas działania programu można zbadać poleceniem time.

Ćwiczenie

Który program 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(π*i*0.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