\documentclass[12pt,a4paper,pdftex]{exam}
%\documentclass[answers,12pt,a4paper,pdftex]{exam}

\usepackage[german]{babel}
\usepackage{natbib}
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage[small]{caption}
\usepackage{sidecap}
\usepackage{pslatex}
\usepackage{amsmath}
\usepackage{amssymb}
\setlength{\marginparwidth}{2cm}
\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref}

%%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry}
\pagestyle{headandfoot}
\header{{\bfseries\large Exercise 6}}{{\bfseries\large Scripts and functions}}{{\bfseries\large 06. November, 2018}}
\firstpagefooter{Prof. Jan Benda}{Phone: 29 74 573}{Email:
  jan.benda@uni-tuebingen.de}
\runningfooter{}{\thepage}{}

\setlength{\baselineskip}{15pt}
\setlength{\parindent}{0.0cm}
\setlength{\parskip}{0.3cm}
\renewcommand{\baselinestretch}{1.15}


%%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{listings}
\lstset{
  language=Matlab,
  basicstyle=\ttfamily\footnotesize,
  numbers=left,
  numberstyle=\tiny,
  title=\lstname,
  showstringspaces=false,
  commentstyle=\itshape\color{darkgray},
  breaklines=true,
  breakautoindent=true,
  columns=flexible,
  frame=single,
  xleftmargin=1em,
  xrightmargin=1em,
  aboveskip=10pt
}

\newcommand{\code}[1]{\texttt{#1}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\begin{document}

\vspace*{-6.5ex}
\begin{center}
  \textbf{\Large Introduction to Scientific Computing}\\[1ex]
         {\large Jan Grewe, Jan Benda}\\[-3ex]
         Neuroethology \hfill --- \hfill Institute for Neurobiology \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\
\end{center}

The exercises are meant for self-monitoring and revision of the
lecture. You should try to solve them on your own. In contrast
to previous exercises, the solutions can not be saved in a single file
but each question needs an individual file. Combine the files into a
single zip archive and submit it via ILIAS. Name the archive according
to the pattern: ``scripts\_functions\_\{surname\}.zip''.

\begin{questions}

  \question Calculate the factorial of a given number $n$.
  \begin{parts}
    \part{}
    Version 1: Write a script that calculates the factorial of 5 and
    prints out the result.
    \begin{solution}
      \lstinputlisting{factorialscripta.m}
    \end{solution}

    \part{}
    Version 2: like version 1, but as a function that takes $n$ as
    input argument.
    \begin{solution}
      \lstinputlisting{printfactorial.m}
      \lstinputlisting{factorialscriptb.m}
    \end{solution}

    \part{}
    Version 3: like version 2, but the calculated result should not be
    printed on the command line but returned by the function. Write a
    script that calls the function and prints out the result.
    \begin{solution}
      \lstinputlisting{myfactorial.m}
      \lstinputlisting{factorialscriptc.m}
    \end{solution}
  \end{parts}

  \question Graphical display of a sinewave.
  \begin{parts}
    \part{}
    Implement a function that plots a sine with the amplitude 1 and
    the frequency $f=50$\,Hz $\left(\sin(2\pi \cdot f \cdot t)\right)$. Call the
    function in a script.
    \begin{solution}
      \lstinputlisting{plotsine50.m}
      \lstinputlisting{plotsinea.m}
    \end{solution}

    \part{}
    Improve the function that it takes the duration of the time axis,
    the amplitude, and the frequency as input arguments. The
    calculation should use a temporal stepsize that is 0.01 of the
    frequency.
    \begin{solution}
      \lstinputlisting{plotsine.m} \lstinputlisting{plotsineb.m}
    \end{solution}

    \part{}
    Write a script that calls the function and controls the
    plotting. Change the function in a way that it returns a proper
    time-axis and the calculated sinwave.
    \begin{solution}
      \lstinputlisting{sinewave.m}
      \lstinputlisting{plotsinec.m}
    \end{solution}

    \part{}
    Write a second function that does the plotting. It accepts the
    time and the sine as arguments. Make sure, that the plot is
    properly labeled. Write a small script that uses both funtions to
    plot a sine of $5$\,Hz frequency and an amplitude of 2 for a
    duration of 1.5\,s.
    \begin{solution}
      \lstinputlisting{plotsinewave.m}
      \lstinputlisting{plotsined.m}
    \end{solution}
  \end{parts}

  %\question Schreibe eine Funktion, die bin\"are Datens\"atze
  %('signal.bin' und 'signal2.bin' vom Montag) liest und die Daten als
  %Vektor zur\"uckgibt. Welche Argumente muss die Funktion
  %\"ubernehmen?

  \question Random Walk.  In a 1-D random walk an \emph{agent} walks
  randomly either in the one ($+1$) or the other ($-1$)
  direction. With each simulation step one direction is chosen and the
  position is updated accordingly. \textbf{There are some differences
    to the solution discussed in the lecture!}

  \begin{parts}
    \part{}
    Read the exercise completely before starting the implementation
    and then come up with a proper program layout of scripts and
    functions. What would be a suitable function to solve the task? Which
    arguments should it take? Which results should it return?
    \begin{solution}
      One function that computes one realisation of a random walk.
      Scripts for plotting and analysis.
      \lstinputlisting{randomwalkthresh.m}
    \end{solution}

    \part{}
    Run the simulation 10 times and plot the time-course of the
    positions of the \emph{agents} into the same plot. The probability
    of the two directions should be the same. Each \emph{agent} starts
    at position $0$ and the simulation should run until the position is
    greater than $50$ or less than $-50$.
    \begin{solution}
      \lstinputlisting{randomwalkscriptb.m}
    \end{solution}

    \part{}
    Now we want to know how the probability of $p_{+1}$ (the
    probability to walk into the $+1$ direction) impacts the random
    walk. Vary $p_{+1}$ in the range $0.5 \le p_{+1} < 0.8$. Do 10
    random walks for the four probabilities (apply the same thresholds for
    stopping the simulations as before).
    \begin{solution}
      \lstinputlisting{randomwalkscriptc.m}
    \end{solution}

    \part{}
    How does $p_{+1}$ affect the number of simulation steps? Plot the
    averages and standard deviations as a function of $p_{+1}$.
    \begin{solution}
      \lstinputlisting{randomwalkscriptd.m}
    \end{solution}
  \end{parts}

  %\question Modellierung des exponentiellen Wachstums einer isolierten
  %Population. Das exponentielle Wachstum einer isolierten Population
  %wird \"uber folgende Differentialgleichung beschrieben:
  %\begin{equation}
  %  \frac{dN}{dt} = N \cdot r,
  %\end{equation}
  %mit $N$ der Populationsgr\"o{\ss}e und $r$ der Wachstumsrate.
  %\begin{parts}
  %  \part  L\"ose die Gleichung numerisch mit dem Euler Verfahren. 
  %  \part Implementiere eine Funktion, die die Populationsgr\"o{\ss}e
  %  und die Zeit zur\"uckgibt.
  %  \part Plotte die Populationsgr\"o{\ss}e als Funktion der Zeit.
  %\end{parts}
  
  %\question Etwas realistischer ist das logistische Wachstum einer
  %isolierten Population, bei der das Wachstum durch eine Kapazit\"at
  %gedeckelt ist. Sie wird mit folgender Differentialgleichung
  %beschrieben:
  %\begin{equation}
  %  \frac{dN}{dt} = N \cdot r \cdot \left( 1 - \frac{N}{K} \right)
  %\end{equation}
  %mit $N$ der Population, der Wachstumsrate $r$ und $K$ der ``tragenden''
  %Kapazit\"at.
  %\begin{parts}
  %  \part Implementiere die L\"osung des logistischen Wachstums in
  %  einer Funktion. Benutze das Euler Verfahren. Die Funktion soll die
  %  Parameter $r$, $K$ sowie den Startwert von $N$ als Argumente
  %  \"ubernehmen.
  %  \part Die Funktion soll die Populationsgr\"o{\ss}e und die Zeit
  %  zur\"uckgeben.
  %  \part Simuliere das Wachstum mit einer Anzahl unterschiedlicher
  %  Startwerte f\"ur $N$.
  %  \part Stelle die Ergebnisse in einem Plot graphisch dar.
  %  \part Plotte das Wachstum $dN/dt$ als Funktion der
  %  Populationsgr\"o{\ss}e $N$.
  %\end{parts}

\end{questions}

\end{document}