ModSim: Added graph for rabbit grow.

parent dfcc5bcb
......@@ -33,11 +33,8 @@ double f1(double x) {
}
#define PRINT_INTEGRAL(func, method, a, b, decimals) { \
double real = 0; \
double _i = accurate_integral(&func, &method, a, b, \
accurate_integral(&func, &method, a, b, \
pow(10, -1.0 * decimals), decimals); \
printf(#func " from " #a " to " #b " using %-19s %.11e (%.8e%%)\n", \
#method " method:", _i, fabs(_i - real)); \
}
int main(int argc, char *argv[]) {
......
No preview for this file type
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 1 1 1 2 2 3 4 5 7 9 12 16 21 28 37 49 65 86 114 151 200
0 1 1 1 2 3 4 6 9 13 19 28 41 60 88 129 189 277 406 595 872 1278 1873 2745
0 1 1 2 2 4 6 9 14 21 33 50 77 118 181 278 426 654 1003 1539 2361 3622 5557 8525
0 1 1 2 3 4 7 11 17 27 42 66 104 163 256 402 631 991 1556 2443 3836 6023 9457 14849
0 1 1 2 3 5 7 12 19 30 48 76 121 192 306 486 773 1229 1954 3107 4940 7855 12489 19858
0 1 1 2 3 5 8 12 20 32 51 82 131 210 336 538 862 1380 2210 3539 5667 9075 14532 23271
0 1 1 2 3 5 8 13 20 33 53 85 137 220 354 569 915 1471 2366 3804 6117 9836 15816 25432
0 1 1 2 3 5 8 13 21 33 54 87 140 226 364 587 946 1525 2458 3962 6387 10295 16595 26750
import matplotlib.pyplot as plt
import re
data = [re.split('\s+', line)[:-1] for line in file('rabbit_grow.log')]
for i in range(len(data)):
data.insert(i*2, range(len(data[0])))
plt.plot(*data)
plt.yscale('log')
plt.xlabel('generatie')
plt.ylabel('groei van populatie')
plt.grid(True)
plt.savefig('rabbit_grow.pdf')
......@@ -211,6 +211,8 @@ sin & 0 & $8\pi$ & gauss & $-1.797258919631 \cdot 10^{-14}$ & $1.797258919
\end{tabular}
\end{table}
% TODO: calculate integral
% }}}
\section{Instelbare accuratie} % {{{
......@@ -221,25 +223,39 @@ minimale nauwkeurigheid te bereiken bij een benadering van een integraal.
Hiervoor hebben we de functie \texttt{accurate\_integral} geschreven, waaraan we
een bepaalde nauwkeurigheid meegeven. Deze nauwkeurigheid is te specifi\"eren
door het gewenste aantal ``correcte'' decimalen mee te geven aan het programma.
Om bijvoorbeeld de (in het programma gedefini\"eerde) integralen op 3 decimalen
nauwkeurig te berekenen, moet het programma als volgt worden worden aangeroepen:
In het onderstaande voorbeeld is de integraal $\int_0^2 x \cdot
e^{-x}$ berekend tot 14 decimalen nauwkeurig. Dit doen we door het aantal
stappen van de berekening steeds te verdubbelen totdat het verschil tussen de
twee laatste resultaten kleiner dan $10^{-14}$ is. In de uitvoer van het
voorbeeld is dit aangegeven door middel van het symbool \texttt{|}.
\begin{verbatim}
./q6 3
$ ./q6 14
0.593994150290161226912744041329
| could deviate from here
0.593994150290164335537212991767
\end{verbatim}
\noindent We zien dat de eerste 14 decimalen gelijk zijn, daarna is er verschil
te zien. Dit is ook het geval als we een ander getal dan 14 opgeven, waaruit
blijkt dat de methode werkt.
% }}}
\section{Fibonnaci} % {{{
\label{sec:Fibonnaci}
\section{Fibonacci} % {{{
\label{sec:Fibonacci}
Het programma wat we hebben gemaakt vraagt twee argumenten: het aantal te
simuleren generaties en optioneel de maximum leeftijd van een konijn (standaard
is deze oneindig). De volgende aanroep simuleert bijvoorbeeld de groei van een
konijnenpopulatie over 25 generaties, waarbij elk konijn maximaal 3 jaar oud
wordt:
\begin{verbatim}
./q7 25 3
\end{verbatim}
Naast de grootte van de populatie bevat de uitvoer van het programma ook de
groei van de populatie. We hebben het programma met verschillende waarden
uitgevoerd, de resultaten hiervan hebben we uitgezet in de volgende grafieken:
......@@ -247,10 +263,23 @@ uitgevoerd, de resultaten hiervan hebben we uitgezet in de volgende grafieken:
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{rabbit}
\caption{Groei van konijnenpopulatie voor verschillende maximum leeftijden (2
t/m 10 jaar).}
\caption{Konijnenpopulatie per generatie voor verschillende maximum leeftijden
(2 t/m 10 jaar).}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{rabbit_grow}
\caption{Groei van konijnenpopulatie over generaties voor verschillende maximum
leeftijden (2 t/m 10 jaar).}
\end{figure}
We zien dat de groei na een bepaald punt exponentieel is, wanneer de maximum
leeftijd groter is dan twee. Wanneer de maximum leeftijd gelijk is aan twee, is
er altijd maar \'e\'en paar konijnen. Wanneer er geen maximum leeftijd is, kan
de konijnenpopulatie $P(n)$ in generatie $n$ worden uitgedrukt als $P(n - 2) +
P(n - 1)$, dit staat ook wel bekend als de Rij van Fibonacci.
% }}}
\end{document}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment