\documentclass[10pt,a4paper]{article}
\usepackage[dutch]{babel}
\usepackage[utf8]{inputenc}
\usepackage{booktabs,graphicx,float,hyperref}

% Paragraph indentation
\setlength{\parindent}{0pt}
\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}

% Disable hyperref border
\hypersetup{
    pdfstartview={FitH},    % fits the width of the page to the window
    colorlinks=false,       % false: boxed links; true: colored links
}

\title{Modelleren, Simuleren \& Contin\"ue Wiskunde \\
       Opdracht 3: Euler, Runge-Kutta, ODE's}
\author{Tadde\"us Kroes (6054129) \and Sander van Veen (6167969)}

\begin{document}

\maketitle

\section{De opdracht}

De opdracht bestaat uit twee delen: het eerste deel betreft het implementeren
van de Euler- en Runge-Kutta-methoden, in het tweede deel worden deze methoden
vergeleken en gebruikt om enkele ODE's te benaderen. De opdrahchten zelf zullen
we niet heel uitgebreid bespreken, alleen de antwoorden die we erop hebben.

\section{Implementatie}

We hebben de drie methoden volgens de gegeven functievoorschriften
ge\"implementeerd in C (zie het bestand \emph{integration.c}). We hebben daarbij
een ``logger'' gemaakt die een rij waardes naar \texttt{stdout} print. We
gebruiken dit als invoer voor het python-script \emph{plot.py}, dat deze waarden
in een grafiek zet. Een voorbeelduitvoer is:
\begin{verbatim}
$ ./main 5 | ./plot.py gilpin.svg
\end{verbatim}
Dit voert de integratie van ODE nr. 5 (Gilpin's model) uit en plot de resultaten
in een grafiek welke wordt opgeslagen als de afbeelding \emph{gilpin.svg}.

De implementatie van de integratiemethoden zelf is gedaan met behulp van de
pseudocode in het boek. Deze is volgens ons vrij duidelijk en daarom zullen we
er hier niet dieper op ingaan.

\section{Testfuncties}

De testfuncties kunnen worden uitgevoerd met het programma \texttt{./test}
(bestand \emph{test.c}). Dit bestand schrijft de log data naar
\texttt{/dev/null} waardoor alleen de ``custom'' output wordt geprint. De data
op zich vinden we namelijk weinig interessant, we willen vooral weten wat de
waarden op \texttt{t1} zijn.

Van vier van de vijf functies berekenen we de beoogde waarden exact en
vergelijken deze met de waarden die het programma berekent, dit kan omdat de
functies redelijk eenvoudig zijn. Alle methoden benaderen de beoogde waarden
steeds beter naarmate we \texttt{DT} kleiner kiezen, dus concluderen we dat de
methoden correct zijn ge\"implementeerd.

Een apart geval is de vierde testfunctie (\emph{``f = y * y, with t0 starting at
-1 and y0 at 1, integrating to t = 1 (this should not work, why?)''}). Deze
integratie lever voor alle methoden \texttt{INFINITY} op, dit wordt veroorzaakt
door een verkeerd gekozen startwaarde y0.

We zien dat, vooral bij een grote \texttt{DT},
dat Euler verschilt van RK2 en RK4. RK2 ligt redelijk dicht bij RK4, ook bij
niet al te kleine waarden van \texttt{DT}. RK4 ligt het dichtst bij de exacte
waardes, we kunnen dus concluderen dat deze het meest nauwkeurig is (niet
verassend, want RK4 voert de meeste operaties uit).

\section{ODE's}

\subsection{Harmonische oscillator}

De vergelijking van de drie integratiemethoden kan worden uitgevoerd met:
\begin{verbatim}
$ sh ./compare_osc.sh
\end{verbatim}

\begin{figure}[H]
    \includegraphics[scale=.5]{osc_euler.pdf}
    \caption{Euler}
\end{figure}
\begin{figure}[H]
    \includegraphics[scale=.5]{osc_rk2.pdf}
    \caption{Runge-Kutta 2}
\end{figure}
\begin{figure}[H]
    \includegraphics[scale=.5]{osc_rk4.pdf}
    \caption{Runge-Kutta 4}
\end{figure}

\subsection{Damped, forced harmonic oscillator}

\begin{figure}[H]
    \includegraphics[scale=.5]{damped_osc_big.pdf}
    \caption{$\omega = 2.0$}
\end{figure}

\begin{figure}[H]
    \includegraphics[scale=.5]{damped_osc_medium.pdf}
    \caption{$\omega = 1.2$}
\end{figure}

\begin{figure}[H]
    \includegraphics[scale=.5]{damped_osc_small.pdf}
    \caption{$\omega = 0.5$}
\end{figure}

We zien dat de grafiek nadert naar een stabiele periode, bij waardes aan de
buitenkant van het interval $[0.5, 2.0]$ heeft grafiek een redelijk stabiele
vorm, erbinnen zijn er vreemde fluctuaties.

\subsection{Lottka-Voltera}

We hebben de Lotka-Volterra simulatie met de opgegeven constanten uitgevoerd
voor verschillende startwaarden. De ene keer met startwaarden op het ``stabiele
punt'' en de andere keer met startwaarden daar ver vandaan. Het stabiele punt
ligt op $y = \frac{a}{b} = 0.5$ en $x = \frac{c}{d} = 1.0$.

\begin{figure}[H]
    \includegraphics[scale=.5]{lot_vol_close.pdf}
    \caption{$x(0) = 0.5$, $y(0) = 1.0$}
\end{figure}

\begin{figure}[H]
    \includegraphics[scale=.5]{lot_vol_far.pdf}
    \caption{$x(0) = 100$, $y(0) = 200$}
\end{figure}

We zien dat de grafiek bij de hoge waardes een kleiner periode heeft, dus vaker
fluctueert. Bij het stabiele punt zijn er grotere periodes, waardoor de prooi
sneller een groot aantal krijgt.

\subsection{Modified predator-prey model}

We gebruiken exact dezelfde startwaarden als bij Lotka-Volterra en nu krijgen
het volgende resultaat:

\begin{figure}[H]
    \includegraphics[scale=.5]{mod_pp_close.pdf}
    \caption{$x(0) = 0.5$, $y(0) = 1.0$}
\end{figure}

\begin{figure}[H]
    \includegraphics[scale=.5]{mod_pp_far.pdf}
    \caption{$x(0) = 100$, $y(0) = 200$}
\end{figure}

We zien dat in beide gevallen de grafiek niet boven de 100 uitkomt (namelijk
omdat $y_m = 100$, dit is de maximumwaarde). De tweede grafiek vertoont na
verloop van tijd min of meer hetzelfde gedrag als de eerste, alleen wordt in het
eerste gedeelte de stabiele positie ``opgezocht'' waarna naar dezelfde
evenwichtsstand wordt bewogen.

Hieruit concluderen we dat de startwaarden waarschijnlijk weinig uitmaken, omdat
na verloop van de tijd de grafiek toch wel een evenwichtsstand bereikt.

\subsection{PID controller}

De constante P is de mate waarin de afstand tot de doelpositie ($s$) meetelt
voor de snelheid van de beweging. Als $s(0)$ positief gekozen wordt moet P
negatief zijn (bijv. $3 > 0$, als $s(0) = 3$, er moet naar $s = 0$ worden
bewogen dus een negatieve beweging), en andersom.

D is de mate waarin de bewegingssnelheid wordt beperkt, men wil waarschijnlijk niet dat de arm
een bepaalde snelheid overschrijdt. Omdat D een beperkende factor is, is deze
ook negatief.

$d$ is de delay voor het bewegen voor de arm, we hebben voor verschillende waarden
hiervan de grafiek geplot. We hebben hierbij gekozen voor $P = -3$, $D = -1$, $a
= 0.1$ en $m = 10$ als constanten.

\begin{figure}[H]
    \includegraphics[scale=.5]{pid_big.pdf}
    \caption{$d = 1.0$}
\end{figure}

\begin{figure}[H]
    \includegraphics[scale=.5]{pid_medium.pdf}
    \caption{$d = 0.5$}
\end{figure}

\begin{figure}[H]
    \includegraphics[scale=.5]{pid_small.pdf}
    \caption{$d = 0.1$}
\end{figure}

We zien dat hoe kleiner $d$, hoe vlugger de grafiek een evenwichtsstand bereikt.
Dit is logisch, want de arm reageert sneller als de delay kleiner is.

\subsection{Gilpin's Model}

\end{document}
