MN01LAB: Różnice pomiędzy wersjami
Nie podano opisu zmian |
mNie podano opisu zmian |
||
Linia 6: | Linia 6: | ||
--> | --> | ||
=Eksperymenty ze środowiskiem obliczeń numerycznych= | |||
W Linuxie czas działania programu można zbadać poleceniem <code style="color: #666">time</code>. | W Linuxie czas działania programu można zbadać poleceniem <code style="color: #666">time</code>. | ||
Linia 41: | Linia 41: | ||
programu. | programu. | ||
Sprawdź, czy z wyłączoną optymalizacją ten kod okaże się najwolniejszy | Sprawdź, czy z wyłączoną optymalizacją ten kod okaże się najwolniejszy ze wszystkich... (okazuje się, że nie!) | ||
ze wszystkich... | |||
(okazuje się, że nie!) | |||
</div></div></div> | </div></div></div> | ||
Linia 129: | Linia 127: | ||
tak więc <math>\displaystyle N</math> musi być takie, że <math>\displaystyle \frac{|x|^{N+1}}{(N+1)!} \leq \epsilon</math>. | tak więc <math>\displaystyle N</math> musi być takie, że <math>\displaystyle \frac{|x|^{N+1}}{(N+1)!} \leq \epsilon</math>. | ||
Poniżej mamy kod, który to realizuje w Octave (analogiczny program w C napisz | Poniżej mamy kod, który to realizuje w Octave (analogiczny program w C napisz samodzielnie): | ||
samodzielnie): | |||
<div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre>function [y, N] = expa(x, epsilon) | <div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre>function [y, N] = expa(x, epsilon) | ||
Linia 214: | Linia 211: | ||
znamy reprezentację numeryczną liczby <math>\displaystyle e</math>. | znamy reprezentację numeryczną liczby <math>\displaystyle e</math>. | ||
<div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre> | <div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre># wersja B | ||
function [y, N] = expb(x, epsilon) | function [y, N] = expb(x, epsilon) | ||
k = floor(x); t = x - k; | k = floor(x); t = x - k; |
Wersja z 20:03, 28 wrz 2006
Eksperymenty ze środowiskiem obliczeń numerycznych
W Linuxie czas działania programu można zbadać poleceniem time
.
Ćwiczenie
Który z poniższych 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 .