MN01LAB: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przykry (dyskusja | edycje)
Nie podano opisu zmian
Przykry (dyskusja | edycje)
mNie podano opisu zmian
Linia 6: Linia 6:
-->
-->
   
   
\cwiczenia{Eksperymenty ze środowiskiem obliczeń numerycznych}
=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>[Wersja B]
  <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; 
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