MN01LAB: Różnice pomiędzy wersjami
mNie podano opisu zmian |
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 | 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 ( | 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 | \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:MNbladwzglednyexpa.png|thumb|300px|Błąd względny aproksymacji wielomianem Taylora.]] | |||
[[Image:MNbladwzglednyexpa.png|thumb|300px|Błąd względny aproksymacji wielomianem Taylora. | |||
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;
Ć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 !